Мне нужно создать конечную точку VPC и ALB для нацеливания на конечную точку VPC в CDK.
Я обнаружил, что InterfaceVpcEndpoint может возвращать атрибут vpcEndpointNetworkInterfaceIds. Таким образом, похоже, что отсутствует часть, как получить частный IP-адрес из этих идентификаторов ENI с помощью CDK.
Я обнаружил, что CDK имеет пакет настраиваемых ресурсов, его пример показывает, что я могу использовать AwsCustomResource для вызова API AWS (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
....
Спасибо!