Cloudformation:如何根据用户输入配置资源

时间:2018-09-06 18:18:13

标签: amazon-web-services amazon-cloudformation

遇到这种情况时,我正在为beantalk编写Cloudformation模板。我的模板中包含以下代码

 SecurityGroupIngress:
    - IpProtocol: tcp
      FromPort: '80'
      ToPort: '80'
      SourceSecurityGroupId: !Ref ELBSecGroupForBeanStalk
    - IpProtocol: tcp
      FromPort: '22'
      ToPort: '22'
      CidrIp: !If
        - Range
        - !Ref AcessIPRange
        - !Ref 'AWS::NoValue'
    - IpProtocol: tcp
      FromPort: '22'
      ToPort: '22'
      SourceSecurityGroupId: !If
        - SecurityGroupRange
        - !Ref CustomeSecurityGroup
        - !Ref 'AWS::NoValue'

现在您可以看到我已经对端口22和80进行了硬编码,但是如何使它们可配置。

假设一个用户来了,并且想添加4个端口或6个端口。我想使其可配置,因此可以使用相同的模板。我可以使它们参数化,但无法获得可配置的方法。

1 个答案:

答案 0 :(得分:0)

不幸的是,仅通过CloudFormation无法实现这一目标。这将是动态的资源数量,这不是CF的一部分。

您最好的选择是:

  • 使用troposphere之类的工具动态生成将要使用的CloudFormation模板(因此具有动态端口数)
  • 在模板上使用AWS Lambda-backed Custom Resource而不是指定double shortestVreme = Double.MAX_VALUE; for(Atleticar arrElement: niza) { if(arrElement.getVreme() < shortestVreme) { shortestVreme = arrElement.getVreme(); } } return shortestVreme; // from the method 。 Lambda函数将使用SecurityGroupId作为参数以及端口号。从那里,您可以调用AWS API(使用NodeJS,Python或与Lambda兼容的任何工具)并添加所需的端口。不要忘记在更新模板时也包含用于更新和删除规则的代码。