Technical Blog テクニカルブログ
  1. HOME
  2. テクニカルブログ
  3. GCPでAnsibleを動かしてみる

GCPでAnsibleを動かしてみる

投稿者:ソリューション担当

GCPでAnsibleを動かしてみる

目次

  • 準備 Terrafromを利用したGCEインスタンスデプロイ
  • 準備 ハンズオン環境の確認
  • 演習1. アドホックコマンドの実行
  • 演習2. シンプルなPlaybookの作成
  • 演習3. Playbookの実行
  • 演習4. 変数、ループ、ハンドラ、テンプレートの利用方法確認
  • 演習5. Playbookの作成と実行
  • 演習6. 応用

本ハンズオンは、Google Cloud Platform(以下GCP)環境で実施します。

準備 Terraformを利用したGCEインスタンスデプロイ

ゴール

  1. git,Terraform,Ansibleといったツールの導入が行える
  2. Terraformの概要がわかる
  3. Terraformの使い方がわかる
  4. 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については、コンソール画面のホームにあるプロジェクト情報の欄に記載されています。

gcp_provider.tf
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上で表示されている、@から左側に記載されているユーザ名を利用してください。

gcp_variables.tf
variable "test_ssh_keys" {
   type = "string"
   default = <<EOF
username: ssh-rsa xxxxx(id_rsa.pubをコピーした内容)
EOF
}

記載例は下記の通りです。
example_userをユーザ名、ssh-rsa以下の箇所を、id_rsa.pubをコピーした内容を貼り付けてください。

gcp_variables.tf
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)

インスタンス接続方法

  1. GCPのコンソールへアクセスします。
  2. 画面右上の”Active Cloud Shell”と記載されたボタンをクリックします。
  3. 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. アドホックコマンドの実行

ゴール

  1. Ansibleのアドホックコマンドを使って、疎通確認を行える
  2. Ansibleのアドホックコマンドを使って、ミドルウェアのインストールを行える
  3. インストールしたミドルウェアのサービスの起動、停止を行える
  4. インストールしたミドルウェアの削除を行える

対象ホストファイルを作成

Ansibleには、どのサーバに対し設定を行うかを定義するファイルとしてinventoryファイルがあります。
まずはじめにホームディレクトリ配下にinventoryファイルを作成します。
IPアドレスはhandson-instanceのIPアドレスを記載してください。

inventory
[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の作成

ゴール

  1. playbookの書き方がわかる
  2. シンプルな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

handson-playbook1.yml
---
- hosts: web        #inventoryで定義されたホスト名、グループ名を設定します。
  name: Install the apache web service #playに対してのわかりやすい名前を設定します。
  become: yes       #ユーザ権限のエスカレーションを可能にします。デフォルトはsudo

ステップ 3 tasksを作成する

ステップ 2で定義したplayに、httpdをインストールするtasksを追記します。

handson-playbook1.yml
~先程の続き~
  tasks: 
    - name: install apache    #実行する処理の名前を記載します。
      yum:                    #利用するモジュール(yumモジュール)を記載します。
        name: httpd           #ミドルウェア名を記載します。
        state: present        #インストール処理を記載します。
    - name: start httpd       #サービスを実行します。
      service:                #利用するモジュール(serviceモジュール)を記載します。
        name: httpd           #サービス名を記載します。
        state: started        #状態を記載します。

演習3. Playbookの実行

ゴール

  1. 作成したplaybookのコードチェックができる
  2. playbookを実行した際の変更箇所の確認が行える
  3. 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. 変数、ループ、ハンドラ、テンプレートの利用方法がわかる

ステップ1 変数の利用方法の確認

AnsibleのPlaybook内では、変数を利用できます。
変数を利用する際にはいくつかのルールがあります。
1. 変数宣言はvars若しくはvars_promptを利用
2. 変数利用時は”{{変数名}}”という形で利用
変数が複数ある場合、ステップ2のループを利用して表現します。

sample1.yml
---
- 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}}"を宣言します。

sample2.yml
---
- 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という宣言を行い、その中に処理を記載していきます。
notifyhandlersにはそれぞれ同じ名前の処理を記載し、処理の対応を表します。
sample2.ymlであれば、restart apache serviceが対応したハンドラとなります。

sample3.yml
---
- 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の作成と実行

ゴール

  1. 変数、ループ、ハンドラ、テンプレートを含んだ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を作成します。

handson-playbook2.yml
---
- 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. 応用

ゴール

  1. roleの概要がわかる
  2. 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を例に、どの部分がどのディレクトリに分けられるかを確認します

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を見てみましょう。

分割で残ったPlaybook
---
- hosts: web
  name: install Apache web server
  become: yes

どのホストに対して実行するかという、Playbookを記載時に必要な箇所が残っています。
この残ったPlaybookに、Roleの各ディレクトリ内容を呼び出す設定を入力することで、通常のPlaybook同様実行が可能となります。
Roleの内容を適用させる内容を記載したPlaybookが下記になります。

handson-playbook3.yml
---
- 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のハンズオンは終わりとなります。


  1. Ansibleから対象のホストへ行う処理のこと 

  2. ホストの別名。リモートのノードと表記する場合もある。 

ページのトップへ