gpt4 book ai didi

aws-cdk - 如何在CDK中获取VPC Endpoint的PrivateIPAddress?

转载 作者:行者123 更新时间:2023-12-04 15:42:39 26 4
gpt4 key购买 nike

我需要创建一个 VPC 端点和一个 ALB 以在 CDK 中以 VPC 端点为目标。

我发现 InterfaceVpcEndpoint 可以返回 vpcEndpointNetworkInterfaceIds 属性。所以似乎缺少的部分是如何以 CDK 方式从这些 ENI ID 中获取私有(private) IP 地址。

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

我尝试编写如下自定义资源:

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。

但似乎我错过了什么,所以它提示它需要一个标量而不是引用?

(.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
....

谢谢!

最佳答案

AwsCustomResource.get_data 方法返回一个 Reference 对象,它现在导致了问题。要获取 CloudFormation token (!GetAtt "DescribeNetworkInterfaces"."NetworkInterfaces.0.PrivateIpAddress") Reference.to_string方法必须显式使用。

这个:

ip = eni.get_data('NetworkInterfaces.0.PrivateIpAddress')

变成:

ip = eni.get_data('NetworkInterfaces.0.PrivateIpAddress').to_string()

关于aws-cdk - 如何在CDK中获取VPC Endpoint的PrivateIPAddress?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57267594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com