AWS 클라우드 구성이 내가 지정한 패키지를 설치하지 않는 이유는 무엇입니까?


14

AWS 서비스를 처음 접했습니다. AWS 클라우드 구성을 사용하려고하는데 템플릿을 만들었습니다. 템플릿에 오류가 없으며이를 사용하여 컴퓨터를 만들 수 있습니다.

그러나 템플릿에 일부 구성을 추가하여 시작 중에 Tomcat, git 및 기타 항목을 설치했습니다. 그러나 그것은 나에게 일어나지 않습니다.

다음은 Tomcat 설치에 사용한 코드 부분입니다.

"Resources": {
    "Tomcat": {
        "Type": "AWS::EC2::Instance",
        "Metadata": {
            "AWS::CloudFormation::Init": {
                "config": {
                    "packages": {
                        "apt": {
                            "tomcat6": [],
                            "git": [],
                        }
                    }
                }
            }
        },

그러나 컴퓨터에 로그인 tomcat하거나 git설치 하지 않은 경우!

미리 감사드립니다.


나는 당신의 태그에서 이것이 Ubuntu AMI라고 가정합니다.
mattdm

"git": [] 다음에 ","를 제거하려고 했습니까? 구문 상 정확하지 않습니다.
Edwin

답변:


23

클라우드 문제가 cfn-init와 동일하지 않다는 점에서 혼란 스럽습니다.

  • cloud-init 는 인스턴스 메타 데이터의 EC2 사용자 데이터 구성 요소를 해석 할 수있는 Ubuntu AWS AMI의 일부로 시작된 도구입니다. Amazon Linux는이 툴도 채택하여 AMI에 구축했습니다.

  • cfn-init 는 CloudFormation 템플릿에 이름이 지정된 추가 섹션을 읽을 수있는 Amazon Linux 용 AWS에서 생성 한 CloudFormation Helper Scripts 라는 다른 도구 세트의 일부입니다 .Metadata

따라서 Ubuntu 및 Amazon Linux AMI에는 사용자 데이터에 액세스하기 위해 클라우드 초기화 도구가 사전 설치되어 있지만 Amazon Linux 만 CloudFormation 메타 데이터에 액세스하기 위해 cfn-init와 같은 CloudFormation 헬퍼 스크립트 사전 설치되어 있습니다.

그러나 AWS는 CloudFormation 메타 데이터를 읽는 데 사용할 수있는 패키지배포합니다 . 자세한 것은 이쪽을 봐 템플릿 에서 cloud-init 사용자 데이터 스크립트를 사용하여 python-setuptools를 설치하고 CloudFormation 헬퍼 스크립트를 다운로드 한 후 easy_install을 사용하여 설치 한 다음 cfn-init를 호출하는 방법에 대해 살펴보십시오.

참고 : cloud-init 또는 cfn-init를 지원할 수있는 다른 배포 또는 AMI가 있지만 여기서는 일반적인 경우를 다루고 있습니다.


12

인스턴스의 UserData 속성 내에서 cfn-init ( http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-init.html ) 를 호출해야 합니다.

{
    "Resources": {
        "Tomcat": {
            "Type": "AWS::EC2::Instance",
            "Metadata": {
                "AWS::CloudFormation::Init": {
                    "config": {
                        "packages": {
                            "apt": {
                                "tomcat6": [],
                                "git": []
                            }
                        }
                    }
                }
            },
            "Properties": {
                "UserData": {
                    "Fn::Base64": {
                        "Fn::Join": ["", [
                            "#!/bin/bash\n",
                            "/opt/aws/bin/cfn-init -s ", {
                                "Ref": "AWS::StackName"
                            },
                            "    -r Tomcat",
                            "    --region ", {
                                "Ref": "AWS::Region"
                            }, "\n"
                        ]]
                    }
                }
            }
        }
    }
}

UserData 속성은 Base64로 인코딩되어 있으며 인스턴스 시작시 실행할 스크립트를 지정할 수 있습니다. 여기서 cfn-init를 호출하면 CloudFormation :: Init Metadata를 읽고 여기에 지정된 모든 것을 설정할 수 있습니다.

또한 CF 스택을 작성할 때 두 번째 페이지 (매개 변수 제공 후)의 고급 설정으로 이동하여 오류시 롤백이 "아니오"로 설정되어 있는지 확인하십시오. 어떤 식 으로든 cfn-init 스크립트가 실패하면 인스턴스에 ssh하고 자세한 정보는 /var/log/cfn-init.log 파일을 확인하십시오.


나는 이것이 대답이 될 것이라고 생각합니다.
Erik van Brakel


-3
    "UserData"       : { "Fn::Base64" : { "Fn::Join" : ["", [
      "#!/bin/bash\n",
      "export DEBIAN_FRONTEND=noninteractive\n",
      "apt-get update && apt-get upgrade -y\n",
      "apt-get -y install python-setuptools\n",
      "easy_install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz\n",
      "/usr/local/bin/cfn-init --stack ", { "Ref":"AWS::StackName" }, " --resource <REPLACE_WITH_RESOURCENAME>", " --region ", { "Ref": "AWS::Region" }, "\n",

4
나는 그것을 얻지 못한다 ...
Pierre.Vriens
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.