我需要在CDK中创建一个VPC端点和一个ALB来指向VPC端点。
我发现InterfaceVpcEndpoint可以返回vpcEndpointNetworkInterfaceIds属性。因此,似乎缺少的部分是如何通过CDK的方式从这些弹性网卡in中获取内网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
....谢谢!
发布于 2019-12-05 10:49:45
AwsCustomResource.get_data-method返回一个引用对象,该对象现在会导致该问题。若要获取CloudFormation令牌(!GetAtt "DescribeNetworkInterfaces"."NetworkInterfaces.0.PrivateIpAddress"),必须显式使用Reference.to_string方法。
这一点:
ip = eni.get_data('NetworkInterfaces.0.PrivateIpAddress')变成:
ip = eni.get_data('NetworkInterfaces.0.PrivateIpAddress').to_string()https://stackoverflow.com/questions/57267594
复制相似问题