首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取CDK中私有网络端点的PrivateIPAddress?

如何获取CDK中私有网络端点的PrivateIPAddress?
EN

Stack Overflow用户
提问于 2019-07-30 16:40:26
回答 1查看 1.2K关注 0票数 3

我需要在CDK中创建一个VPC端点和一个ALB来指向VPC端点。

我发现InterfaceVpcEndpoint可以返回vpcEndpointNetworkInterfaceIds属性。因此,似乎缺少的部分是如何通过CDK的方式从这些弹性网卡in中获取内网IP地址。

我发现CDK有一个自定义资源包,它的示例显示我可以使用AwsCustomResource调用AWS API (EC2/DescribeNetworkInterfaces)来获取IP地址。

我尝试编写一个自定义资源,如下所示:

代码语言:javascript
复制
eni = AwsCustomResource(
        self, 'DescribeNetworkInterfaces',
        on_create=custom_resources.AwsSdkCall(
            service='ec2',
            action='describeNetworkInterfaces',
            parameters= {
                'NetworkInterfaceId.N': [eni_id]
            },
            physical_resource_id=str(time.time())
        )
    )
ip = eni.get_data('NetworkInterfaces.0.PrivateIpAddress')

并将ip传入elbv2.IPTarget。

但是我似乎遗漏了一些东西,所以它抱怨它需要一个标量而不是引用?

代码语言:javascript
复制
(.env) ➜  base-stack (master) ✔ cdk synth base --no-staging > template.yaml
jsii.errors.JavaScriptError: 
  Error: Expected Scalar, got {"$jsii.byref":"@aws-cdk/core.Reference@10015"}
      at Object.deserialize (/Volumes/DATA/ci/aws/base-stack/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:12047:23)
      at Kernel._toSandbox (/Volumes/DATA/ci/aws/base-stack/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:7031:61)
      at /Volumes/DATA/ci/aws/base-stack/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:7084:33
      at Array.map (<anonymous>)
      at Kernel._boxUnboxParameters (/Volumes/DATA/ci/aws/base-stack/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:7084:19)
      at Kernel
....

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-12-05 10:49:45

AwsCustomResource.get_data-method返回一个引用对象,该对象现在会导致该问题。若要获取CloudFormation令牌(!GetAtt "DescribeNetworkInterfaces"."NetworkInterfaces.0.PrivateIpAddress"),必须显式使用Reference.to_string方法。

这一点:

代码语言:javascript
复制
ip = eni.get_data('NetworkInterfaces.0.PrivateIpAddress')

变成:

代码语言:javascript
复制
ip = eni.get_data('NetworkInterfaces.0.PrivateIpAddress').to_string()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57267594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档