使用AWS CDK搭建带EC2的ALB时遇JSII序列化错误求助
问题原因
错误核心在于**ApplicationTargetGroup的targets参数传入了EC2实例ID字符串**,但CDK要求该参数接收的是实现IApplicationLoadBalancerTarget接口的对象(如EC2实例对象本身),而非字符串类型的实例ID。JSII序列化层无法将字符串转换为预期的目标对象,因此抛出序列化错误。
修复方案
修改targets参数,直接传入EC2实例对象(而非实例ID属性)即可解决问题。
修复后的代码
alb = elbv2.ApplicationLoadBalancer( self, "MyALB", vpc=vpc, internet_facing=True, security_group=sec_group, load_balancer_name="MyALB", ) # Add Listener to ALB listener = alb.add_listener( "Listener", port=80, open=True, ) # 修复targets参数:直接传入EC2实例对象 target_group = elbv2.ApplicationTargetGroup( self, "TargetGroup", vpc=vpc, port=80, targets=[instance1, instance2], # 替换为实例对象,而非instance_id health_check=elbv2.HealthCheck( path="/", interval=Duration.seconds(60) ) ) listener.add_targets( "ListenerTargetGroup", target_groups=[target_group] ) # Output the ALB DNS Name CfnOutput(self, "LoadBalancerDNS", value=alb.load_balancer_dns_name)
额外说明
如果是导入现有EC2实例(而非通过CDK创建),可以使用elbv2.InstanceTarget包装实例ID,生成符合要求的目标对象:
from aws_cdk import aws_elasticloadbalancingv2 as elbv2 # 包装现有实例ID为合法目标对象 target1 = elbv2.InstanceTarget("i-1234567890abcdef0") target2 = elbv2.InstanceTarget("i-0987654321fedcba0") target_group = elbv2.ApplicationTargetGroup( self, "TargetGroup", vpc=vpc, port=80, targets=[target1, target2], # 其他配置... )
内容的提问来源于stack exchange,提问作者Sourav Mukherjee
相关产品推荐
相关产品推荐

