cfn-signal - AWS CloudFormation

cfn-signal

설명

cfn-signal 헬퍼 스크립트는 Amazon EC2 인스턴스가 성공적으로 생성 또는 업데이트되었는지 여부를 나타내도록 CloudFormation에 신호를 보냅니다. 인스턴스에서 소프트웨어 애플리케이션을 설치 및 구성하는 경우 소프트웨어 애플리케이션이 준비되면 CloudFormation에 신호를 보낼 수 있습니다.

CreationPolicy 속성와 함께 cfn-signal 스크립트를 사용하거나 WaitOnResourceSignals 업데이트 정책과 함께 Auto Scaling 그룹을 사용합니다. CloudFormation에서 이러한 정책을 사용하여 리소스를 생성 또는 업데이트하는 경우 리소스가 필요한 신호 수를 수신하거나 제한 시간이 초과될 때가지 스택에 대한 작업을 일시 중지합니다. CloudFormation에서 수신하는 각각의 유효한 신호에 대해 CloudFormation에서는 스택 이벤트에 해당 신호를 게시합니다. 따라서 각 신호를 추적할 수 있습니다. 생성 정책 및 cfn-signal 사용에 대한 연습은 AWS CloudFormation을 사용하여 Amazon EC2에서 애플리케이션 배포 단원을 참조하십시오.

참고

cfn-signal에는 자격 증명이 필요 없기 때문에 --access-key, --secret-key, --role 또는 --credential-file 옵션을 사용할 필요가 없습니다. 그러나 자격 증명을 지정하지 않으면 CloudFormation이 스택 멤버십을 확인하고 해당 인스턴스가 속한 스택에 대한 호출 범위를 제한합니다.

리소스 신호 전송을 위한 구문(권장)

CloudFormation 리소스 신호를 전송하려면 다음 구문을 사용합니다.

cfn-signal --success|-s signal.to.send \ --access-key access.key \ --credential-file|-f credential.file \ --exit-code|-e exit.code \ --http-proxy HTTP.proxy \ --https-proxy HTTPS.proxy \ --id|-i unique.id \ --region AWS.region \ --resource resource.logical.ID \ --role IAM.role.name \ --secret-key secret.key \ --stack stack.name.or.stack.ID \ --url AWS CloudFormation.endpoint

대기 조건 핸들과 함께 사용할 구문

대기 조건 핸들 신호를 전송하려는 경우 다음 구문을 사용합니다.

cfn-signal --success|-s signal.to.send \ --reason|-r resource.status.reason \ --data|-d data \ --id|-i unique.id \ --exit-code|-e exit.code \ waitconditionhandle.url

옵션

생성 정책 또는 대기 조건 핸들 신호를 전송할지 여부에 따라 사용 가능한 옵션이 달라집니다. 생성 정책에 적용되는 일부 옵션은 대기 조건 핸들에 적용되지 않을 수 있습니다.

명칭 설명 필수

--access-key(리소스 신호 전송에만 해당)

CloudFormation SignalResource API를 호출할 권한이 있는 계정의 AWS 액세스 키입니다. 자격 증명 파일 파라미터가 이 파라미터를 대신합니다.

유형: 문자열

아니요

-d, --data(대기 조건 핸들에만 해당)

waitConditionHandle을 사용해 다시 전송할 데이터입니다. 기본적으로 비어 있습니다.

유형: 문자열

기본값: 비어 있음

아니요

-e, --exit-code

성공 또는 실패 확인에 사용할 수 있는 프로세스의 오류 코드입니다. 지정한 경우 --success 옵션이 무시됩니다.

유형: 문자열

: -e $?(Linux의 경우), -e %ERRORLEVEL%(Windows cmd.exe의 경우) 및 -e $lastexitcode (Windows PowerShell의 경우)

아니요

-f, --credential-file(리소스 신호 전송에만 해당)

보안 액세스 키 및 액세스 키가 둘 다 포함된 파일입니다. 자격 증명 파일 파라미터는 --role, --access-key 및 --secret-key 파라미터를 대신합니다.

유형: 문자열

아니요

--http-proxy

HTTP 프록시입니다(비 SSL). 다음 형식을 사용합니다. http://user:password@host:port

유형: 문자열

아니요

--https-proxy

HTTPS 프록시입니다. 다음 형식을 사용합니다. https://user:password@host:port

유형: 문자열

아니요

-i, --id

전송할 고유한 ID입니다.

유형: 문자열

기본값: Amazon EC2 인스턴스의 ID입니다. 이 ID를 확인할 수 없는 경우 머신의 FQDN(Fully Qualified Domain Name)이 반환됩니다.

아니요

-r, --reason (대기 조건 핸들에만 해당)

리소스 이벤트의 상태 사유(현재, 실패 시에만 사용됨) - 성공하지 못한 경우 기본적으로 '구성 실패'로 지정됩니다.

유형: 문자열

아니요

--region(리소스 신호 전송에만 해당)

사용할 CloudFormation 리전 엔드포인트입니다.

유형: 문자열

기본값: us-east-1

아니요

--resource(리소스 신호 전송에만 해당)

신호를 전송하려는 생성 정책이 포함된 리소스의 논리적 ID입니다.

유형: 문자열

--role(리소스 신호 전송에만 해당)

인스턴스와 연결되는 IAM 역할의 이름입니다.

유형: 문자열

조건: 자격 증명 파일 파라미터가 이 파라미터를 대신합니다.

아니요

-s, --success

true인 경우 SUCCESS를 신호하고 그렇지 않은 경우 FAILURE를 신호합니다.

유형: 부울

기본값: true

아니요

--secret-key(리소스 신호 전송에만 해당)

지정된 AWS 액세스 키에 해당하는 AWS 보안 암호 액세스 키입니다.

유형: 문자열

아니요

--stack(리소스 신호 전송에만 해당)

신호를 전송하려는 리소스가 포함된 스택 이름 또는 스택 ID입니다.

유형: 문자열

-u, --url(리소스 신호 전송에만 해당)

사용할 CloudFormation 엔드포인트입니다.

유형: 문자열

아니요

waitconditionhandle.url(대기 조건 핸들에만 해당)

연결된 WaitCondition에 성공 또는 실패 신호를 전송하는 데 사용할 수 있는 미리 서명된 URL입니다.

유형: 문자열

Amazon Linux 예제

일반적인 사용 패턴은 cfn-init와 cfn-signal을 함께 사용하는 것입니다. cfn-signal 호출은 cfn-init에 대한 호출의 반환 상태를 사용합니다($? 셸 구성 사용). 애플리케이션이 설치에 실패하면 인스턴스 생성에 실패하고 스택이 롤백됩니다. Windows 스택은 AWS CloudFormation Windows 스택 부트스트랩 단원을 참조하십시오.

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Simple EC2 instance", "Resources": { "MyInstance": { "Type": "AWS::EC2::Instance", "Metadata": { "AWS::CloudFormation::Init": { "config": { "files": { "/tmp/test.txt": { "content": "Hello world!", "mode": "000755", "owner": "root", "group": "root" } } } } }, "Properties": { "ImageId": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}", "InstanceType": "t2.micro", "UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "#!/bin/bash -x\n", "# Install the files and packages from the metadata\n", "yum install -y aws-cfn-bootstrap", "\n", "/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref": "AWS::StackName" }, " --resource MyInstance ", " --region ", { "Ref": "AWS::Region" }, "\n", "# Signal the status from cfn-init\n", "/opt/aws/bin/cfn-signal -e $? ", " --stack ", { "Ref": "AWS::StackName" }, " --resource MyInstance ", " --region ", { "Ref": "AWS::Region" }, "\n" ] ] } } }, "CreationPolicy": { "ResourceSignal": { "Timeout": "PT5M" } } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Description: Simple EC2 instance Resources: MyInstance: Type: 'AWS::EC2::Instance' Metadata: 'AWS::CloudFormation::Init': config: files: /tmp/test.txt: content: Hello world! mode: '000755' owner: root group: root Properties: ImageId: {{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}} InstanceType: t2.micro UserData: !Base64 'Fn::Join': - '' - - | #!/bin/bash -x - | # Install the files and packages from the metadata - yum install -y aws-cfn-bootstrap - |+ - | - '/opt/aws/bin/cfn-init -v ' - ' --stack ' - !Ref 'AWS::StackName' - ' --resource MyInstance ' - ' --region ' - !Ref 'AWS::Region' - |+ - | # Signal the status from cfn-init - '/opt/aws/bin/cfn-signal -e $? ' - ' --stack ' - !Ref 'AWS::StackName' - ' --resource MyInstance ' - ' --region ' - !Ref 'AWS::Region' - |+ CreationPolicy: ResourceSignal: Timeout: PT5M

예제

여러 CloudFormation 샘플 템플릿은 다음 템플릿을 비롯하여 cfn-signal을 사용합니다.