LoginSignup
0
2

More than 5 years have passed since last update.

aws上に作成したansibleサーバーでテストサイトを構築する(4) サーバー共通の設定

Last updated at Posted at 2017-11-02

はじめに

前回までで、sshでのログオンが可能なEC2インスタンスの作成ができました。
今回は初期状態のAmazon Linuxサーバーに共通で実施しておきたい設定などを行います。

ssh接続のオプション設定

最終的にはansible-playbookコマンドを実行したらノータッチでサイトが出来上がってほしいです。
が、EC2インスタンス作成直後にSSH接続するとホストキーの確認で実行が止まってしまうので対策します。
ansible.cfgを以下のように修正します。

ansible.cfg
[defaults]
inventory = ./inventories

[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null

ansibleがssh接続を実行する際に、ホストキーの確認を抑止し、さらに接続先から取得したホストキーの書き込み先を/dev/nullにして記録させないことで、Playbookを繰り返し実行しても大丈夫なようにしています。

フォルダ構成

ここまででフォルダ構成は以下のようになっています。

.
|-- ansible.cfg
|-- aws_infra.yml
|-- group_vars
|   `-- all.yml
|-- inventories
|   `-- hosts
|-- roles
|   |-- aws_ec2
|   |   `-- tasks
|   |       `-- main.yml
|   `-- aws_network
|       `-- tasks
|           |-- create_keypair.yml
|           |-- create_vpc.yml
|           `-- main.yml
`-- site.yml

Playの追加

各サーバーへの設定を行っていく段階に入りましたので、その処理を行うPlaybook、wordpress.ymlを新しく作成することにします。

これはsite.ymlから呼び出すようにします。
wordpress.yml単体でも実行できるようにしますが、最終目標は「Ansibleサーバー以外何もない状態からワンコマンドでテストサイトを作成する」なので。

site.yml
---
- import_playbook: aws_infra.yml
- import_playbook: wordpress.yml
wordpress.yml
- hosts: all
  become: true
  roles:
  - { role: common, tags: [common] }

共通設定ロールの作成

wordpress.ymlに記載したcommonロールを作成します。
commonロールには、Amazon Linuxを利用するときに共通で実行したい処理を実装します。

command
$ mkdir -p roles/common/tasks

今回使用している Amazon Linux (ami-2a69be4c)では、SELinuxは無効になっており、firewalldもインストールされていないので、設定変更としてはタイムゾーンの変更とrpmの最新化のみ実施しています。

roles/common/tasks/main.yml
---
- name: The timezone setting should to be Tokyo.
  file:
    src: /usr/share/zoneinfo/Asia/Tokyo
    dest: /etc/localtime
    state: link
    force: yes

- name: upgrade all packages
  yum: name=* state=latest

実行結果。

command
$ ansible-playbook site.yml

PLAY [localhost] ***********************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************
ok: [localhost]

…<中略>
TASK [aws_ec2 : create ec2 instance] ***************************************************************************************
ok: [web01]

TASK [aws_ec2 : write host list] *******************************************************************************************
ok: [web01] => (item=web01)

PLAY [all] *****************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************
ok: [web01]

TASK [common : The timezone setting should to be Tokyo.] *******************************************************************
changed: [web01]

TASK [common : upgrade all packages] ***************************************************************************************
changed: [web01]

PLAY RECAP *****************************************************************************************************************
localhost                  : ok=9    changed=0    unreachable=0    failed=0
web01                      : ok=9    changed=2    unreachable=0    failed=0

EC2作成後、ssh可能になるまで待機

なお、EC2インスタンスが存在しない状態からsite.ymlを実行すると、インスタンス作成後、SSH接続が可能になるまでタイムラグがあるため、wordpress.yml実行時にタイムアウトしてエラー終了することがあります。
これを回避するため、aws_ec2ロールの最後にSSH起動するまで待機するタスクを追加します。
SSH接続できるようになるまでがEC2インスタンスの作成ということですね。

roles/aws_ec2/tasks/main.yml(追記)
- name: wait for ssh
  wait_for:
    host: "{{ aws_create_ec2.tagged_instances[0].public_ip }}"
    port: 22

次回

次回はnginxのインストールなど、Webサーバーとしての構成を行います。



0
2
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
0
2