Fragmentos de plantillas de AWS CloudFormation - AWS CloudFormation

Fragmentos de plantillas de AWS CloudFormation

Pilas anidadas

Anidación de una pila en una plantilla

Esta plantilla de ejemplo contiene un recurso de pilas anidadas denominadas myStack. Cuando AWS CloudFormation crea una pila a partir de la plantilla, crea myStack, cuya plantilla se especifica en la propiedad TemplateURL. El valor de salida StackRef devuelve el ID de pila myStack y el valor OutputFromNestedStack devuelve el valor de salida BucketName desde el recurso myStack. El formato Outputs.nestedstackoutputname se reserva para especificar valores de salida de pilas anidadas y se puede utilizar en cualquier parte de la plantilla contenedora.

Para obtener más información, 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

Anidar una pila con parámetros de entrada en una plantilla

Esta plantilla de ejemplo contiene un recurso de un conjunto que especifica parámetros de entrada. Cuando AWS CloudFormation crea una pila a partir de esta plantilla, utiliza los pares de valores declarados dentro de la propiedad Parameters como parámetros de entrada para la plantilla utilizada para crear la pila myStackWithParams. En este ejemplo, se especifican los parámetros InstanceType y KeyName.

Para obtener más información, 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

Condición de espera

Uso de una condición de espera con una instancia Amazon EC2

importante

Con los recursos de Amazon EC2 y Auto Scaling recomendamos que use un atributo CreationPolicy en lugar de condiciones de espera. Agregue un atributo CreationPolicy a esos recursos y use el script de ayuda cfn-signal para señalar que el proceso de creación de instancias ha finalizado satisfactoriamente.

Si no puede utilizar una política de creación, ve la siguiente plantilla de ejemplo, que declara una instancia Amazon EC2 con una condición de espera. La condición de espera myWaitCondition utiliza myWaitConditionHandle para señalización, utiliza el atributo DependsOn para especificar que la condición de espera se activará después de que se haya creado el recurso de la instancia de Amazon EC2 y utiliza la propiedad Timeout para especificar una duración de 4500 segundos para la condición de espera. Además, la URL prefirmada que señala la condición de espera se transfiere a la instancia de Amazon EC2 con la propiedad UserData del recurso de Ec2Instance, lo que permite que se ejecute una aplicación o script en dicha instancia de Amazon EC2 para recuperar la URL prefirmada y emplearla para señalar un éxito o error a la condición de espera. Necesita usar cfn-signal o crear la aplicación o script que señale la condición de espera. El valor de salida ApplicationData contiene los datos devueltos desde la señal de condición de espera.

Para obtener más información, consulte Creación de condiciones de espera en una plantilla de CloudFormation, AWS::CloudFormation::WaitCondition, AWS::CloudFormation::WaitConditionHandle y 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.

Uso del script auxiliar cfn-signal para señalar a una condición de espera

En este ejemplo se muestra una línea de comandos cfn-signal que indica el éxito a una condición de espera. Tiene que definir la línea de comandos en la propiedad UserData de la instancia de 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 - | '

Uso de Curl para señalar una condición de espera

En este ejemplo se muestra una línea de comandos Curl que indica el éxito a una condición 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"

Donde el archivo /tmp/a contiene la siguiente estructura JSON:

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

En este ejemplo se muestra una línea de comandos Curl que envía la misma señal de éxito, salvo que envía la señal JSON como parámetro en la línea de comandos.

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"