AWS CDK-SecurityGroup创建打字稿

时间:2020-06-11 22:27:08

标签: typescript amazon-web-services amazon-cloudformation aws-cdk

我正在尝试使用打字稿将以下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"
    });

感谢您的帮助。

1 个答案:

答案 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,它将预先捕获那些编译时错误。