AWS CDK中如何引用EC2实例主网络接口解决流量镜像配置报错
问题原因
报错是因为你传入的networkInterfaceId字段为空,CDK的EC2实例对象不会默认填充networkInterfaceId属性,主网卡ID需要通过专用的实例属性或CloudFormation内置函数获取。
解决方法
根据你传入的targetInstance类型选择对应方案:
情况1:targetInstance.instance是标准ec2.Instance类型实例
直接调用attrPrimaryNetworkInterfaceId属性获取主网卡ID,修改mirrorSession代码即可:
const mirrorSession = new ec2.CfnTrafficMirrorSession(this, 'TrafficMirrorSession', { sessionNumber: 1, // 替换原有networkInterfaceId取值逻辑 networkInterfaceId: targetInstance.instance.attrPrimaryNetworkInterfaceId, trafficMirrorFilterId: mirrorFilter.ref, trafficMirrorTargetId: mirrorTarget.ref })
情况2:仅传入了EC2实例的ID字符串
如果跨堆栈传递的是实例ID而非完整实例对象,用CDK内置函数获取主网卡ID:
// 传入的是实例ID时,用Fn.getAtt获取主网卡ID const targetEniId = cdk.Fn.getAtt(你的实例ID变量, 'PrimaryNetworkInterfaceId').toString() const mirrorSession = new ec2.CfnTrafficMirrorSession(this, 'TrafficMirrorSession', { sessionNumber: 1, networkInterfaceId: targetEniId, trafficMirrorFilterId: mirrorFilter.ref, trafficMirrorTargetId: mirrorTarget.ref })
校验方法
如果需要确认取值是否正确,可以增加输出生成验证:
new cdk.CfnOutput(this, 'TargetInstancePrimaryEniId', { value: targetInstance.instance.attrPrimaryNetworkInterfaceId })
部署后在CloudFormation堆栈的输出页即可查看生成的主网卡ID,确认是否符合预期。
内容的提问来源于stack exchange,提问作者Ilias Koritsas
相关产品推荐
相关产品推荐

