내용으로 건너뛰기

AWSUtility::CloudFormation::CommandRunner를 사용하여 CloudFormation 스택의 리소스 전후에 명령을 실행하려면 어떻게 해야 합니까?

3분 분량
0

AWSUtility::CloudFormation::CommandRunner를 사용하여 AWS CloudFormation 스택의 리소스 전후에 명령을 실행하고 싶습니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

AAWSUtility::CloudFormation::CommandRunner 등록

AWSUtility::CloudFormation::CommandRunner 리소스를 등록하지 않은 경우 다음 명령을 실행하여 등록하십시오.

git clone https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-awsutilities-commandrunner.git
cd aws-cloudformation-resource-providers-awsutilities-commandrunner
curl -LO https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-awsutilities-commandrunner/releases/latest/download/awsutility-cloudformation-commandrunner.zip
./scripts/register.sh --set-default

register.sh 스크립트는 register-type AWS CLI 명령을 실행하고 awsutility-cloudformation-commandrunner.zip을 사용하여 기본 AWS 리전에 리소스 유형을 등록합니다. 기본 리전을 확인하려면 aws configure get region 명령을 실행합니다. register.sh 스크립트가 수행하는 작업에 대한 자세한 내용은 AWS GitHub 웹 사이트의 사용자 설치 단계를 참조하십시오.

CloudFormation 템플릿에서 리소스 정의

CloudFormation 스택의 리소스 전후에 명령을 실행하려면 CloudFormation 템플릿에서 AWSUtility::CloudFormation::CommandRunner 리소스를 정의하십시오.

예제 템플릿:

Resources:
    CommandRunner:
        Type: AWSUtility::CloudFormation::CommandRunner
        Properties:
            Command: 'aws ssm get-parameter --name BucketName --region us-east-1 --query Parameter.Value --output text > /command-output.txt'
            Role: EC2-Role
            LogGroup: my-cloudwatch-log-group

AWS CLI 명령에 --region 옵션을 포함해야 합니다. 그런 다음, 명령 출력을 /command-output.txt라는 예약된 파일에 기록합니다.

역할 속성은 관련 IAM 역할이 있는 AWS Identity and Access Management(IAM) 인스턴스 프로파일의 이름이어야 합니다. IAM 역할은 Amazon Elastic Compute Cloud(Amazon EC2) 서비스인 ec2.amazonaws.com신뢰 관계가 있어야 합니다. AWSUtility::CloudFormation::CommandRunner 리소스는 명령을 실행하기 위해 속성 역할 속성을 수임합니다. LogGroup 속성을 지정하는 경우 LogGroup은 명령 실행의 로그를 Amazon CloudWatch 로그 그룹에 기록합니다.

템플릿에서 AWSUtility::CloudFormation::CommandRunner 리소스를 사용하는 방법에 대한 자세한 내용은 GitHub 웹 사이트의 README.mddocs/README.md를 참조하십시오.

Fn::GetAtt를 사용하여 명령 출력을 참조합니다.

예제 템플릿 스니펫:

S3Bucket:
    Type: AWS::S3::Bucket
    Properties:
        BucketName: !GetAtt CommandRunner.Output

논리명이 Instance인 리소스 뒤에 명령을 실행하려면 DependsOn: InstanceAWSUtility::CloudFormation::CommandRunner 리소스 정의에서 지정하십시오.

예제 템플릿:

Resources:
   CommandRunner:
      DependsOn: Instance
      Type: AWSUtility::CloudFormation::CommandRunner
      Properties:
         Command: aws s3 ls | sed -n 1p | cut -d " " -f3 > /command-output.txt
         LogGroup: my-cloudwatch-log-group
         Role: EC2-Role
   Instance:
      Type: AWS::EC2::Instance
      Properties:
         Image: ami-abcd1234

리소스 앞에 명령을 실행하려면 DependsOn을 리소스 정의에 있는 AWSUtility::CloudFormation::CommandRunner 리소스의 논리명으로 설정합니다.

예제 템플릿:

Resources:
   CommandRunner:
      Type: AWSUtility::CloudFormation::CommandRunner
      Properties:
         Command: aws s3 ls | sed -n 1p | cut -d " " -f3 > /command-output.txt
         LogGroup: my-cloudwatch-log-group
         Role: EC2-Role
   Instance:
      DependsOn: CommandRunner
      Type: AWS::EC2::Instance
      Properties:
         Image: ami-abcd1234

참고: 위 예제에서 sed -n 1paws s3 ls가 반환한 응답의 첫 번째 줄만 출력합니다. 버킷 이름을 가져오기 위해 sed -n 1pcut -d " " -f3에 응답을 보냅니다. 그런 다음, cut -d " " -f3은 공백으로 구분된 줄을 분할한 후 생성된 배열의 세 번째 요소를 선택합니다.

관련 정보

AWS CloudFormation 템플릿에서 bash 명령 실행

AWS 공식업데이트됨 일 년 전