Создание ресурса CloudFormation, если не существует - PullRequest
0 голосов
/ 05 марта 2019

Я хочу создать Route53 Hosted Zone с Cloudformation, поэтому я хочу проверить, есть ли в Route53 некоторая информация о HostedZone.

В логике моего случая мне нужно проверить, существует ли ресурс, игнорировать создание ресурса.Как я могу справиться с этой проблемой.

Шаблон My 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" ] }
     ]
  }

}}

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Лучший способ сделать это - сделать следующее:

  1. Создать настраиваемый ресурс с лямбда-поддержкой
  2. Проверить с помощью лямбды, существует ли ваш ресурс или нет, в зависимости от этого.вернуть идентификатор
  3. Используйте условия облачной информации, чтобы проверить значение возвращенного идентификатора, а затем соответственно создать или не создавать ресурс.

Вы можете получить возвращаемое значение пользовательского ресурса с помощью! GetAtt

Более подробную информацию можно найти на веб-сайтах AWS, касающихся пользовательского ресурса: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cfn-customresource.html

0 голосов
/ 05 марта 2019

Это не совсем тот ответ, который вам нужен.Но в целом вы можете использовать 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>

Здесь мой RDS DBinstance создается только в том случае, если мой environment size не AuroraCluster.

Если вы не найдете лучшего решения, вы можете принять это какпользовательский ввод (создавать набор записей или нет) и использовать это как условие для создания вашего ресурса.Надеюсь, это поможет.

...