CloudFormationでVPCを構築し、CloudFormationに入門する方法を知った - $shibayu36->blog;、CloudFormationでEC2の立ち上げをした - $shibayu36->blog; の続き。今回は「Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版」のChapter4に従って、立ち上げたEC2で自動でApacheをインストールして起動するようにしてみた。
やり方としては、インスタンス作成時に実行するスクリプトを定義できるUserDataという仕組みと、MetadataにAWS::CloudFormation::Initを定義していく方法の二つを利用する。
設定を行う
https://github.com/shibayu36/aws-network-basis/pull/3 が設定。これにより、EC2立ち上げ時にApacheをインストールして起動するまでを自動化することが出来た。
参考にしたのは以下の資料。
- AWS CloudFormation による Amazon EC2 へのアプリケーションのデプロイ - AWS CloudFormation
- UserDataとAWS::CloudFormation::Initを使ったインストールと起動設定のサンプルとして
- CloudFormationウォークスルーにYAMLで入門してみる - Qiita
- YAMLでどういう風に書くかのサンプルとして
- 一般的なテンプレートスニペット - AWS CloudFormation
- UserDataの定義部分で、Fn::Base64とFn::Subを使ってどう書くかのサンプルとして
デバッグする
今回の設定を行うのは結構はまった。デバッグをどのようにしたかについても書いておく。
まずそもそもUserDataがちゃんと設定できているかは以下のコマンドで確認できる。参考: インスタンスメタデータとユーザーデータ - Amazon Elastic Compute Cloud
ssh <立ち上がったEC2> curl http://169.254.169.254/latest/user-data
CloudFormationのMetadataが正しく設定できているかは以下のコマンド。aws cliを利用する。stack-nameやlogical-resource-idは自分が設定したのに置換すると良い。(あとコンソールで見れないのかな?と思ったけど、方法が分からなかった)
aws cloudformation describe-stack-resource --stack-name=aws-basis-network-cfn --logical-resource-id=EC2ForWebServer
さらにインスタンス作成時にUserDataのスクリプトが実行されたログを見たければ、/var/log/cloud-init.logや/var/log/cloud-init-output.logを見れば良い。
あとはログも見つつ、自分でUserDataに定義したスクリプトを一行ずつ実行していくと、どこが変になっているかわかりやすいのでおすすめ。
こんな感じで調べていったら、僕の場合は最初cfn-hupをUserDataに入れていたのだけど、これはいろいろ設定していないと起動しないことが分かった。なので、今回はその部分を消してうまくいくようになった。
https://github.com/shibayu36/aws-network-basis/pull/3/commits/eb8a043d36ef53155454c28a1099bfcadc2d769e
まとめ
今回は「Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版」のChapter4に従って、立ち上げたEC2で自動でApacheをインストールして起動するようにしてみた。UserDataでインスタンス作成時にいろいろやるという方法を知らなかったので、結構ハマるところも多かったが、このあたりについて詳しくなれたので良かった。
参考
- AWS CloudFormation への入門に「Amazon Web Services 基礎からのネットワーク&サーバー構築」を使ってみた - えいのうにっき
- CloudFormationでVPCを構築し、CloudFormationに入門する方法を知った - $shibayu36->blog;
- CloudFormationでEC2の立ち上げをした - $shibayu36->blog;
- https://github.com/shibayu36/aws-network-basis/pull/3
- AWS CloudFormation による Amazon EC2 へのアプリケーションのデプロイ - AWS CloudFormation
- CloudFormationウォークスルーにYAMLで入門してみる - Qiita
- 一般的なテンプレートスニペット - AWS CloudFormation
- インスタンスメタデータとユーザーデータ - Amazon Elastic Compute Cloud