CloudFormation을 사용하여 Amazon EC2 인스턴스를 프로비저닝할 때 CodeDeploy 에이전트가 배포되도록 하려면 어떻게 해야 합니까?
AWS CloudFormation을 사용하여 인프라와 AWS CodeDeploy 리소스를 프로비저닝하고 있습니다. CodeDeploy 에이전트가 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 설치되어 실행되도록 하고 싶습니다.
간략한 설명
CodeDeploy 배포 대상으로 다음 리소스 중 하나를 생성하는 경우 cfn-init 및 cfn-signal 도우미 스크립트를 사용하십시오.
- AWS::EC2::Instance
- AWS::AutoScaling::AutoScalingGroup
인프라 배포를 프로비저닝하기 전에 도우미 스크립트를 사용하여 CodeDeploy 에이전트로 대상 인스턴스를 완전히 프로비전할 수 있습니다.
해결 방법
cfn-init 및 cfn-signal 도우미 스크립트를 사용하여 CodeDeploy 에이전트를 배포하려면 다음 단계를 완료하여 AWS CloudFormation 템플릿을 올바르게 구성하십시오.
1. 코드 편집기에서 리소스의 AWS CloudFormation 템플릿으로 사용할 JSON 또는 YAML 파일을 생성합니다.
2. **메타데이터 ** 키의 경우 AWS::CloudFormation::Init 유형을 사용하여 인스턴스 또는 시작 구성에 대한 메타데이터를 포함합니다.
AWS::CloudFormation::Init 유형을 사용하는 메타데이터 키의 예
"SampleLinuxInstance" : { "Type" : "AWS::EC2::Instance", "Metadata" : { "AWS::CloudFormation::Init" : { "config" : { "packages" : { "yum" : { "ruby" : [] } }, "files" : { "/home/ec2-user/install" : { "source" : {"Fn::Join" : ["", ["https://aws-codedeploy-", {"Ref" : "AWS::Region"}, ".s3.amazonaws.com/latest/install"]]}, "mode" : "000755" } }, "commands" : { "00-install-agent" : { "command" : "./install auto", "cwd" : "/home/ec2-user/" }, "01-cfn-signal" : { "command" : {"Fn::Join" : ["", ["/opt/aws/bin/cfn-signal -e 0 --stack ", { "Ref": "AWS::StackName" }, " --resource SampleLinuxInstance --region ", { "Ref" : "AWS::Region" }]]} } } } } }, "Properties" : { ... } }
참고: AWS::CloudFormation::Init 유형에는 CodeDeploy 에이전트의 설치 단계가 포함되어 있습니다. 또한 다음 단계를 완료한 후 CloudFormation 스택에 신호를 보내는 명령도 포함되어 있습니다.
3. cfn-init 스크립트를 호출하도록 UserData 속성을 설정합니다.
cfn-init 스크립트를 호출하는 UserData 속성의 예
"Properties" : { "InstanceType" : "t2.micro", "ImageId" : {"Ref" : "AMI"}, "IamInstanceProfile" : {"Ref" : "SampleInstanceProfile"}, "KeyName" : {"Ref" : "SSHKey"}, "UserData" : {"Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bash\n", "yum -y update\n", "yum -y install cfn-bootstrap\n", "/opt/aws/bin/cfn-init -v", " --stack ", { "Ref" : "AWS::StackName" }, " --resource SampleLinuxInstance", " --region ", { "Ref" : "AWS::Region" }, "\n" ]] }}, "Tags" : [ { "Key" : {"Ref" : "InstanceTagKey"}, "Value" : {"Ref" : "InstanceTagValue"} } ] }
4. 인스턴스 리소스의 경우 다음을 수행하도록 CreationPolicy 속성을 구성합니다. Amazon EC2 인스턴스 또는 Amazon EC2 Auto Scaling 그룹이 특정 기간 내에 CloudFormation에 성공 신호를 전송하도록 합니다.
Amazon EC2 인스턴스가 특정 기간 내에 CloudFormation에 성공 신호를 보내도록 하는 CreationPolicy 속성의 예
"SampleLinuxInstance" : { "Type" : "AWS::EC2::Instance", "CreationPolicy" : { "ResourceSignal" : { "Count" : "1", "Timeout" : "PT5M" } },
5. Amazon EC2 인스턴스 또는 Amazon EC2 Auto Scaling 그룹에서 배포 그룹 리소스에 대한 명시적 종속성을 생성하려면 DependsOn 속성을 사용합니다.
배포 그룹 리소스에 대한 명시적 종속성을 생성하는 DependsOn 속성의 예
"SampleLinuxCDDeploymentGroup" : { "Type" : "AWS::CodeDeploy::DeploymentGroup", "DependsOn" : "SampleLinuxInstance", "Properties" : { "ApplicationName" : {"Ref" : "SampleCDApp"}, "ServiceRoleArn" : {"Ref" : "ServiceRole"}, "Ec2TagFilters" : [ { "Key" : {"Ref" : "InstanceTagKey"}, "Value" : {"Ref" : "InstanceTagValue"}, "Type" : "KEY_AND_VALUE" } ], "Deployment" : { "Revision" : { "RevisionType" : "S3", "S3Location" : { "Bucket" : {"Ref" : "BucketName"}, "BundleType" : {"Ref" : "BundleType"}, "Key" : {"Ref" : "BundleKey"} } } } } }
6. CloudFormation 템플릿을 완성하려면 환경에 필요한 기타 추가 리소스, 속성 또는 출력을 포함합니다.
7. 완성된 템플릿을 사용하여 CloudFormation 스택을 생성합니다.
관련 정보
CodeDeploy용 AWS CloudFormation 템플릿 참조
CodeDeploy를 위한 Amazon EC2 인스턴스 생성(AWS CloudFormation template)
관련 콘텐츠
- 질문됨 10달 전lg...
- 질문됨 일 년 전lg...
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 3년 전
- AWS 공식업데이트됨 3년 전