AWS CloudFormation 템플릿 코드 조각 - AWS CloudFormation

AWS CloudFormation 템플릿 코드 조각

중첩 스택

템플릿에 스택 중첩

이 예제 템플릿에는 myStack이라는 중첩 스택 리소스가 포함되어 있습니다. AWS CloudFormation은 템플릿에서 스택을 생성할 때 myStack을 생성하는데, 이 스택에서 템플릿은 TemplateURL 속성에 지정됩니다. 출력 값 StackRefmyStack의 스택 ID이고 OutputFromNestedStack 값은 myStack 리소스의 출력 값 BucketName을 반환합니다. 출력. nestedstackoutputname 형식은 중첩 스택의 출력 값을 지정하는 용도로 예약되어 있으며 포함 템플릿 내 어디서든 사용할 수 있습니다.

자세한 내용은 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

템플릿 내 입력 파라미터를 사용하여 스택 중첩

이 예제 템플릿에는 입력 파라미터를 지정하는 스택 리소스가 들어 있습니다. AWS CloudFormation은 템플릿의 스택을 생성하는 경우, myStackWithParams 스택을 생성하는 데 사용되는 템플릿의 입력 파라미터로 Parameters 속성 안에 선언되는 값 페어를 사용합니다. 이 예제에는 InstanceTypeKeyName 파라미터가 지정되어 있습니다.

자세한 내용은 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

대기 조건

Amazon EC2 인스턴스에 대기 조건 사용

중요

Amazon EC2 및 Auto Scaling 리소스의 경우 대기 조건 대신 CreationPolicy 속성을 사용하는 것이 좋습니다. 그러한 리소스에 CreationPolicy 속성을 추가하고 cfn-signal 헬퍼 스크립트를 사용하여 인스턴스 생성 프로세스가 완료되면 신호를 보내도록 합니다.

생성 정책을 사용할 수 없는 경우 다음 예제 템플릿을 참조할 수 있습니다. 이 템플릿에서는 대기 조건을 사용하여 Amazon EC2 인스턴스를 선언합니다. 대기 조건 myWaitCondition은 신호 처리용으로 myWaitConditionHandle을 사용하며, DependsOn 속성을 사용하여 Amazon EC2 인스턴스 리소스가 생성된 이후에 대기 조건이 트리거되도록 지정합니다. 또한 Timeout 속성을 사용하여 대기 조건에 대해 4500초의 기간을 지정합니다. 또한, 대기 조건에 신호를 전송하는 미리 서명된 URL이 Ec2Instance 리소스의 UserData 속성을 사용하여 Amazon EC2 인스턴스에 전달되므로, 해당 Amazon EC2 인스턴스에서 실행 중인 애플리케이션이나 스크립트에서 미리 서명된 URL을 검색한 후 이 URL을 사용하여 대기 조건에 성공 또는 실패 신호를 전송할 수 있습니다. cfn-signal을 사용하거나 대기 조건에 신호를 전송하는 애플리케이션이나 스크립트를 작성해야 합니다. 출력 값 ApplicationData에는 대기 조건 신호에서 다시 전달된 데이터가 포함되어 있습니다.

자세한 내용은 템플릿에서 대기 조건 생성, AWS::CloudFormation::WaitCondition, AWS::CloudFormation::WaitConditionHandle, 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.

cfn-signal 헬퍼 스크립트를 사용하여 대기 조건에 신호 전송

다음 예제에서는 대기 조건에 성공 신호를 전송하는 cfn-signal 명령줄을 보여줍니다. EC2 인스턴스의 UserData 속성에서 명령줄을 정의해야 합니다.

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 - | '

Curl을 사용하여 대기 조건에 신호 전송

다음 예제에서는 대기 조건에 성공 신호를 전송하는 Curl 명령줄을 보여 줍니다.

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"

이때 file /tmp/a에는 다음과 같은 JSON 구조가 포함되어 있습니다.

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

이 예제에서는 명령줄에서 JSON을 파라미터로 전송하는 경우를 제외하고는 동일한 성공 신호를 전송하는 Curl 명령줄을 표시합니다.

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"