cfn-init - AWS CloudFormation

cfn-init

설명

cfn-init 헬퍼 스크립트는 AWS::CloudFormation::Init 키에서 템플릿 메타데이터를 읽고 이에 따라 다음과 같이 동작합니다.

  • CloudFormation에서 메타데이터 가져오기 및 구문 분석

  • 패키지 설치

  • 디스크에 파일 쓰기

  • 서비스 활성화/비활성화 및 시작/중지

참고

cfn-init를 사용하여 기존 파일을 업데이트하는 경우 동일한 디렉터리에 원본 파일의 백업 사본이 .bak라는 확장명으로 생성됩니다. 예를 들어, /path/to/file_name을 업데이트하면 이 작업에서는 다음과 같은 파일 2개를 생성합니다. /path/to/file_name.bak 파일에는 원본 파일의 내용이 들어 있고, /path/to/file_name 파일에는 업데이트된 내용이 들어 있습니다.

템플릿 메타데이터에 대한 자세한 내용은 AWS::CloudFormation::Init 단원을 참조하십시오.

참고

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

구문

cfn-init --stack|-s stack.name.or.id \ --resource|-r logical.resource.id \ --region region \ --access-key access.key \ --secret-key secret.key \ --role rolename \ --credential-file|-f credential.file \ --configsets|-c config.sets \ --url|-u service.url \ --http-proxy HTTP.proxy \ --https-proxy HTTPS.proxy \ --verbose|-v

옵션

명칭 설명 필수

-s, --stack

스택 이름 또는 스택 ID입니다.

유형: 문자열

기본값: 없음

: --stack { "Ref" : "AWS::StackName" },

-r, --resource

메타데이터가 포함된 리소스의 논리적 리소스 ID입니다.

유형: 문자열

: --resource WebServerHost

--region

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

유형: 문자열

기본값: us-east-1

예제: --region ", { "Ref" : "AWS::Region" },

아니요

--access-key

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

유형: 문자열

아니요

--secret-key

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

유형: 문자열

아니요

--role

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

유형: 문자열

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

아니요

-f, --credential-file

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

유형: 문자열

아니요

-c, --configsets

(순서대로) 실행할 configset의 쉼표로 구분된 목록입니다.

유형: 문자열

기본값: default

아니요

-u, --url

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

유형: 문자열

아니요

--http-proxy

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

유형: 문자열

아니요

--https-proxy

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

유형: 문자열

아니요

-v, --verbose

상세 정보 표시 출력입니다. 이 옵션은 cfn-init가 초기화에 실패하는 사례를 디버깅하는 데 유용합니다.

참고

초기화 이벤트를 디버깅하려면 DisableRollback을 켜야 합니다. CloudFormation 콘솔을 사용하고 Show Advanced Options(고급 옵션 표시)를 선택한 다음 Rollback on failure(실패 시 롤백)를 No(아니요)로 설정하여 이 작업을 수행할 수 있습니다. 그런 다음 콘솔에 SSH로 연결하고 /var/log/cfn-init.log에서 로그를 읽을 수 있습니다.

아니요

-h, --help

도움말 메시지를 표시한 후 종료합니다.

아니요

Amazon Linux 예제

다음 코드 조각은 UserData 리소스와 연결된 InstallAndRun configset를 실행하는 EC2 인스턴스의 WebServerInstance 속성을 보여줍니다.

전체 예제 템플릿은 Amazon EC2에 애플리케이션 배포 단원을 참조하십시오.

최신 버전을 포함시키려면 UserDatayum install -y aws-cfn-bootstrap을 추가합니다.

JSON

Fn::Join 내장 함수를 사용하는 UserData 속성입니다.

{ "UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "#!/bin/bash -xe\n", "", "yum install -y aws-cfn-bootstrap", "/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref": "AWS::StackName" }, " --resource WebServerInstance ", " --configsets InstallAndRun ", " --region ", { "Ref": "AWS::Region" }, "\n" ] ] } } }

YAML

Fn::Join 내장 함수를 사용하는 UserData 속성입니다.

UserData: !Base64 'Fn::Join': - '' - - | #!/bin/bash -xe - '' - yum install -y aws-cfn-bootstrap - '/opt/aws/bin/cfn-init -v ' - ' --stack ' - !Ref 'AWS::StackName' - ' --resource WebServerInstance ' - ' --configsets InstallAndRun ' - ' --region ' - !Ref 'AWS::Region' - |+

JSON

Fn::Sub 내장 함수를 사용하는 UserData 속성입니다.

{ "UserData": { "Fn::Base64": { "Fn::Sub": [ "#!/bin/bash -x\n# Install the files and packages from the metadata\n/opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource MyInstance --region ${AWS::Region}\n\n# Signal the status from cfn-init\n/opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource MyInstance --region ${AWS::Region}\n", {} ] } } }

YAML

Fn::Sub 내장 함수를 사용하는 UserData 속성입니다.

UserData: !Base64 'Fn::Sub': - > #!/bin/bash -x # Install the files and packages from the metadata /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource MyInstance --region ${AWS::Region} # Signal the status from cfn-init /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource MyInstance --region ${AWS::Region} - {}