以前、「Ansibleを使って、AmazonLinuxに最低限の初期化を行う」という記事を投稿したのですが、その際に、
正直、User-dataに直接シェルスクリプトで書いたほうが早い気もします(気が向いたら作ります)
と書きました。
AnsibleやChefやPuppetのようなツールもいいのですが、簡単な初期構成を作るためだけに準備するのは、ちょっと面倒です。
それに比べ、AWS Management Consoleでインスタンス起動時にUser-dataを指定する方法は、もともと用意されている所にテキストを貼り付けるだけなので、お手軽な感じがあります。
ということで書いてみました。
検証用のインスタンスは、Amazon Linux AMI 2014.09.2 (HVM) - ami-18869819
を使ってます。
やること
- localeを変更 (ja_JP.UTF-8)
- リポジトリの自動更新を止める(repo_upgrade: none)
- 言語設定を変更(LANG=ja_JP.UTF-8)
- タイムゾーンを変更(ZONE=Asia/Tokyo)
- ローカルタイムを変更(Asia/Tokyo)
- yum update
User-data
こんな感じになります。
gist
https://gist.github.com/szkkentaro/fdbbacd02d5e38ab5605
# cloud-config
write_files:
- content: |
repo_update: true
repo_upgrade: none
locale: ja_JP.UTF-8
timezone: Asia/Tokyo
owner: root:root
path: /etc/cloud/cloud.cfg.d/99_mysettings.cfg
permissions: '0644'
runcmd:
- yum update -y
AWS Management consoleからだと、インスタンス起動時にココに入れる感じですね。
基本的な設定はwrite_filesでファイルに書き出して、yum updateだけruncmdで指定しています。
基本設定を/etc/cloud/cloud.cfg.d/
以下にファイルを作って置いたのは、独自設定を分離させておくことで(多少は)メンテナブルになるかなと思ったからです。
あと、kernelまでupdateされちゃうのは嫌って人は、kernelを除いたupdateにするのもいいかもしれません。
runcmd:
- yum update -y -x kernel*
確認
ざっくり確認。大丈夫そうですね。
[ec2-user@ip-10-0-0-176 ~]$ sudo cat /var/log/yum.log
Feb 18 04:20:34 Updated: libcom_err-1.42.12-1.34.amzn1.x86_64
Feb 18 04:20:34 Updated: e2fsprogs-libs-1.42.12-1.34.amzn1.x86_64
Feb 18 04:20:34 Updated: libcurl-7.40.0-1.49.amzn1.x86_64
Feb 18 04:20:34 Updated: libss-1.42.12-1.34.amzn1.x86_64
Feb 18 04:20:34 Updated: python-botocore-0.86.0-1.2.amzn1.noarch
Feb 18 04:20:35 Updated: aws-cli-1.7.5-1.2.amzn1.noarch
Feb 18 04:20:35 Updated: e2fsprogs-1.42.12-1.34.amzn1.x86_64
Feb 18 04:20:35 Updated: curl-7.40.0-1.49.amzn1.x86_64
Feb 18 04:20:35 Updated: kernel-tools-3.14.33-26.47.amzn1.x86_64
Feb 18 04:20:35 Updated: libyaml-0.1.6-6.7.amzn1.x86_64
Feb 18 04:20:35 Updated: python-boto-2.36.0-1.2.amzn1.noarch
Feb 18 04:20:36 Installed: kernel-3.14.33-26.47.amzn1.x86_64
[ec2-user@ip-10-0-0-176 ~]$ strings /etc/localtime | grep JST
JST-9
[ec2-user@ip-10-0-0-176 ~]$ cat /etc/sysconfig/clock
ZONE=Asia/Tokyo
UTC=true
[ec2-user@ip-10-0-0-176 ~]$ cat /etc/sysconfig/i18n
LANG=ja_JP.UTF-8
まとめ
シェルスクリプトでガリガリ書くことも検討しましたが、フレームワークがあるならそれに乗っ取るのがいいと思い、cloud-initの機能を利用しました。
AmazonLinuxの初期設定を手軽にやりたいなら、User-data経由でcloud-initを使うのが一番手っ取り早いと思います。なにかのフィジビリティしたい時などに、インスタンスをサクッと用意する前準備として使っていただければ幸いです。