LoginSignup
92
90

More than 5 years have passed since last update.

Ansibleを使って、AmazonLinuxに最低限の初期化を行う

Last updated at Posted at 2015-01-09

Ansibleを使って、AmazonLinuxに最低限の初期化をやってみました。

日本で利用しやすいように、最低限の初期設定とパッケージの更新を行っています。

AMI

AmazonLinuxのAMIは以下を利用しました。

amzn-ami-hvm-2014.09.1.x86_64-ebs (ami-4985b048)

環境設定 (+ yum update)

言語と時刻の設定をします。

  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

playbook

playbookはこんな感じです。

gistはここに置いておきます。
:octocat: https://gist.github.com/szkkentaro/c1dfe2bd8af9798c3571

AmazonLinux.yml
# 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 をお忘れなく。

  1. aisibleのインストール
  2. hostsファイルを作る
  3. playbookをgistから取得
  4. ansible-playbookを実行
user-data.txt
#!/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'
92
90
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
92
90