Amazon Linux起動時にCloudInitで設定するもの

記事タイトルとURLをコピーする

          こんにちは!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を使用するとログインする事なく設定が出来ますし、作業漏れを防げるので重宝しますよ:-)