AWS CloudFormation을 사용하여 인프라 및 CodeDeploy 리소스를 프로비저닝할 때 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 AWS CodeDeploy 에이전트가 설치되어 실행 중인지 확인하려면 어떻게 해야 합니까?

CodeDeploy를 통한 배포의 대상으로 AWS::EC2::Instance 리소스 또는 AWS::AutoScaling::AutoScalingGroup 리소스를 생성하는 경우 cfn-init 및 cfn-signal 헬퍼 스크립트를 사용하십시오. 인프라 배포를 프로비저닝하기 전에 헬퍼 스크립트를 사용하여 CodeDeploy 에이전트가 포함된 대상 인스턴스를 완전히 프로비저닝할 수 있습니다.

cfn-init 및 cfn-signal 헬퍼 스크립트를 사용하여 CodeDeploy 에이전트를 배포하려면 다음 단계를 완료하여 AWS CloudFormation 템플릿을 올바르게 구성하십시오.

1.    코드 편집기에서 리소스에 AWS CloudFormation 템플릿으로 사용할 JSON 또는 YAML 파일을 생성합니다.

2.    Metadata 키의 경우, 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 에이전트에 대한 설치 단계가 포함되며 다음 단계를 완료한 후 AWS CloudFormation 스택에 신호를 다시 전달하기 위한 명령도 포함됩니다.

3.    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 그룹이 AWS CloudFormation에 성공 신호를 전송하도록 합니다. 다음 예를 참조하십시오.

"SampleLinuxInstance" : {
            "Type" : "AWS::EC2::Instance",
            "CreationPolicy" : {
                "ResourceSignal" : {
                    "Count" : "1",
                    "Timeout" : "PT5M"
                }
            },

5.    Amazon EC2 인스턴스 또는 Amazon EC2 Auto Scaling 그룹에서 종속성 그룹 리소스에 대한 명시적 종속성을 생성하려면 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.    AWS CloudFormation 템플릿을 완료하려면 환경에 필요한 기타 추가 리소스, 속성 또는 출력을 포함시킵니다.

7.    완료된 템플릿을 사용하여 AWS CloudFormation 스택을 생성합니다.


페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시: 2018-12-26