LoginSignup
32
30

More than 5 years have passed since last update.

User-dataで、AmazonLinuxに最低限の初期化を行う

Last updated at Posted at 2015-02-17

以前、「Ansibleを使って、AmazonLinuxに最低限の初期化を行う」という記事を投稿したのですが、その際に、

正直、User-dataに直接シェルスクリプトで書いたほうが早い気もします(気が向いたら作ります)

と書きました。

AnsibleやChefやPuppetのようなツールもいいのですが、簡単な初期構成を作るためだけに準備するのは、ちょっと面倒です。

それに比べ、AWS Management Consoleでインスタンス起動時にUser-dataを指定する方法は、もともと用意されている所にテキストを貼り付けるだけなので、お手軽な感じがあります。

ということで書いてみました。

検証用のインスタンスは、Amazon Linux AMI 2014.09.2 (HVM) - ami-18869819を使ってます。

やること

  1. localeを変更 (ja_JP.UTF-8)
  2. リポジトリの自動更新を止める(repo_upgrade: none)
  3. 言語設定を変更(LANG=ja_JP.UTF-8)
  4. タイムゾーンを変更(ZONE=Asia/Tokyo)
  5. ローカルタイムを変更(Asia/Tokyo)
  6. yum update

User-data

こんな感じになります。

:octocat: 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からだと、インスタンス起動時にココに入れる感じですね。

EC2_Management_Console.png

基本的な設定は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を使うのが一番手っ取り早いと思います。なにかのフィジビリティしたい時などに、インスタンスをサクッと用意する前準備として使っていただければ幸いです。

32
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
30