我正在尝试使用打字稿将以下CloudFormation资源迁移到CDK:
ALBSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId: !Ref VPCId
GroupDescription: !Sub "${Application}-${Environment}-alb-sg"
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: !Ref SecurityGroupIngressCidr
我已经尝试过此操作(我不知道如何创建必要的属性):
const albSecurityGroup = new SecurityGroup(this, "ALBSecurityGroup", {
vpc: Vpc.fromLookup(this, id, {
vpcId: props.vpcId.stringValue
}),
description: appEnv + "-alb-sg"
})
并使用这样的Cfn构造函数(我不知道如何将CfnSecurityGroup与CfnSecurityGroupIngress结合使用):
const x = new CfnSecurityGroupIngress(this, id, {
ipProtocol: "tcp",
fromPort: 443,
toPort: 443,
cidrIp: props.securityGroupIngressCidr
});
const albSecurityGroupCfn = new CfnSecurityGroup(this, id, {
vpcId: props.vpcId.stringValue,
groupDescription: appEnv + "-alb-sg"
});
感谢您的帮助。
答案 0 :(得分:1)
今天我意识到这是一个简单的解决方案。
const albSecurityGroupCfn = new CfnSecurityGroup(this, id, {
vpcId: props.vpcId.stringValue,
groupDescription: appEnv + "-alb-sg",
securityGroupIngress: [
new CfnSecurityGroupIngress(this, id, {
ipProtocol: "tcp",
fromPort: 443,
toPort: 443,
cidrIp: props.securityGroupIngressCidr
})
]
});
谢谢!
更新 :( dmahapatro)
使用上述方法,您将收到一个编译时错误,表明您需要适当的类型。这是上述解决方案的一个小调整:
const albSecurityGroupCfn = new CfnSecurityGroup(this, id, {
vpcId: props.vpcId.stringValue,
groupDescription: appEnv + "-alb-sg",
securityGroupIngress: [{
ipProtocol: "tcp",
fromPort: 443,
toPort: 443,
cidrIp: props.securityGroupIngressCidr
}]
});
securityGroupIngress
需要以下类型:
Type: Array<CfnSecurityGroup.IngressProperty | cdk.IResolvable> | cdk.IResolvable
当您提供CfnSecurityGroupIngress
数组时,它不会解析为任何这些类型。一种更好的处理方法是使用对象数组,默认情况下,这些对象将强制转换为Array<CfnSecurityGroup.IngressProperty>
。最新答案表明,您无需为CfnSecurityGroupIngress
实例化securityGroupIngress
。
另一方面,如果将VS Code用作CDK的IDE,它将预先捕获那些编译时错误。