web-dev-qa-db-ja.com

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

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

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

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

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

しかし、マシンにログインすると、Tomcatgitもインストールされていません。

前もって感謝します。

14
batman

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

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

  • cfn-init は、AWSによって作成されたCloudFormation Helper Scriptsと呼ばれる別のツールセットの一部です Amazon Linux = CloudFormationテンプレートのMetadataという名前の追加セクションを読み取ることができます。

したがって、UbuntuとAmazon Linux AMIのどちらにも、ユーザーデータにアクセスするためのcloud-initツールがプリインストールされていますが、Amazon Linuxのみ CloudFormation Helper Scripts がプリインストールされています。 CloudFormationメタデータにアクセスするためのcfn-init。

ただし、AWSはCloudFormationメタデータの読み取りに使用できる distribute packages を実行します。具体的には、この テンプレート を見て、cloud-initユーザーデータスクリプトを使用してpython-setuptoolsをインストールし、CloudFormationヘルパースクリプトをダウンロードして、easy_installを使用してインストールし、cfn-initを呼び出します。

注:cloud-initまたはcfn-initをサポートする可能性のある他のディストリビューションまたはAMIがありますが、ここでは一般的なケースについてのみ説明します。

23
dialt0ne

インスタンスの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でエンコードされており、インスタンスの起動時に実行するスクリプトを指定できます。ここでは、CloudFormation :: Initメタデータを読み取り、そこで指定されているすべてをセットアップするcfn-initを呼び出すことができます。

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

12

上記の答えは正しいです。ただし、CloudFormationヘルパースクリプトが正常にインストールされていることも確認する必要があります。インストールの詳細については、 http://docs.aws.Amazon.com/AWSCloudFormation/latest/UserGuide/cfn-helper-scripts-reference.html に従ってください。

1
Alex Chyrkov