You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用AWS CDK(TypeScript)通过EC2实例ID获取私有IP地址

使用TypeScript AWS CDK通过实例ID获取已有EC2实例的私有IP

由于EC2实例的私有IP属于运行时动态属性,CDK在合成阶段无法直接通过静态引用获取,必须借助自定义资源调用AWS EC2 API来获取。以下是具体实现方案:

核心思路

通过AwsCustomResource(CDK内置的自定义资源类型)调用EC2的DescribeInstances API,传入目标实例ID,从API响应中提取私有IP地址。

完整代码示例

import * as cdk from 'aws-cdk-lib';
import * as cr from 'aws-cdk-lib/custom-resources';
import { Construct } from 'constructs';

export class Ec2PrivateIpRetrieverStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // 替换为你的目标EC2实例ID
    const targetInstanceId = 'i-1234567890abcdef0';

    // 创建自定义资源,调用EC2 DescribeInstances API
    const ec2DescribeResource = new cr.AwsCustomResource(this, 'Ec2DescribeResource', {
      onCreate: {
        service: 'EC2',
        action: 'describeInstances',
        parameters: {
          InstanceIds: [targetInstanceId]
        },
        // 用实例ID作为物理资源ID,确保资源唯一性
        physicalResourceId: cr.PhysicalResourceId.fromResponse(`Reservations.0.Instances.0.InstanceId`)
      },
      // 自动生成调用API所需的IAM权限
      policy: cr.AwsCustomResourcePolicy.fromSdkCalls({
        resources: cr.AwsCustomResourcePolicy.ANY_RESOURCE
      })
    });

    // 从API响应中提取私有IP
    const instancePrivateIp = ec2DescribeResource.getResponseField('Reservations.0.Instances.0.PrivateIpAddress');

    // 输出私有IP(可选,用于验证结果)
    new cdk.CfnOutput(this, 'TargetEc2PrivateIp', {
      value: instancePrivateIp,
      description: '目标EC2实例的私有IP地址'
    });
  }
}

关键说明

  • 权限配置:AwsCustomResourcePolicy.fromSdkCalls会自动生成允许调用ec2:DescribeInstances的IAM权限,无需手动编写复杂的权限策略。
  • 响应路径:Reservations.0.Instances.0.PrivateIpAddress对应DescribeInstances API的响应结构,因仅查询单个实例,取第一个Reservation下的第一个实例的私有IP即可。
  • 动态属性使用:获取到的instancePrivateIp是动态值,可直接传递给其他CDK资源配置(如作为容器环境变量、安全组规则目标等),但无法在合成阶段作为静态字符串使用。
  • 错误处理:若实例ID无效、实例不存在或权限不足,自定义资源执行会失败,导致部署中断。

内容的提问来源于stack exchange,提问作者Jöcker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 22:12:25