CloudFormation 资源创建(如果不存在)

Col*_*rk1 13 amazon-web-services aws-cloudformation devops infrastructure-as-code

我想用 CloudFormation 创建 Route53 HostedZone,所以我想检查一下 Route53 中关于 HostedZone 的一些信息是否存在。

在我的情况下,我需要检查资源是否存在,忽略资源创建。我该如何处理这个问题。

我的 CloudFormation 模板如下所示。

"myDNSRecord" : {
  "Type" : "AWS::Route53::RecordSet",
  "Properties" : {
    "HostedZoneName" : { "Ref" : "HostedZoneResource" },
    "Comment" : "DNS name for my instance.",  
    "Name" : {
      "Fn::Join" : [ "", [
        {"Ref" : "Ec2Instance"}, ".",
        {"Ref" : "AWS::Region"}, ".",
        {"Ref" : "HostedZone"} ,"."
      ] ]
    },
    "Type" : "A",
    "TTL" : "900",
    "ResourceRecords" : [
      { "Fn::GetAtt" : [ "Ec2Instance", "PublicIp" ] }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

ASR*_*ASR 5

这不完全是您需要的答案。但总的来说,您可以Conditions为此使用。在您的模板中,您在Conditions部分中定义您的条件并使用它来有条件地创建资源。例如

Parameters:
  EnvironmentSize:
    Type: String
    Default: Micro
    AllowedValues:
      - Micro
      - Small
      - Medium
      - AuroraCluster
Conditions:
  isntAuroraCluster:
    !Not [!Equals [!Ref EnvironmentSize, "AuroraCluster"]]
DBInstance:
  Type: AWS::RDS::DBInstance
  Condition: isntAuroraCluster
  Properties:
    DBInstanceClass: !FindInMap [InstanceSize, !Ref EnvironmentSize, DB]
    <Rest of properties>
Run Code Online (Sandbox Code Playgroud)

此处 myRDS DBinstance仅在 myenvironment size不是时才创建AuroraCluster

如果您没有找到更好的解决方案,您可以将其作为用户输入(无论是否创建记录集)并将其用作创建资源的条件。希望能帮助到你。