Ansibleを使って、AmazonLinuxに最低限の初期化をやってみました。
日本で利用しやすいように、最低限の初期設定とパッケージの更新を行っています。
AMI
AmazonLinuxのAMIは以下を利用しました。
amzn-ami-hvm-2014.09.1.x86_64-ebs (ami-4985b048)
環境設定 (+ yum update)
言語と時刻の設定をします。
- localeを変更 (ja_JP.UTF-8)
- リポジトリの自動更新を止める(repo_upgrade: none)
- 言語設定を変更(LANG=ja_JP.UTF-8)
- タイムゾーンを変更(ZONE=Asia/Tokyo)
- ローカルタイムを変更(Asia/Tokyo)
- yum update
playbook
playbookはこんな感じです。
gistはここに置いておきます。
https://gist.github.com/szkkentaro/c1dfe2bd8af9798c3571
# This playbook is for Amazon Linux
- hosts: Amazon Linux
sudo: yes
gather_facts: no
vars:
locale: ja_JP.UTF-8
zone: Asia/Tokyo
repo_upgrade: none
zoneinfo_path: /usr/share/zoneinfo/Asia/Tokyo
tasks:
- name: set locale to /etc/cloud/cloud.cfg
lineinfile: 'dest=/etc/cloud/cloud.cfg line="locale: {{locale}}"'
- name: set repo_upgrade to /etc/cloud/cloud.cfg
lineinfile: 'dest=/etc/cloud/cloud.cfg regexp="repo_upgrade\:" line="repo_upgrade: {{repo_upgrade}}"'
- name: set locale to /etc/sysconfig/i18n
replace: >
dest=/etc/sysconfig/i18n
regexp='^LANG=en_US\.UTF-8'
replace='LANG={{locale}}'
- name: set zone to /etc/sysconfig/clock
replace: >
dest=/etc/sysconfig/clock
regexp='^ZONE=\"UTC\"'
replace='ZONE="{{zone}}"'
- name: set localtime
file: >
src={{zoneinfo_path}}
dest=/etc/localtime
state=link
force=yes
- name: yum update
yum: state=latest name=*
実行
リモートから実行する方法もありますが、今回はサーバにansibleをインストールし、
playbookをgistから取ってきてローカルで実行するようにしました。
以下をUserDataをインスタンス起動時に設定すれば、実行されます。
ec2-userでログインしてからコピペして実行する場合は、sudo yum をお忘れなく。
- aisibleのインストール
- hostsファイルを作る
- playbookをgistから取得
- ansible-playbookを実行
#!/bin/bash
yum install ansible -y --enablerepo=epel
echo -e "[Amazon Linux]\n127.0.0.1" > /tmp/hosts
curl -s https://gist.githubusercontent.com/szkkentaro/c1dfe2bd8af9798c3571/raw/AmazonLinux.yml -o /tmp/AmazonLinux.yml
ansible-playbook -i /tmp/hosts /tmp/AmazonLinux.yml --connection=local
まとめ
AmazonLinuxをベースにAMI作ってる時に、あれ?あと何設定しとくんだっけ?ってよく忘れるので今回やってみました。
正直、User-dataに直接シェルスクリプトで書いたほうが早い気もします(気が向いたら作ります)が、
環境構築ツールをAnsibleに統一させる場合などは利用用途があるかもしれません。
お役に立てば幸いです。
追記
glibc更新により/etc/localtimeが変更されてしまうことへの対応として、/etc/sysconfig/clockのUTCをfalseに変更する設定を入れていましたが検証した結果いらなさそうなので、削除しました。
必要という判断であればご自由に追加してご利用ください。
- name: set false to clock utc
replace: >
dest=/etc/sysconfig/clock
regexp='^UTC=true'
replace='UTC=false'