Trechos de modelo do AWS CloudFormation - AWS CloudFormation

Trechos de modelo do AWS CloudFormation

Pilhas aninhadas

Aninhar uma pilha em um modelo

Este modelo de exemplo contém um recurso de pilha aninhada chamado myStack. Quando cria uma pilha com base no modelo, o AWS CloudFormation cria o myStack, cujo modelo é especificado na propriedade TemplateURL. O valor de saída StackRef retorna o ID de pilha do myStack, e o valor OutputFromNestedStack retorna o valor de saída BucketName do recurso myStack. O formato Outputs.nestedstackoutputname é reservado para especificar valores de saída de pilhas aninhadas e pode ser usado em qualquer lugar dentro do modelo que a contém.

Para obter mais informações, consulte AWS::CloudFormation::Stack.

JSON

{ "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "myStack" : { "Type" : "AWS::CloudFormation::Stack", "Properties" : { "TemplateURL" : "https://s3.amazonaws.com/cloudformation-templates-us-east-1/S3_Bucket.template", "TimeoutInMinutes" : "60" } } }, "Outputs": { "StackRef": {"Value": { "Ref" : "myStack"}}, "OutputFromNestedStack" : { "Value" : { "Fn::GetAtt" : [ "myStack", "Outputs.BucketName" ] } } } }

YAML

AWSTemplateFormatVersion: '2010-09-09' Resources: myStack: Type: AWS::CloudFormation::Stack Properties: TemplateURL: https://s3.amazonaws.com/cloudformation-templates-us-east-1/S3_Bucket.template TimeoutInMinutes: '60' Outputs: StackRef: Value: !Ref myStack OutputFromNestedStack: Value: !GetAtt myStack.Outputs.BucketName

Aninhar uma pilha com parâmetros de entrada em um modelo

Este modelo de exemplo contém um recurso de pilha que especifica parâmetros de entrada. Quando cria uma pilha com base nesse modelo, o AWS CloudFormation usa os pares de valores declarados dentro da propriedade Parameters como os parâmetros de entrada para o modelo usado na criação da pilha myStackWithParams. Neste exemplo, os parâmetros InstanceType e KeyName são especificados.

Para obter mais informações, consulte AWS::CloudFormation::Stack.

JSON

{ "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "myStackWithParams" : { "Type" : "AWS::CloudFormation::Stack", "Properties" : { "TemplateURL" : "https://s3.amazonaws.com/cloudformation-templates-us-east-1/EC2ChooseAMI.template", "Parameters" : { "InstanceType" : "t2.micro", "KeyName" : "mykey" } } } } }

YAML

AWSTemplateFormatVersion: '2010-09-09' Resources: myStackWithParams: Type: AWS::CloudFormation::Stack Properties: TemplateURL: https://s3.amazonaws.com/cloudformation-templates-us-east-1/EC2ChooseAMI.template Parameters: InstanceType: t2.micro KeyName: mykey

Condição de espera

Usar uma condição de espera com uma instância do Amazon EC2

Importante

Para recursos do Amazon EC2 e do Auto Scaling, recomendamos que você use um atributo CreationPolicy, em vez de condições de espera. Adicione um atributo CreationPolicy a esses recursos e use o script auxiliar cfn-signal para sinalizar quando um processo de criação de instância foi concluído com êxito.

Caso não possa usar uma política de criação, você visualiza o modelo de exemplo a seguir, que declara uma instância Amazon EC2 com uma condição de espera. A condição de espera myWaitCondition usa myWaitConditionHandle para sinalização, DependsOn attribute para especificar que a condição de espera irá disparar depois do recurso de instância do Amazon EC2 ter sido criado e usa a propriedade Timeout para especificar uma duração de 4.500 segundos para a condição de espera. Além disso, o URL pré-assinado que sinaliza a condição de espera é passado para a instância do Amazon EC2 com a propriedade UserData do recurso Ec2Instance, o que permite que uma aplicação ou script em execução nessa instância do Amazon EC2 recupere o URL pré-assinado e o empregue a fim de sinalizar um êxito ou uma falha para a condição de espera. Você precisa usar cfn-signal ou criar a aplicação ou o script que sinaliza a condição de espera. O valor de saída ApplicationData contém os dados repassados pelo sinal da condição de espera.

Para obter mais informações, consulte Criar condições de espera em um modelo, AWS::CloudFormation::WaitCondition, AWS::CloudFormation::WaitConditionHandle e cfn-signal.

JSON

{ "AWSTemplateFormatVersion" : "2010-09-09", "Mappings" : { "RegionMap" : { "us-east-1" : { "AMI" : "ami-0ff8a91507f77f867" }, "us-west-1" : { "AMI" : "ami-0bdb828fd58c52235" }, "eu-west-1" : { "AMI" : "ami-047bb4163c506cd98" }, "ap-northeast-1" : { "AMI" : "ami-06cd52961ce9f0d85" }, "ap-southeast-1" : { "AMI" : "ami-08569b978cc4dfa10" } } }, "Resources" : { "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "UserData" : { "Fn::Base64" : {"Ref" : "myWaitHandle"}}, "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]} } }, "myWaitHandle" : { "Type" : "AWS::CloudFormation::WaitConditionHandle", "Properties" : { } }, "myWaitCondition" : { "Type" : "AWS::CloudFormation::WaitCondition", "DependsOn" : "Ec2Instance", "Properties" : { "Handle" : { "Ref" : "myWaitHandle" }, "Timeout" : "4500" } } }, "Outputs" : { "ApplicationData" : { "Value" : { "Fn::GetAtt" : [ "myWaitCondition", "Data" ]}, "Description" : "The data passed back as part of signalling the WaitCondition." } } }

YAML

AWSTemplateFormatVersion: '2010-09-09' Mappings: RegionMap: us-east-1: AMI: ami-0ff8a91507f77f867 us-west-1: AMI: ami-0bdb828fd58c52235 eu-west-1: AMI: ami-047bb4163c506cd98 ap-northeast-1: AMI: ami-06cd52961ce9f0d85 ap-southeast-1: AMI: ami-08569b978cc4dfa10 Resources: Ec2Instance: Type: AWS::EC2::Instance Properties: UserData: Fn::Base64: !Ref myWaitHandle ImageId: Fn::FindInMap: - RegionMap - Ref: AWS::Region - AMI myWaitHandle: Type: AWS::CloudFormation::WaitConditionHandle Properties: {} myWaitCondition: Type: AWS::CloudFormation::WaitCondition DependsOn: Ec2Instance Properties: Handle: !Ref myWaitHandle Timeout: '4500' Outputs: ApplicationData: Value: !GetAtt myWaitCondition.Data Description: The data passed back as part of signalling the WaitCondition.

Usar o script auxiliar cfn-signal para sinalizar uma condição de espera

Este exemplo mostra uma linha de comando cfn-signal que sinaliza êxito para uma condição de espera. Você precisa definir a linha de comando na propriedade UserData da instância do EC2.

JSON

"UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "#!/bin/bash -xe\n", "/opt/aws/bin/cfn-signal --exit-code 0 '", { "Ref": "myWaitHandle" }, "'\n" ] ] } }

YAML

UserData: 'Fn::Base64': 'Fn::Join': - '' - - | #!/bin/bash -xe - /opt/aws/bin/cfn-signal --exit-code 0 ' - Ref: myWaitHandle - | '

Usar Curl para sinalizar uma condição de espera

Este exemplo mostra uma linha de comando Curl que sinaliza êxito para uma condição de espera.

curl -T /tmp/a "https://cloudformation-waitcondition-test.s3.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-east-1%3A034017226601%3Astack%2Fstack-gosar-20110427004224-test-stack-with-WaitCondition--VEYW%2Fe498ce60-70a1-11e0-81a7-5081d0136786%2FmyWaitConditionHandle?Expires=1303976584&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=ik1twT6hpS4cgNAw7wyOoRejVoo%3D"

Em que o arquivo/tmp/a contém a seguinte estrutura JSON:

{ "Status" : "SUCCESS", "Reason" : "Configuration Complete", "UniqueId" : "ID1234", "Data" : "Application has completed configuration." }

Este exemplo mostra uma linha de comando Curl que envia o mesmo sinal de êxito, exceto por enviar o JSON como um parâmetro na linha de comando.

curl -X PUT -H 'Content-Type:' --data-binary '{"Status" : "SUCCESS","Reason" : "Configuration Complete","UniqueId" : "ID1234","Data" : "Application has completed configuration."}' "https://cloudformation-waitcondition-test.s3.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-east-1%3A034017226601%3Astack%2Fstack-gosar-20110427004224-test-stack-with-WaitCondition--VEYW%2Fe498ce60-70a1-11e0-81a7-5081d0136786%2FmyWaitConditionHandle?Expires=1303976584&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=ik1twT6hpS4cgNAw7wyOoRejVoo%3D"