$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

CloudFormationで立ち上げたEC2に自動でApacheをインストールして起動するようにした

CloudFormationでVPCを構築し、CloudFormationに入門する方法を知った - $shibayu36->blog;CloudFormationでEC2の立ち上げをした - $shibayu36->blog; の続き。今回は「Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版」のChapter4に従って、立ち上げたEC2で自動でApacheをインストールして起動するようにしてみた。

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版

やり方としては、インスタンス作成時に実行するスクリプトを定義できるUserDataという仕組みと、MetadataにAWS::CloudFormation::Initを定義していく方法の二つを利用する。

設定を行う

https://github.com/shibayu36/aws-network-basis/pull/3 が設定。これにより、EC2立ち上げ時にApacheをインストールして起動するまでを自動化することが出来た。

参考にしたのは以下の資料。

デバッグする

今回の設定を行うのは結構はまった。デバッグをどのようにしたかについても書いておく。

まずそもそも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