Pro Yearly is on sale from $80 to $50! »

Red Hat Dojo #01 Ansibleを使ってWebサーバーを構築してみよう

E16d7e90ab7c34c73e92099dc67e5fb6?s=47 Mats
October 26, 2020

Red Hat Dojo #01 Ansibleを使ってWebサーバーを構築してみよう

エンジニアに限らずシステム構築や検討に関わる方でこれからAnsibleを使ってみたい方が分かるようにAnsibleの基本動作と各コンポーネントをご説明致します。
基本動作の中で、AgentlessなのにAnsibleコントロールノードがどうやってAnsibleターゲットノードを制御しているのか、
またPlaybookのSimpleな記載方法を通じて、
様々な機器へPowerfulに対応できるモジュールを備えていることをご説明致します。

E16d7e90ab7c34c73e92099dc67e5fb6?s=128

Mats

October 26, 2020
Tweet

Transcript

  1. Sli.doによるライブ投票にご協⼒をお願い致します。 Join at slido.com #RedHatDojo1026

  2. IBM Developer IBM Red Hat Dojo Ansibleを使ってWebサーバーを構築してみよう Ansibleをこれから使ってみたい⽅におすすめ ベーシックな使い⽅を基本から解説します Online

  3. 松島 輝昌 ⽇本アイ・ビー・エム デジタルセールス事業 レッドハット・デマンドクリエーション IoT, Python, C#

  4. ⽬的 これからAnsibleに取り組みたい⽅、Ansibleの操作を実際に体験してみたい⽅へ Ansibleを導⼊した場合どんな場⾯でAnsibleを適応できるのか想像できるようにする。 ゴール サンプルコードを使ってLinux,Windows上にWebサイトを簡単に構築する。 AnsibleのA,S,Pを体験する。 本イベントの想定参加者 PCの基本操作が可能な⽅ 構成管理や⾃動化に関⼼のある⽅ 本⽇の⽬的とゴール

  5. 1. ハンズオン準備 環境準備 ハンズオン環境へログイン 2. Red Hat Ansible Automation Ansible

    の紹介 3. ハンズオン Ad-hocコマンドで疎通確認 RHEL8にApacheでWebサーバーを構築 Windows Server 2016にIISでWebサーバーを構築 コンテンツ
  6. 環境準備 1.ハンズオン準備 Mac参加者向け Windows 仮想マシンにリモートデスクトップ接続します。 そのため、「App Store」から「Microsoft Remote Desktop」をインストール Windows参加者向け

    RHEL8 マシンにssh 接続します。 Windows10の PowerShell では ssh コマンドを利⽤することが可能です。 お使いのマシンの PowerShell に ssh 機能が備わっていなければ、「tera term」をご利⽤くださ い。
  7. Ansibleコントロールノード(RHEL)のハンズオン環境にログイン 1.ハンズオン準備 ①Public IP を使ってssh接続 ②“yes”を⼊⼒ ③パスワードをコピペ(⾮表⽰) ④Ansibleコントロールノードに ログインできていることを確認 Mac︓ターミナル

    Windows10︓powershell
  8. Ansibleターゲットノード(RHEL)のハンズオン環境にログイン 1.ハンズオン準備 ①Public IP を使ってssh接続 ②“yes”を⼊⼒ ③パスワードをコピペ(⾮表⽰) ④Ansibleコントロールノードに ログインできていることを確認 Mac︓ターミナル

    Windows10︓powershell
  9. Ansibleターゲットノード(Windows 2016)のハンズオン環境にログイン @Mac① 1.ハンズオン準備 ① Launchpadから 「Microsoft Remote Desktop」を起動 ②「Add

    PC」をクリック (どちらか⼀⽅)
  10. Ansibleターゲットノード(Windows 2016)のハンズオン環境にログイン @Mac② 1.ハンズオン準備 ①Public IP を⼊⼒ ②「Administrator」を選択 ③「Add」をクリック

  11. Ansibleターゲットノード(Windows 2016)のハンズオン環境にログイン @Mac③ 1.ハンズオン準備 ①ログイン対象を ダブルクリック ②「Continue」をクリック ③Windows Server の

    ログインパスワードを⼊⼒ し、「Continue」をクリック
  12. Ansibleターゲットノード(Windows 2016)のハンズオン環境にログイン @Windows① 1.ハンズオン準備 ①左下のWindowsアイコンを左 クリックし、「rdp」と⼊⼒ ②「オプションの表⽰」 をクリック ③ Public

    IP を⼊⼒し、 「接続」をクリック
  13. Ansibleターゲットノード(Windows 2016)のハンズオン環境にログイン @Windows② 1.ハンズオン準備 ① Windows Server の ログインパスワードを⼊⼒し 「OK」をクリック

    ②「はい」をクリック
  14. 構成管理 もともとはITサービス提供に利⽤されるリソースや成果物を維持管理 するプロセスと定義されます。広義はITサービスの構成管理なのです が、今回はオペレーション⾃動化に関する構成管理といったような特 定の構成管理の話になります。 2.Red Hat Ansible Automation ITサービスに関する

    構成管理 仕様書や契約書の変更記録 オペレーションに関する 構成管理 システムの⾃動プロビジョニング 今回のテーマ
  15. 2.Red Hat Ansible Automation セキュリティー 仮想化基盤 ネットワーク 得意とする領域 夜間・休⽇作業 属⼈化排除

    ⼯数の無駄削減 セキュリティー向上 品質向上 働き⽅改⾰ リードタイム短縮 ⾃動化2.0 Ansible Use Case︓ https://www.ansible.com/use-case
  16. 2.Red Hat Ansible Automation • 様々なIT機器やアプ リケーションと⽤法 を⾃動化 1PXFSGVM •

    YAML形式の Playbookで短く簡 潔に⾃動化 4JNQMF • 管理対象への特別な 設定は不要 "HFOUMFTT ͜Ε·ͰͷࣗಈԽ੡඼ͱ͸ҧ͏"OTJCMFͷಛ௃
  17. まずハンズオンを⾏うための環境構築を⾏います。 Mac,Windowsに応じて事前に設定する事項がいくつかございますが、 このアクティビティを通じて、Ansible の特徴の1つである "Agentless”を体験していただけると考えております。 その後、”Simple”な Yaml ファイルを通じて”Powerfull”な Ansible module

    群を使ってWebサイト構築を簡単に実⾏できるところまで体験 していただきたいと考えております。 3.ハンズオン 今回使⽤するサンプルコード等はコチラ↓ https://github.com/teruterubohz-ibm/redHatDojo-01
  18. 本⽇の構成 3.ハンズオン ⼿元のPC (Mac/Windows) RHEL8 AA.BB.CC.DD EE.FF.GG.HH Windows Server 2016

    KK.LL.MM.NN OO.PP.QQ.RR Mac︓ssh アクセス Win︓RDPアクセス ssh 経由で Playbook実⾏ WinRM経由で Playbook実⾏ ① ② ② Apacheで Webサイト構築 IISで Webサイト構築 ③ ③ RHEL8 WW.XX.YY.ZZ SS.TT.UU.VV Yマシン名の下に記載してある⽂字列は 中段︓プライベートIPアドレス 下段︔パブリックIPアドレス確認 コントロールノード ターゲットノード ターゲットノード 済
  19. Ansibleユーザーへスイッチ コントロールノード上で”ansible”ユーザーに切り替えAnsibleコマンド を実⾏します。 次のコマンドで”ansible”ユーザーへ切り替えます。 3.ハンズオン $su – ansible 最終ログイン: 2020/10/21

    (⽔) 10:37:47 CDT⽇時 pts/0 $ お客様の環境に既に”ansible”ユーザーを作成してあります。 コントロールノード
  20. コントロールノード(RHEL)から各ターゲットノードへ疎通確認 TCP/IPレベルでの疎通を確認します。 3.ハンズオン $ ping [rhDojoRhelCon***のプライベートIPアドレス] PING AA.BB.CC.DD (EE.FF.GG.HH) 56(84)

    bytes of data. 64 bytes from AA.BB.CC.DD: icmp_seq=1 ttl=64 time=1.05 ms 64 bytes from AA.BB.CC.DD : icmp_seq=2 ttl=64 time=0.703 ms 64 bytes from AA.BB.CC.DD : icmp_seq=3 ttl=64 time=0.526 ms $ ping [rhDojoWinTar***のプライベートIPアドレス] PING KK.LL.MM.NN (OO.PP.QQ.RR) 56(84) bytes of data. 64 bytes from KK.LL.MM.NN : icmp_seq=1 ttl=64 time=1.05 ms 64 bytes from KK.LL.MM.NN : icmp_seq=2 ttl=64 time=0.703 ms 64 bytes from KK.LL.MM.NN : icmp_seq=3 ttl=64 time=0.526 ms Ctrl-c Ctrl-c コントロールノード
  21. ターゲットノード(RHEL)に”ansible”ユーザー追加 Ansible 実⾏ユーザーとして”ansible”ユーザーを作成し、sudoユーザー として追加します。 3.ハンズオン # useradd ansible # passwd

    ansible ①“ansible”ユーザー追加 ②“ansible”ユーザーのパスワード設定 ターゲットノード # visudo ③sudoユーザーとして“ansible”ユーザーを追加 ansible ALL=(ALL) ALL 101⾏⽬に以下を追加
  22. コントロールノード(RHEL)から各ターゲットノードへAd­hocコマン ド疎通確認 ※ターゲットノードがLinux(RHEL)の場合 SSH公開鍵を⽣成し、ターゲットノード(RHEL)へ登録します。 3.ハンズオン $ssh-keygen -t rsa Generating public/private

    rsa key pair. Enter file in which to save the key (/home/ansible/.ssh/id_rsa): /home/ansible/.ssh/id_rsa already exists. Overwrite (y/n)? y Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in ・ ・ +---[RSA 3072]----+ | E | | ..| ssh-copy-id -o StrictHostKeyChecking=no -i $HOME/.ssh/id_rsa.pub localhost ⾃マシン(localhost)への鍵登録 相⼿マシン(AA.BB.CC.DD)への鍵登録 Enter Enter Enter y ssh-copy-id -o StrictHostKeyChecking=no -i $HOME/.ssh/id_rsa.pub AA.BB.CC.DD コントロールノード
  23. コントロールノード(RHEL)から各ターゲットノードへAd­hocコマン ド疎通確認 ※ターゲットノードがWindowsの場合 Administratorグループにansibleユーザーを追加 3.ハンズオン ターゲットノード 「Accounts」をクリック 「Other people」をクリック

  24. コントロールノード(RHEL)から各ターゲットノードへAd­hocコマン ド疎通確認 ※ターゲットノードがWindowsの場合 Administratorグループにansibleユーザーを追加 3.ハンズオン ターゲットノード 「Users」を選択し、右クリック。 「New User…」をクリック ユーザー名、パスワード

    を記載し「Create」 Accounts画⾯を再表⽰し、追加したユー ザーの権限を「Administrator」へ変更 「Change account type」 をクリック
  25. コントロールノード(RHEL)から各ターゲットノードへAd­hocコマン ド疎通確認 Ansibleの特殊コマンドを使って疎通を確認します。 3.ハンズオン Viやテキストエディタ等を使って ~/sample/invent.ini を編集 [control] localhost [rhelTarget]

    AA.BB.CC.DD [winTarget] KK.LL.MM.NN [winTarget:vars] ansible_user=ansible ansible_password=qwer!234 ansible_port=5986 ansible_connection=winrm ansible_winrm_server_cert_validation=ignore ターゲットノードの プライベートIPアドレス Viやテキストエディタ等を使って ~/sample/winInvent.ini を編集 [all:vars] ansible_ssh_user=ansible ansible_ssh_pass="qwer!234" ansible_ssh_port=5986 ansible_connection=winrm ansible_winrm_server_cert_validation=ignore [windows] winTarget ansible_host=KK.LL.MM.NN [control] rhelControl ansible_host=WW.XX.YY.ZZ ターゲットノードの プライベートIPアドレス コントロールノードの プライベートIPアドレス コントロールノード
  26. コントロールノード(RHEL)からAd-hocコマンドによるターゲットノー ド(RHEL,Windows Server)疎通確認 3.ハンズオン $ ansible rhelTarget -i invent.ini -m

    ping AA.BB.CC.DD | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } $ ansible winTarget -i invent.ini -m win_ping KK.LL.MM.NN | SUCCESS => { "changed": false, "ping": "pong" } コントロールノード
  27. RHEL8にApacheでWebサーバーを構築するYamlファイル確認 (apache.yml) 実施していること ・apacheの最新版をインストール ・apache起動 ・ファイアウォール起動 ・TCP80番ポート通信可 etc 3.ハンズオン ---

    - hosts: rhelTarget remote_user: ansible become: yes tasks: - name: install apache yum: name: httpd state: latest # - name: latest index. html file is present # copy: src=./files/rhDojoSample01.html dest=/var/www/html/index.html # - name: latest index. html file is present # copy: src=./files/ryoma.JPG dest=/var/www/html/ - name: httpd is started service: name: httpd state: started - name: start firewalld command: systemctl start firewalld.service - name: open 80 command: firewall-cmd --zone=public --add-service=http --permanent - name: restart firewall command: firewall-cmd --reload コントロールノード
  28. Windows Server 2016にIISでWebサーバーを構築するYamlファイ ル確認(iis.yaml) 実施していること ・IISのインストール済ならそのまま、 未インストールならば最新版をインストール ・再起動 ・TCP80番ポート通信可 etc

    3.ハンズオン --- - hosts: rhelTarget remote_user: ansible become: yes tasks: - name: install apache yum: name: httpd state: latest # - name: latest index. html file is present # copy: src=./files/rhDojoSample01.html dest=/var/www/html/index.html # - name: latest index. html file is present # copy: src=./files/ryoma.JPG dest=/var/www/html/ - name: httpd is started service: name: httpd state: started - name: start firewalld command: systemctl start firewalld.service - name: open 80 command: firewall-cmd --zone=public --add-service=http --permanent - name: restart firewall command: firewall-cmd --reload コントロールノード
  29. Playbook実⾏前状態確認 Webブラウザで各ターゲットノードのパブリックIPアドレスをチェック 3.ハンズオン EE.FF.GG.HH OO.PP.QQ.RR ターゲットノード (RHEL8) ターゲットノード (Windows Server

    2016) アクセスできません ⾃⾝のマシン
  30. ターゲットノード(RHEL8)側でPlaybook実⾏ 3.ハンズオン $ ansible-playbook -i invent.ini apache.yml PLAY [Initialize OS

    setting for Windows Servers] ******************************** ・ ・ ・ TASK [Install IIS] ******************************************************************* changed: [winTarget] TASK [Reboot] ********************************************************************* changed: [winTarget] PLAY RECAP ********************************************************************* AA.BB.CC.DD : ok=9 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 ansible-playbook -i invent.ini apache.yml 成功︕ コントロールノード
  31. ターゲットノード(Windows Server 2016)側でPlaybook実⾏ 3.ハンズオン $ ansible-playbook -i winInvent.ini iis.yml PLAY

    [Initialize OS setting for Windows Servers] ********************************* ・ ・ ・ TASK [Install IIS] ******************************************************************* changed: [winTarget] TASK [Reboot] ********************************************************************* changed: [winTarget] PLAY RECAP *********************************************************************** winTarget : ok=9 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 成功︕ ansible-playbook -i winInvent.ini iis.yml コントロールノード
  32. • Playbook実⾏後・・・ 3.ハンズオン OO.PP.QQ.RR ターゲットノード (Windows Server 2016) 簡単にIISサーバを構築す ることができました。

    ターゲットノード (RHEL8) AA.BB.CC.DD 簡単にApacheサーバを構 築することができました。 ⾃⾝のマシン
  33. Playbook修正+Playbook実⾏ (RHEL8) apache.yaml 78,79,81,82⾏⽬のコメントアウトを外し、Playbook実⾏ 3.ハンズオン $ ansible-playbook -i winInvent.ini iis.yml

    PLAY [Initialize OS setting for Windows Servers] ********************************* ・ ・ ・ TASK [Install IIS] ******************************************************************* changed: [winTarget] TASK [Reboot] ********************************************************************* changed: [winTarget] PLAY RECAP *********************************************************************** winTarget : ok=9 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 成功︕ ansible-playbook -i winInvent.ini iis.yml コントロールノード
  34. Playbook修正+Playbook実⾏ (Windows Server 2016) iis.yaml 78,79,81,82⾏⽬のコメントアウトを外し、Playbook実⾏ 3.ハンズオン $ ansible-playbook -i

    winInvent.ini iis.yml PLAY [Initialize OS setting for Windows Servers] ********************************* ・ ・ ・ TASK [Install IIS] ******************************************************************* changed: [winTarget] TASK [Reboot] ********************************************************************* changed: [winTarget] PLAY RECAP *********************************************************************** winTarget : ok=9 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 成功︕ ansible-playbook -i winInvent.ini iis.yml コントロールノード
  35. • Playbook実⾏後・・・ 3.ハンズオン OO.PP.QQ.RR 簡単にIISサーバに変更を 加えることができました。 AA.BB.CC.DD 簡単にApacheサーバに変更 を加えることができました。 ターゲットノード

    (Windows Server 2016) ターゲットノード (RHEL8) ⾃⾝のマシン
  36. 次回11/9(⽉)に 「 Red Hat Dojo #2 : Ansible Tower/AWX を体験してみよう」

    を予定しております。 この中ではAnsible Tower/AWXの操作や活⽤⽅法を解説する 予定です。 よろしければご参加をお願い致します。 予告
  37. Sli.doによるライブ投票にご協⼒をお願い致します。 Join at slido.com #RedHatDojo1026

  38. IBM Developer Dojoは開発者の⽅を対象に、IBM Cloudを主とした技術情報をお伝えする⽬的で開催して います。講師や運営スタッフにより、開催毎に最適と判断した内容でお届けしています。 現在、ハンズオンを伴う講義はお客様の費⽤負担がない環境と⼿順でご案内しています。講義終了後、不要 になりました制作物はお客様ご⾃⾝で削除をお願いいたします。クレジットカードの登録が伴わない場合、 費⽤は⼀切発⽣致しませんが、ご登録いただいたお客様はご注意ください。 講師陣はみなさまの利⽤状況を個別に確認することはできません。 ご理解とご協⼒をお願いいたします。

    利⽤したサービスの削除⽅法については講義の中でご案内します。 ご不明な点がございましたら、当⽇確認をお願いいたします。 講義終了後、 IBM Developer Dojoに関するお問い合わせは「Slack」にお願いします。それ以外のIBM Cloudのお問い合わせにつきましては、弊社サポートセンターまで、次のいづれかの⽅法でお問い合わせく ださい。 IBM Cloudダッシュボードの「サポート」メニューから「Case」を作成し、英語でご記⼊ください IBM Cloudサポートセンター「相談する」ボタンからチャットまたは電話でご連絡ください https://www.ibm.com/jp-ja/cloud/support ご参加ありがとうございました。 免責事項
  39. EOF