本記事は以下の記事の続編となります。
【CFn】Ansibleの検証環境をECS(EC2)上に構築する①(環境構築編)
本編を初めてご覧の方はまずはこちらの記事からお読みになって下さい。
概要
本記事の概要を以下に記載します。
「Ansible実行編」の概要
前編の記事では、Ansibleの実行環境の構築を行いました。
本記事では、前編で構築したECS上にて実際にAnsibleを実行していきたいと思います。
具体的には、コントロールサーバへアクセスし、各ターゲットへの接続確認、テスト用playbookの実行を行います。
「Ansible実行編」での作業工程
本記事の作業工程を以下に記載します。
※ 本編での作業工程を赤文字で表示しています
- 事前要件の確認
- 事前準備 (手作業 ※一部CloudFormationによるデプロイ)
- Gitリポジトリのダウンロード
- 公開鍵、及び秘密鍵を指定のディレクトリへ配置
- ECRの作成 ※既にお持ちであればそのリポジトリを流用
- DockerImageをECRへ格納
- AWS環境構築 (CloudFormationによるデプロイ)
- ネットワーク環境の作成
- セキュリティグループの作成
- EC2インスタンス(踏み台サーバ)の作成
- ALBの作成
- Route53のパブリックホストゾーンへAレコードを登録
- ECS クラスターの作成
- ECS サービス(コンテナ)の作成
- 動作確認
- WebコンテナへのHTTPSアクセス
- コントロールサーバへのSSH接続
- Ansibleの機能確認
動作確認 – コントロールサーバへのSSH接続
では早速Ansibleを実行するコントロールサーバへ問題なくアクセスできるのかを確認していきます。
基本的には、PublicSubnetに配置した踏み台サーバを経由してECS(コンテナ環境)へは接続します。
踏み台サーバへのSSH接続
TeraTerm等のターミナルエミュレータを起動します。
接続画面にて、以下パラメータを指定して下さい。
————
ホスト名:<server.ymlテンプレートで作成したElasticIPAddress(EIP)を指定>
接続方式:SSH
接続プロトコル:22
————
認証情報画面にて、以下パラメータを指定し、SSH接続して下さい。
————
ユーザー名:ec2-user
秘密鍵:<事前に準備したキーペアを指定>
————
無事、踏み台サーバへ接続できることを確認して下さい。
コントロールサーバへのSSE接続
では続いて、踏み台サーバからコントロールサーバへ踏み台接続を行います。
踏み台サーバにて、以下コマンドを実行して下さい。
# コントロールサーバへのSSH接続(パスワード認証)
$ ssh ec2-user@xx.xx.xx.xx(ECSに構築したホストインスタンスのプライベートIPアドレス) -p <コントロールサーバの受付ポートを指定>
ec2-user@192.168.3.140's password:<パスワードを指定>
無事、コントロールサーバへ接続できることを確認できたら、動作確認完了です。
動作確認 – Ansibleの機能確認
最後に本記事の肝であるAnsibleに関する機能確認をしていきます。
ここで確認する内容は以下の通りとなります。
- Ansibleでの疎通確認(ping)が取れること
- 事前に準備したテスト用のplaybook.ymlが実行可能であること
.ssh/configへのホストの登録
Ansibleでは、ターゲットホストへのリモート通信にSSHプロトコルを使用します。
その関係で、単一ホストへのリモート通信でしたら単純にhostsファイルにIPを記載しておけばよいのですが、本記事で構築したコンテナ環境のような同一ホスト別ポートへリモート通信を行うには、~/.ssh/config でポート別にホスト名を設定する必要があります。
~/.ssh/config自体は既にコントロールサーバ内に配置済ですので、viでファイルを開き、以下の通りに修正を行って下さい。
$ vi /home/ec2-user/.ssh/config
Host web01
HostName <ホストインスタンスのプライベートIPアドレスを指定>
Port <コンテナの受付ポートを指定>
Host web02
HostName <ホストインスタンスのプライベートIPアドレスを指定>
Port <コンテナの受付ポートを指定>
あまりECSに詳しく無い方向けに各コンテナの受付ポートの確認方法を以下に記載しておきます。
- AWSマネコンへアクセスし、「ECS」コンソール画面へ遷移します。
- 「ECS」コンソール画面右ペイン「Amazon ECS」-「クラスター」をクリックします。
- クラスター管理画面の下部タブから「サービス」を選択し、対象のノードをクリックします。
- サービス管理画面の下部タブから「タスク」を選択し、対象のタスクをクリックします。
- 画面遷移後、「コンテナ」-「ネットワークバインド」-「ホストポート」にて受付ポートを確認することができます。
Ansibleでの疎通確認(ping)
Ansibleでの疎通確認が取れるかを確認します。
疎通確認にはansible pingコマンドを使用します。
pingコマンドといっても、前述で記載した通り、Ansibleでは通信にSSHプロトコルを使用しますので、その設定が通っていないとpingを通すことはできません。
SSH設定については、本記事で既に実施済ですので、動作確認として、以下のansible pingコマンドを実行して下さい。
# Ansibleディレクトリへ移動
$ cd /etc/ansible
$ pwd
/etc/ansible
# Ansible pingコマンドによる疎通確認
$ ansible -i hosts Web -m ping
以下のような結果が出力されれば疎通確認が取れた(pingが通った)ことになります。
web02 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
[WARNING]: Platform linux on host web01 is using the discovered Python
interpreter at /usr/bin/python, but future installation of another Python
interpreter could change this. See https://docs.ansible.com/ansible/2.9/referen
ce_appendices/interpreter_discovery.html for more information.
web01 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
テスト用のplaybook.ymlが実行
では最後に、テスト用に用意しているplaybook.ymlを使用して、ansible playbookを実行します。
playbook.ymlの中身は以下の通りとなっています。
- hosts: Web
tasks:
- name: "test"
shell: |
touch /home/ec2-user/hoge.txt
playbookの内容としては、各ターゲットコンテナのカレントユーザーディレクトリにhoge.txtを作成するだけの簡易的なものとなっています。
以下のansible playbookコマンドを実行して下さい。
$ pwd
/etc/ansible
$ playbookの実行
ansible-playbook -i hosts playbook.yml
PLAY [Web] *********************************************************************
TASK [Gathering Facts] *********************************************************
[WARNING]: Platform linux on host web01 is using the discovered Python
interpreter at /usr/bin/python, but future installation of another Python
interpreter could change this. See https://docs.ansible.com/ansible/2.9/referen
ce_appendices/interpreter_discovery.html for more information.
ok: [web01]
[WARNING]: Platform linux on host web02 is using the discovered Python
interpreter at /usr/bin/python, but future installation of another Python
interpreter could change this. See https://docs.ansible.com/ansible/2.9/referen
ce_appendices/interpreter_discovery.html for more information.
ok: [web02]
TASK [test] ********************************************************************
[WARNING]: Consider using the file module with state=touch rather than running
'touch'. If you need to use command because file is insufficient you can add
'warn: false' to this command task or set 'command_warnings=False' in
ansible.cfg to get rid of this message.
changed: [web02]
changed: [web01]
PLAY RECAP *********************************************************************
web01 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web02 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
無事コマンドが実行できたら、各ターゲットコンテナへSSH接続し、hoge.txtが作成されていることを確認します。
# Web01へSSH
$ ssh web01
$ ls
hoge.txt
# Web02へSSH
$ ssh web02
$ ls
hoge.txt
無事、hoge.txtが作成されていることを確認できたら動作確認は完了となります。
後は、心置きなくAnsibleのPoCをしていただければと思います。
PoCの結果、環境がグチャグチャになっても、またコンテナを立ち上げれば良いだけなので、気楽に検証作業を行うことができます。
まとめ
以上で、本記事の内容は全て終了となります。
構築手順としてはCloudFormationテンプレートを構築するだけで非常に簡単なので、これからAnsibleを始めてみたい、Ansibleのハンズオンの土台が欲しいといった方には本記事の内容は非常にオススメできます。
この機会に是非、Ansibleに関して興味を持っていただけたらと思います。
コメント