GCPでAnsibleを動かしてみる
投稿者:ソリューション担当
目次
- 準備 Terrafromを利用したGCEインスタンスデプロイ
- 準備 ハンズオン環境の確認
- 演習1. アドホックコマンドの実行
- 演習2. シンプルなPlaybookの作成
- 演習3. Playbookの実行
- 演習4. 変数、ループ、ハンドラ、テンプレートの利用方法確認
- 演習5. Playbookの作成と実行
- 演習6. 応用
本ハンズオンは、Google Cloud Platform(以下GCP)環境で実施します。
準備 Terraformを利用したGCEインスタンスデプロイ
ゴール
- git,Terraform,Ansibleといったツールの導入が行える
- Terraformの概要がわかる
- Terraformの使い方がわかる
- Terraformを利用してGCEインスタンスのデプロイが行える
Terraformとは
Terraformとは、コードからインフラリソースの作成を行い、コードによってインフラリソースを管理するためのツールです。
Ansibleでは対応していないSaaSサービスの作成もTerraformであれば可能となります。
一言で表すと、インフラの土台を作るツールがTerraformとなります。
Terraformでインフラの土台(OSの導入まで)を作り、Ansibleで上モノの管理を行います。
Cloud Shellへのアクセス方法
今回のハンズオンはCloud Shell上で行います。そのため、まずはCloud Shellへアクセスします。
1. GCPのコンソールへアクセスします。
2. 画面右上の”Active Cloud Shell”と記載されたボタンをクリックします。
ステップ 1 git,Terraform,Ansibleを導入する。
gitはデフォルトで導入されているため、TerraformとAnsibleの導入を行う
Terraform導入方法
Cloud Shell起動後、ホームディレクトリにて作業します。
#wgetコマンドを入力し、Terraformをダウンロードします。
wget https://releases.hashicorp.com/terraform/0.11.8/terraform_0.11.8_linux_amd64.zip
#ダウンロード後、terraformフォルダを作成します。
mkdir terraform
#ファイルを移動し、zipを解凍します。
mv terraform_0.11.8_linux_amd64.zip terraform/
cd terraform
unzip terraform_0.11.8_linux_amd64.zip
#ファイル解凍後、環境変数を変更します。
echo 'export PATH=$HOME/terraform:$PATH' >> ~/.bash_profile
#設定を反映させます。
source ~/.bash_profile
#terraformコマンドが使えるか確認します。
terraform -v
Ansible導入
ホームディレクトリに移動後、作業をします。
#pyenvを導入します
curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
#環境変数を設定します
cat << EOS >> ~/.bash_profile
export PATH="/home/"user名"/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
EOS
#pythonを導入
pyenv install 2.7.14
pyenv global 2.7.14
python --version
#ansibleをインストール
pip install ansible
#インストールできたかの確認
ansible --version
ステップ 1 サービスアカウントを作成する
Terraformを利用する際、GCP上のリソースへアクセスするためサービスアカウントが必要となります。
下記手順を実行しサービスアカウントを作成します。
1. GCPのコンソールへアクセスします。
2. Google Cloud Platformと記載された左側にあるナビゲーションメニューボタンを選択し、[IAMと管理]->[サービスアカウント]を選択します。
3. [サービスアカウントを作成]を選択し、下記項目の通り入力し、[新しい秘密鍵の共有]にチェックを入れサービスアカウントを作成します。今回は検証のため、管理者権限を付与しています。
項目 | 設定値 |
---|---|
サービスアカウント名 | Terraform |
プロジェクト役割 | Compute管理者 |
キーのタイプ | json |
ステップ 2 Cloud Shell上へjsonファイルをアップロードする
Cloud Shellへアクセスし、鍵をアップロードします。
1. GCPのコンソールへアクセスします。
2. 画面右上の”Active Cloud Shell”と記載されたボタンをクリックします。
3. Cloud Shell画面の右側に記載された[さらに表示]を選択します。
4. [ファイルをアップロード]を選択し、先程ダウンロードしたjsonファイルをアップロードします。
5. アップロードされたjsonファイルはホームディレクトリに存在するか確認します。ファイルはホームディレクトリにアップロードされています。
ダウンロード後、account.json
とファイル名を変更してください。
ステップ 3 Terraformを初期化する
ホームディレクトリで、Terraformのソースが公開されているGitHubリポジトリをcloneします。
git clone https://github.com/ptpt-free/ansible_demo.git
clone後、ディレクトリを移動します。
cd ansible_demo/instance_deploy
移動後、gcp_provider.tfにあるプロジェクトIDを編集します。
GCPのプロジェクトIDについては、コンソール画面のホームにあるプロジェクト情報の欄に記載されています。
provider "google" {
credentials = "${file("account.json")}"
project = "GCPのプロジェクトIDを記載"
region = "asia-northeast1"
}
先程アップロードしたjsonファイルを移動します。
mv ~/account.json ./
次に、gcp_variables.tfにあるSSHキーを編集します。
Cloud Shellにてssh-keygen -t rsa
コマンドを利用し、GCEインスタンスへ接続するためのSSH鍵を作成します。パスフレーズは設定せずエンターを押してください。
作成したSSH鍵をcat ~/.ssh/id_rsa.pub
にて出力後コピーします。
コピーした内容を、”SSH-KEY”の箇所に置き換えます。
usernameは、Cloud Shell上で表示されている、@から左側に記載されているユーザ名を利用してください。
variable "test_ssh_keys" {
type = "string"
default = <<EOF
username: ssh-rsa xxxxx(id_rsa.pubをコピーした内容)
EOF
}
記載例は下記の通りです。
example_userをユーザ名、ssh-rsa以下の箇所を、id_rsa.pub
をコピーした内容を貼り付けてください。
variable "test_ssh_keys" {
type = "string"
default = <<EOF
example_user: ssh-rsa AAAAABB(~中略~)6kCh example_user@cs-xxxx-337axxxx
EOF
}
SSHキー記載後、以下コマンドでterraformを初期化します。
terraform init
ステップ 2 Terraformのエラー内容を確認する
以下コマンドにてエラーを判定します。
terraform validate
ステップ 3 Terraformの反映結果を確認します。
以下コマンドにてTerraformを実行した結果を確認します。
terraform plan
ステップ 4 Terraformを実行します。
以下コマンドにてTerraformを実行します。
terraform apply
実行後、GCEインスタンスhandson-instanceが作成されます。
Ansibleを実行するための環境構築が完了しました。
準備 ハンズオン環境の確認
利用するインスタンス
- handson-instance:ターゲットノード(Ansibleによって構築されるインスタンスです)
利用するPlaybook
Playbookについては下記リポジトリにコードを公開しています。
https://github.com/ptpt-free/ansible_demo
- handson-playbook1.yml(httpdをインストールするPlaybook)
- handson-playbook2.yml(変数、ループを利用してhttpdをインスタンスするPlaybook)
- handson-playbook3.yml(ロールベースのPlaybook)
- delete-playbook1.yml(演習3で作成した環境を初期化するPlaybook)
- delete-playbook2.yml(演習5で作成した環境を初期化するPlaybook)
- delete-playbook3.yml(演習6で作成した環境を初期化するPlaybook)
- sample1.yml(変数の利用例を記載したPlaybook)
- sample2.yml(ループの利用例を記載したPlaybook)
- sample3.yml(ハンドラの利用例を記載したPlaybook)
インスタンス接続方法
- GCPのコンソールへアクセスします。
- 画面右上の”Active Cloud Shell”と記載されたボタンをクリックします。
- Cloud Shell起動後、インスタンスhandson-instanceのIPアドレスをコピーし、sshコマンドにてログインします。
sshコマンドは下記の通りです。
ssh ユーザ名@handson-instanceのIPアドレス -i ~/.ssh/id_rsa
インスタンスへ接続できない場合は、メニューより[VPCネットワーク]->[ファイアウォールルール]を選択し、TCP22番ポート(SSH)が許可されているかの確認をしてください。
許可されていない場合、下記のようなルールを作成してください。
handson-instanceにネットワークタグを反映させ、ハンズオン中はSSHアクセスを行えるようにしてください。
項目 | 設定内容 |
---|---|
名前 | handson-access |
ネットワーク | defaults |
優先度 | 100 |
トラフィックの方向 | 上り |
プロトコルとポート | tcp:22 |
作業ディレクトリ構成
今回のハンズオンで利用するディレクトリの構成です。
ホームディレクトリ/
├ inventory
├ handson-1/
│ └handson-playbook1.yml
├ handson-2/
│ ├templates/
│ │ └httpd.conf.j2
│ └handson-playbook2.yml
└ ansible_demo/
├handson-1/
│ ├delete-playbook1.yml
│ └handson-playbook1.yml
├handson-2/
│ ├template/
│ │ ├httpd.conf.j2
│ │ └index.html.j2
│ ├sample1.yml
│ ├sample2.yml
│ ├sample3.yml
│ ├delete-playbook2.yml
│ └handson-playbook2.yml
├handson-3
│ ├roles/
│ │ └apache/
│ │ ├defaults/
│ │ │ └main.yml
│ │ ├handlers/
│ │ │ └main.yml
│ │ ├tasks/
│ │ │ └main.yml
│ │ ├templates/
│ │ │ └main.yml
│ │ └vars/
│ │ └main.yml
│ ├delete-playbook3.yml
│ └handson-playbook3.yml
└instance_deploy
├gce_provider.tf
├gce_variables.tf
├gce_instance.tf
└account.json
演習1. アドホックコマンドの実行
ゴール
- Ansibleのアドホックコマンドを使って、疎通確認を行える
- Ansibleのアドホックコマンドを使って、ミドルウェアのインストールを行える
- インストールしたミドルウェアのサービスの起動、停止を行える
- インストールしたミドルウェアの削除を行える
対象ホストファイルを作成
Ansibleには、どのサーバに対し設定を行うかを定義するファイルとしてinventoryファイルがあります。
まずはじめにホームディレクトリ配下にinventoryファイルを作成します。
IPアドレスはhandson-instanceのIPアドレスを記載してください。
[web]
IPアドレス
ステップ 1 モジュール実行
対象ホストに対して、pingモジュール1を利用して疎通確認を行います。
ansible -i inventory web -m ping
ステップ 2 Linuxコマンド実行
commandモジュールを使って基本的なLinuxコマンドを走らせ、その出力をフォーマットしてみます。
ansible -i inventory web -m command -a "uptime" -o
ステップ 3 対象のコンフィグレーション確認
Webノード2のコンフィギュレーションを確認してみましょう。setupモジュールはAnsibleのエンドポイントの情報を表示します。
ansible -i inventory web -m setup
ステップ 4 ミドルウェアのインストール
yumモジュールを用いてApacheをインストールしましょう。
ansible -i inventory web -m yum -a "name=httpd state=present" -b
ステップ 5 ミドルウェアの起動
ステップ 4でインストールしたApacheを起動しましょう。
ansible -i inventory web -m service -a "name=httpd state=started" -b
下記コマンドにてApacheが起動しているかの確認を行います。
curl -I http://IPアドレス
ステップ 6 ミドルウェアの停止
ステップ 5で起動したApacheを停止しましょう。
ansible -i inventory web -m service -a "name=httpd state=stopped" -b
下記コマンドにてApacheが停止しているかの確認を行います。
curl -I http://IPアドレス
ステップ 7 ミドルウェアの削除
ステップ 4でインストールしたミドルウェアを削除しましょう。
ansible web -m yum -a "name=httpd state=absent" -b
Tips
アドホックコマンドのオプション
コマンドオプション | 説明 |
---|---|
-a | モジュールの引数を指定します。指定時は””で囲みます |
-b | ユーザ権限のエスカレーションを実行します。 |
-i | 対象ホストを設定します。 |
-k | 実行時にパスワードを要求します。 |
-m | モジュールを実行します |
-u | 対象ホストの実行ユーザを設定します。 |
stateのパラメータ
state | 設定時の実行結果 |
---|---|
latest | パッケージをアップデート |
present | パッケージをインストール |
absent | パッケージをアンインストール |
演習2. シンプルなPlaybookの作成
ゴール
- playbookの書き方がわかる
- シンプルなplaybookの作成ができる
作業ディレクトリを作成
ホームディレクトリの配下にhandson-1
ディレクトリを作成し、移動します。
mkdir handson-1
cd handson-1
以下の作業は、全てhandson-1
ディレクトリにて実行します。
ステップ 1 playbookを作成する
下記コマンドを実行して、handson-playbook1.ymlを作成します。
touch handson-playbook1.yml
ステップ 2 playを定義する
playは1つ以上のtaskを含むことができ、変更を加える対象のホストや、実際の作業を行うtaskを定義することができます。
viコマンドで、handson-playbook1.yml内に実行するplayを定義します。
vi handson-playbook1.yml
---
- hosts: web #inventoryで定義されたホスト名、グループ名を設定します。
name: Install the apache web service #playに対してのわかりやすい名前を設定します。
become: yes #ユーザ権限のエスカレーションを可能にします。デフォルトはsudo
ステップ 3 tasksを作成する
ステップ 2で定義したplayに、httpdをインストールするtasksを追記します。
~先程の続き~
tasks:
- name: install apache #実行する処理の名前を記載します。
yum: #利用するモジュール(yumモジュール)を記載します。
name: httpd #ミドルウェア名を記載します。
state: present #インストール処理を記載します。
- name: start httpd #サービスを実行します。
service: #利用するモジュール(serviceモジュール)を記載します。
name: httpd #サービス名を記載します。
state: started #状態を記載します。
演習3. Playbookの実行
ゴール
- 作成したplaybookのコードチェックができる
- playbookを実行した際の変更箇所の確認が行える
- playbookの実行が行える
ステップ 1 playbookのコードチェックを行う
playbookを作成した後、playbookにエラーがないかの確認を行います。
ansible-playbook -i ../inventory handson-playbook1.yml --syntax-check
cloneしたディレクトリから実行する場合、ansible_demo/handson-1ディレクトリにいる際は下記コマンドとなります。
ansible-playbook -i ../../inventory handson-playbook1.yml --syntax-check
ステップ 2 playbookの実行後の変化点を確認できる
playbookを実行した際、実行前と実行後でどれだけ変更が加えられるか確認します。
ansible-playbook -i ../inventory handson-playbook1.yml --check
cloneしたディレクトリから実行する場合、ansible_demo/handson-1ディレクトリにいる際は下記コマンドとなります。
ansible-playbook -i ../../inventory handson-playbook1.yml --check
ステップ 3 playbookを実行する
作成したplaybookを実行し、対象のホストに反映させます。
ansible-playbook -i ../inventory handson-playbook1.yml
cloneしたディレクトリから実行する場合、ansible_demo/handson-1ディレクトリにいる際は下記コマンドとなります。
ansible-playbook -i ../../inventory handson-playbook1.yml
下記コマンドにてApacheが起動しているかの確認を行います。
curl -I http://IPアドレス
ステップ 4 環境の初期化を行う
作成したplaybookを実行し、初期化を行います。
ansible-playbook -i ../inventory ../ansible_demo/handson-1/delete-playbook1.yml
cloneしたディレクトリから実行する場合、ansible_demo/handson-1ディレクトリにいる際は下記コマンドとなります。
ansible-playbook -i ../../inventory delete-playbook1.yml
下記コマンドにてApacheが停止しているかの確認を行います。
curl -I http://IPアドレス
演習4. 変数、ループ、ハンドラ、テンプレートの利用方法確認
ゴール
- 変数、ループ、ハンドラ、テンプレートの利用方法がわかる
ステップ1 変数の利用方法の確認
AnsibleのPlaybook内では、変数を利用できます。
変数を利用する際にはいくつかのルールがあります。
1. 変数宣言はvars
若しくはvars_prompt
を利用
2. 変数利用時は”{{変数名}}”という形で利用
変数が複数ある場合、ステップ2のループを利用して表現します。
---
- hosts: web
name: sample yaml
become: yes
vars:
install_modules:
- httpd
tasks:
- name: install module
yum:
name: "{{install_modules}}"
state: present
ステップ2 ループの利用方法の確認
Playbook内ではループ文を利用することができます。
ループ文はwith_items
を利用し、ループする箇所には"{{item}}"
を宣言します。
---
- hosts: web
name: sample yaml
become: yes
tasks:
- name: install module
yum:
name: "{{item}}"
state: present
with_items:
- httpd
- mod_wsgi
ステップ3 ハンドラの利用方法の確認
ハンドラはtask上で状態が更新された際に利用できるジョブの仕組みです。例えば、httpd(Apache server)が更新された場合に再起動を行うジョブを実行するといったことができます。
ハンドラを利用する際は、タスクの最後にnotify
を宣言します。宣言されるジョブの名前に対応したハンドラを実行します。
ハンドラはhandlers
という宣言を行い、その中に処理を記載していきます。
notify
とhandlers
にはそれぞれ同じ名前の処理を記載し、処理の対応を表します。
sample2.ymlであれば、restart apache service
が対応したハンドラとなります。
---
- hosts: web
name: sample yaml
become: yes
vars:
apache_test_message: This is a test message
apache_max_keep_alive_requests: 115
tasks:
- name: install module
yum:
name: httpd
state: present
- name: copy httpd.conf
template:
src: templates/httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
notify: restart apache service
handlers:
- name: restart apache service
service:
name: httpd
state: started
演習5. Playbookの作成と実行
ゴール
- 変数、ループ、ハンドラ、テンプレートを含んだPlaybookを作成できる
作業ディレクトリを作成
ホームディレクトリに移動し、ホームディレクトリ配下にhandson-2
ディレクトリを作成し、移動します。
cd ~
mkdir handson-2
cd handson-2
テンプレートの作成
Ansibleでは用意したテンプレート内容を反映させることができます。
今回はworkshop用のテンプレートファイルを利用します。
下記コマンドを使って、フォルダを作成してください。
mkdir templates
cd templates
curl -O http://ansible-workshop.redhatgov.io/workshop-files/httpd.conf.j2
ステップ1 変数とループ文、ハンドラを利用したPlaybookを作成する
演習4のステップ1、ステップ2、ステップ3の内容を用いてPlaybookを作成します。
---
- hosts: web
name: install Apache web server
become: yes
vars:
install_module:
- httpd
- mod_wsgi
apache_test_message: This is a test message
apache_max_keep_alive_requests: 115
tasks:
- name: install module
yum:
name: "{{item}}"
state: present
with_items: "{{install_module}}"
- name: copy httpd.conf
template:
src: templates/httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
notify: restart apache service
handlers:
- name: restart apache service
service:
name: httpd
state: restarted
ステップ 2 playbookのコードチェックを行う
playbookを作成した後、playbookにエラーがないかの確認を行います。
ansible-playbook -i ../inventory handson-playbook2.yml --syntax-check
cloneしたディレクトリから実行する場合、ansible_demo/handson-2ディレクトリにいる際、下記コマンドとなります。
ansible-playbook -i ../../inventory handson-playbook2.yml --syntax-check
ステップ 3 playbookの実行後の変化点を確認できる
playbookを実行した際、実行前と実行後でどれだけ変更が加えられるか確認します。
ansible-playbook -i ../inventory handson-playbook2.yml --check
cloneしたディレクトリから実行する場合、ansible_demo/handson-2ディレクトリにいる際、下記コマンドとなります。
ansible-playbook -i ../../inventory handson-playbook2.yml --check
ステップ 4 playbookを実行する
作成したplaybookを実行し、対象のホストに反映させます。
ansible-playbook -i ../inventory handson-playbook2.yml
cloneしたディレクトリから実行する場合、ansible_demo/handson-2ディレクトリにいる際、下記コマンドとなります。
ansible-playbook -i ../../inventory handson-playbook2.yml
下記コマンドにてApacheが起動しているかの確認を行います。
curl -I http://IPアドレス
ステップ 5 環境の初期化を行う
作成したplaybookを実行し、初期化を行います。
ansible-playbook -i ../inventory ../ansible_demo/handson-2/delete-playbook2.yml
下記コマンドにてApacheが停止しているかの確認を行います。
curl -I http://IPアドレス
演習6. 応用
ゴール
- roleの概要がわかる
- roleの利用方法がわかる
ステップ 1 roleの役割
Playbookが複雑になってしまった際に、可読性や再利用性を高めるためにroleを利用することがあります。
作成するPlaybookの処理が複雑になればなるほど、tasksや変数であるvarsが長くなってしまいます。そのため、taskのまとまり、varsのまとまりといったカテゴリ毎にファイルを分割し、それぞれをPlaybookにインクルードするような形で実行を行います。
このような機能をroleといいます。
roleを利用することにより、機能ごとに分かれているため作成者以外の第三者が確認してもわかりやすい、機能ごとに別れている為再利用しやすいといったメリットがあります。
ステップ 2 roleの利用方法
roleはroles
フォルダにて構成されます。例えばapache role
という名前のroleがあるとしたら、下記のようなディレクトリ構成になります。
roles/
└apache/
├defaults/
├handlers/
├tasks/
├templates/
└vars/
それぞれのディレクトリの役割は下記の通りとなります。
ディレクトリ | 役割 |
---|---|
defaults | varsディレクトリで利用される変数のデフォルト値を設定します。group_varsを利用したら変数の上書きが可能です。 |
handlers | サービス再起動等の特定イベントで動作する内容を定義します。 |
tasks | roleで実行されるtaskを宣言します。 |
templates | jinja2形式のテンプレートファイルを配置できます。 |
vars | roleで利用される変数を定義します。 |
表のみではわかりにくいため、演習5で作成したhandson-playbook2.ymlを例に、どの部分がどのディレクトリに分けられるかを確認します
---
- hosts: web
name: install Apache web server
become: yes
################ varsディレクトリへ分割可能 #################
vars:
install_module:
- httpd
- mod_wsgi
###########################################################
############## defaultsディレクトリへ分割可能 ###############
apache_test_message: This is a test message
apache_max_keep_alive_requests: 115
###########################################################
############### tasksディレクトリへ分割可能 #################
tasks:
- name: install module
yum:
name: "{{item}}"
state: present
with_items: "{{install_module}}"
- name: copy httpd.conf
template:
src: templates/httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
notify: restart apache service
###########################################################
############### handlersディレクトリへ分割可能 ##############
handlers:
- name: restart apache service
service:
name: httpd
state: restarted
###########################################################
上記の分割可能な範囲は、main.yml
という名前で各ディレクトリへ作成を行えます。
各内容を見てみると、vars:
やtasks:
等わかりやすい範囲で分割可能なことがわかります。
最初から分割するのになれない場合は、まず通常のPlaybookを作成し、その後上記のようにどこからどこまでを分割するかを分けていきます。
各ディレクトリにmain.yml
を作成した際のディレクトリ構成は以下のようになります。
roles/
└apache/
├defaults/
│ └main.yml
├handlers/
│ └main.yml
├tasks/
│ └main.yml
├templates/
│ └main.yml
└vars/
└main.yml
Roleの各ディレクトリにmain.yml
ファイルが存在しますが、実際に動作を行うPlaybookが存在していません。
各ファイルの内容を呼び出すための呼び出し元ファイルが必要となります。
分割時に残ったPlaybookを見てみましょう。
---
- hosts: web
name: install Apache web server
become: yes
どのホストに対して実行するかという、Playbookを記載時に必要な箇所が残っています。
この残ったPlaybookに、Roleの各ディレクトリ内容を呼び出す設定を入力することで、通常のPlaybook同様実行が可能となります。
Roleの内容を適用させる内容を記載したPlaybookが下記になります。
---
- hosts: web
name: This is my role-based playbook
become: yes
roles:
- apache
roles
フォルダの配下にあるapache
フォルダを、Playbook内のroles
という項目にて宣言しています。
このPlaybookを作成することで、通常のPlaybook同様に実行することができます。
最終的なRoleを用いたPlaybookのディレクトリ構成は以下の通りとなります。
roles/
└apache/
│ ├defaults/
│ │ └main.yml
│ ├handlers/
│ │ └main.yml
│ ├tasks/
│ │ └main.yml
│ ├templates/
│ │ └main.yml
│ └vars/
│ └main.yml
└handson-playbook3.yml
ステップ 3 ロールベースのPlaybookを実行する
Roleを利用したPlaybookについては、サンプルコードの実行で確認を行います。
ホームディレクトリへ移動し、ansible_demo配下にあるhandson-3ディレクトリへ移動します。
cd ~
cd ansible_demo/handson-3
handson-3ディレクトリへ移動後、Playbookの実行を行います。
ansible-playbook -i ../../inventory handson-playbook3.yml
下記コマンドにてApacheが起動しているかの確認を行います。
curl -I http://IPアドレス
ステップ 4 環境の初期化を行う
作成したplaybookを実行し、初期化を行います。
ansible-playbook -i ../../inventory delete-playbook3.yml
下記コマンドにてApacheが停止しているかの確認を行います。
curl -I http://IPアドレス
以上でAnsibleのハンズオンは終わりとなります。