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.
se reserva para especificar valores de salida de pilas anidadas y se puede utilizar en cualquier parte de la plantilla contenedora.nestedstackoutputname
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"