簡體   English   中英

如何在nodejs項目中獲取aws ecs容器ip地址

[英]How to fetch aws ecs container ip address in nodejs project

我已將我的 API 項目(Node.js 項目)上傳到 AWS ECS 容器,並且我的項目包含 swagger 文檔。 在 swagger 中,我想指出當前主機 Ip 運行 API 的地址,但我找不到正確的代碼來獲取它。 有解決方案嗎? 因為我已經設法在.NetCore API 上實現它。

它現在看起來如何:
現在看起來怎么樣

提前謝謝。

您可以使用 ECS 任務中的 AWS ECS 元數據終端節點http://172.17.0.1:51678/v1/metadata來獲取有關容器實例的詳細信息。 然后可以使用獲取的詳細信息來獲取實例的私有/公共 ip 地址。 例子:

import http from 'http';
import util from 'util';
import AWS from 'aws-sdk';

export const getIPAddresses = async () => {
  try {
    let options: any = {
      hostname: '172.17.0.1',
      port: 51678,
      path: '/v1/metadata',
      method: 'GET'
    }
    let containerInstanceDetails: any = await httpGet(options);
    containerInstanceDetails = JSON.parse(containerInstanceDetails);
    const cluster = containerInstanceDetails["Cluster"];
    const containerInstanceArn = containerInstanceDetails["ContainerInstanceArn"];
    const containerInstanceUUID = containerInstanceArn.split('/')[2];
    let params: any = {
      cluster: cluster,
      containerInstances: [containerInstanceUUID]
    }

    if (!AWS.config.region) {
      AWS.config.update({
        region: <your_aws_region>
      });
    }

    const ecs = new AWS.ECS({ 'region': <your_aws_region> });
    const ec2 = new AWS.EC2({ 'region': <your_aws_region> });

    const describeContainerInstancesAsync = util.promisify(ecs.describeContainerInstances).bind(ecs);
    const describeInstancesAsync = util.promisify(ec2.describeInstances).bind(ec2);
    let data = await describeContainerInstancesAsync(params);
    const ec2InstanceId = data.containerInstances[0].ec2InstanceId;

    params = {
      InstanceIds: [
        ec2InstanceId
      ]
    }

    data = await describeInstancesAsync(params);
    return [data.Reservations[0].Instances[0].PrivateIpAddress, data.Reservations[0].Instances[0].PublicIpAddress];
  }
  catch(err) {
    console.log(err);
  }
}

async function httpGet(options) {
  return new Promise((resolve, reject) => {
    http.get(options, response => {
      response.setEncoding('utf8');
      response.on('data', data => {
        resolve(data);
      });
    }).on('error', error => {
      reject(error.message);
    });
  });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM