こんにちは!AWSチームの柳瀬です!
どうやら最近弊社のエンジニアブログで何かあったみたいですが、後日談はご本人にお任せするとしましょうか。
というわけで、私はEC2インスタンスを起動する時に設定を自動化出来るCloudInitについて書きたいと思います。
CloudInitはもともとUbuntuが由来のソフトウェアですが、Amazon Linuxでも標準でインストールされており、起動時に指定したUserDataから初期設定を自動化することが出来ます。
インスタンスの自動構成だとChefやPuppetが有名ですが、簡単なものなら記述方法がシンプルなCloudiInitも便利です。 UserDataはインスタンスを起動するときに、以下の部分にテキストを貼付けると指定が出来ます。
また、ec2-apitoolsのec2-run-instancesコマンドを使用する場合は-f(--user-data-file)を使用してテキストファイルからUserDataを指定する事も可能です。
その場合のコマンド実行例は以下のようになります。
$ ec2-run-instances ami-XXXXXX -k your_key -g your_group --instance-type t1.micro -b /dev/sda1=:30 -f cloudinit-file.txt
具体的に指定するUserDataですが、私は以下のように指定する事が多いです。 ※設定した内容は以下の表をご覧ください。
#cloud-config repo_upgrade: all runcmd: - [cp, /usr/share/zoneinfo/Asia/Tokyo, /etc/localtime] - [resize2fs, /dev/xvda1]
2行目yum updateを実行するオプションになります。 Amazon Linuxはデフォルトでsecurityが指定されておりますが、私はほとんど最新にしてしまうので、"repo_upgrade: all"を指定します。
行数 | 内容 |
---|---|
1行目 | CloudInitでUserDataを使用する場合は1行目にこのように記述します。 |
3行目 | 以下の行が起動後に実行するコマンドである事を指示します。 |
4行目 | タイムゾーンの設定をしています。 ※Amazon LinuxのデフォルトはUTC |
5行目 | ec2-run-instancesコマンドの-b(--block-device-mapping)オプションでルートデバイス(EBS)を拡張した場合に、ファイルシステムのサイズを変更しています。 |
各種パッケージのインストール場合は以下のようにご指定下さい。
#cloud-config packages: - httpd - php
ちなみにUbuntu11.10にインストールされているCloudInitですと以下のように指定する事も出来ます。
#cloud-config apt_update: true hostname: hoge resize_rootfs: True timezone: "Asia/Tokyo"
Cloudinitを使用するとログインする事なく設定が出来ますし、作業漏れを防げるので重宝しますよ:-)