AWSクラウドフォーメーションが指定したパッケージをインストールしないのはなぜですか?


14

私はAWSサービスに非常に新しいです。AWSクラウドフォーメーションを使用しようとしています。テンプレートを作成しました。このテンプレートにはエラーがなく、それを使用してマシンを作成できます。

しかし、起動時にtomcat、gitなどをインストールするように、テンプレートにいくつかの設定を追加しました。しかし、それは私には起こりません。

以下は、tomcatのインストールに使用したコードの一部です。

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

しかし、マシンにログインしても、インストールtomcatgitされていません!

前もって感謝します。


あなたのタグから、これはUbuntu AMIだと思いますか?
mattdm

「git」の後の「、」を削除しようとしましたか:[]?構文的に正しくありません。
エドウィン

回答:


23

ここでのあなたの問題は、cloud-initがcfn-initと同じではないという混乱だと思います。

  • cloud-initは、Ubuntu AWS AMIの一部として開始されたツールで、インスタンスメタデータのEC2ユーザーデータコンポーネントの解釈を可能にします。Amazon Linuxもこのツールを採用し、AMIに組み込みました。

  • cfn-initは、AWSがAmazon Linux向けに作成したCloudFormationヘルパースクリプトと呼ばれるさまざまなツールセットの一部であり、CloudFormationテンプレートで指定された追加セクションを読み取ることができます。Metadata

したがって、UbuntuおよびAmazon Linux AMIの両方には、ユーザーデータにアクセスするためのcloud-initツールが事前にインストールされていますが、CloudFormationメタデータにアクセスするためのcfn-initなどのCloudFormationヘルパースクリプトが事前にインストールされているのはAmazon Linuxのみです。

ただし、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メタデータを読み取り、そこで指定されたすべてをセットアップできます。

また、CFスタックを作成するときは、2番目のページの詳細設定(パラメーターを指定した後)に移動し、エラー時のロールバックが「いいえ」に設定されていることを確認します。何らかの理由でcfn-initスクリプトが失敗した場合は、インスタンスにsshして、/ var / log / cfn-init.logファイルで詳細を確認できます。


これは受け入れられる答えだと思います。
エリックヴァンブラケル14


-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
わかり
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.