Advertisement
Advertisement

More Related Content

Slideshows for you(20)

Similar to Ansible AWXで一歩進んだプロビジョニング(20)

Advertisement

Ansible AWXで一歩進んだプロビジョニング

  1. Ansible AWXで 一歩進んだプロビジョニング JAWS-UG名古屋 プロビジョニングを語る 2019.07.17 Suguru Goto (@aabbss757)
  2. テンプレ 本資料の内容は個人の見解であり、 所属組織の見解ではありません!
  3. テンプレ 資料は後ほど公開します💁‍♂
  4. 自己紹介 --- - profile: - name: Suguru Goto a.k.a 一般男性 - twitter: @aabbss757 - company: ユーザー系SIer(愛知) - job_description: AWS関係あれこれ、自動化
  5. 自己紹介 Ansible方面から来ました  
  6. [1] 5分でわかるAnsible(5分) [2] AWS + Ansible + Windows Serverを組み合わせた   プロビジョニングの話(15分) 話すこと
  7. 話すこと Ansible成分、多めです  
  8. [1] 5分でわかるAnsible [2] AWS + Ansible + Windows Serverを組み合わせた   プロビジョニングの話 話すこと
  9. Ansibleとは - オープンソースの構成管理ツール(自動化ツール) - コミュニティ版(OSS) - エンタープライズ版(RedHat製品) - ChefやPuppetとよく比較される - 大きな違いは、Ansibleはエージェントレス - シンプルさを重視しているため、複雑なことは苦手 - サーバ、ホストにそれぞれPythonが必要
  10. Terraformとの違い - Terraform - メインは “クラウドインフラのオーケストレーション” - OSより”下” のレイヤーを担当 - Ansible - メインは “構成管理” - OSより “上” のレイヤーを担当(下もできる) 【参考】Ansible と Terraform の違い - Qiita  https://qiita.com/yusukaaay/items/cd3bc067d2ad5d449bd1
  11. Ansibleの特徴 Simple Powerful Agentless
  12. Ansibleの特徴 Simple Powerful Agentless - シンプルに構成を定義できるPlaybook - Playbook = 手順書 - PlaybookはNon-Programmingで作成可能 - 特別なスキルを必要としない(低い学習コスト) - PlaybookはYAML形式で記述
  13. Ansibleの特徴 Simple Powerful Agentless - 豊富なモジュール(最新版のAnsibleで2832個) - クラウド、サーバ、ネットワーク機器が標準提供 - モジュールは自作することも可能
  14. Ansibleの特徴 Simple Powerful Agentless - 管理対象ホストにエージェントのインストール不要 - SSH通信さえできれば良い(WindowsはWinRM) - 事前準備のコストが掛からない
  15. 冪等性が担保されている - 冪等性とは - ある操作を何度実行しても同じ結果になること - 殆どのモジュールには冪等性が保たれている - 冪等性が担保されている状態の例 - 「フォルダAを作成する」という定義をした場合、 すでにフォルダAが作成されていたら、何もしない - 注意点 - 任意のOSコマンドやスクリプトを実行する モジュール(shellモジュール)には冪等性が無い
  16. Ansibleの構成要素 - Inventory - 管理対象のホストの管理ファイル - Playbook - 構成定義ファイル - 利用するモジュールを指定し、構成を定義する - Module - Ansibleの機能単位(ライブラリみたいなもの) - ansible.cfg - Ansible自体の設定ファイル
  17. [1] 5分でわかるAnsible [2] AWS + Ansible + Windows Serverを組み合わせた   プロビジョニングの話 話すこと
  18. やりたいこと Ansibleで EC2インスタンスの作成から Windows Serverの初期構築まで 全部やる
  19. やりたいこと せっかくなので AnsibleではなくAnsible AWXで 一歩進んだプロビジョニングを
  20. 構成図 Provisioning Ansible AWX Windows Playbook Parameter File GitHub Operation Ojisan AWX Console Slack Notify Notify
  21. 構成図 Provisioning Ansible AWX Windows Playbook Parameter File GitHub Operation Ojisan AWX Console Slack Notify Notify (1) (2) (3) (4)
  22. 登場人物 - Amazon EC2 - Ansible AWX(コントローラー) - Windows Server 2016(管理対象) - Ansible AWX - プロビジョニング、実行結果の通知を送信 - GitHub - プロビジョニングに必要なファイル群を管理 - Slack - 実行結果の通知を受信(from Ansible AWX)
  23. Ansible AWX Ansibleに “エンタープライズ向けの機能” を追加したツール (コンテナ上で動きます) 商用製品「Ansible Tower」の アップストリーム版がAnsible AWX (OSS) 新機能を開発するためのアップストリームなので、 割とバグが潜んでいます!リスクを承知の上で利用してね! 【参考】AWX と Red Hat Ansible Tower の比較 https://www.redhat.com/ja/resources/awx-and-ansible-tower-datasheet
  24. Ansible AWX の用語(超概要) - ジョブテンプレート - Playbookを実行するためのパラメータセット - ワークフローテンプレート - 複数のジョブテンプレートから構成されたフロー - ジョブ - ジョブテンプレート、ワークフローテンプレートの実行単 位
  25. ジョブテンプレート
  26. ジョブテンプレート 実行するPlaybookPlaybookの取得元接続先 接続先の認証情報 Playbook外で定義する変数(extra-vars)
  27. Ansible AWXが持つ機能 - Webブラウザベースのインターフェース(GUI) - Playbookの実行履歴の管理 - ユーザー管理(アクセス制御) - 認証情報の管理 - SCM連携 - REST API - スケジューリング - ワークフロー - 通知 一歩進むために必要な機能だよ
  28. Ansible AWXが持つ機能 - Webブラウザベースのインターフェース(GUI) - Playbookの実行履歴の管理 - ユーザー管理(アクセス制御) - 認証情報の管理 - SCM連携 - REST API - スケジューリング - ワークフロー - 通知 一歩進むために必要な機能だよ
  29. Ansible AWXが持つ機能 - 認証情報の管理 - 管理対象リソースへ接続する際の認証情報を管理 - AWSのアクセスキー - Windows Serverの認証情報 - パスワードは “暗号化された状態” で保持される - SCM連携 - ジョブテンプレート実行時に自動更新 - 常に “最新のPlaybook” で実行する - Playbook更新 + パラメータファイルの取得
  30. Ansible AWXが持つ機能 - ワークフロー - 複数のジョブテンプレートを繋げる - ワークフローテンプレート機能 - ジョブの実行結果に応じて処理を分岐させる - 通知 - ジョブの実行結果をSlackに通知 - Slack以外では、IRCやメール通知など
  31. シナリオ(超概要) - 下準備 - パラメータファイルを用意 - プロビジョニング - ワークフローテンプレートを実行 - 実行結果を通知 - 後作業 - 通知された実行結果を確認
  32. シナリオ(注意点) インスタンスを量産するのではなく 1台ずつ構築する場合のシナリオです
  33. シナリオ(注意点) シンプルなシナリオにしていますが Ansible ✖ AWS は もっと色々なことができます!
  34. やりたいこと(再掲) Ansibleで EC2インスタンスの作成から Windows Serverの初期構築まで 全部やる
  35. シナリオ(再掲) - 下準備 - パラメータファイルを用意 - プロビジョニング - ワークフローテンプレートを実行 - 実行結果を通知 - 後作業 - 通知された実行結果を確認 主に話すところ
  36. プロビジョニング部分の流れ 1. SCM連携 2. パラメータファイルを読み込む 3. ベースAMIの選択 4. EC2インスタンスを作成 5. Ansible AWX にホストを登録 6. パラメータファイルを読み込む 7. Windows Serverの初期構築 8. 実行結果を通知
  37. プロビジョニング部分の流れ Ansible AWXで、どう実装するかを話します (その他の話もします)
  38. プロビジョニング部分の流れ とりあえず Playbook毎にジョブテンプレートを分割
  39. プロビジョニング部分の流れ 1. SCM連携 2. パラメータファイルを読み込む 3. ベースAMIの選択 4. EC2インスタンスを作成 5. Ansible AWX にホストを登録 6. パラメータファイルを読み込む 7. Windows Serverの初期構築 8. 実行結果を通知 ジョブテンプレート(1) ジョブテンプレート(2)
  40. ジョブテンプレートを分けている理由 部品化
  41. プロビジョニング部分の流れ - 各ジョブテンプレートとSCM連携、ホスト登録処理を “ワークフ ローテンプレート” で繋げて一本化する (1) SCM連携 (2) EC2インスタンス作成 (4) Windows Server初期構築 (3) ホスト登録 ジョブテンプレート(1) ジョブテンプレート(2)
  42. プロビジョニング部分の流れ 1. SCM連携 2. パラメータファイルを読み込む 3. ベースAMIの選択 4. EC2インスタンスを作成 5. Ansible AWX にホストを登録 6. パラメータファイルを読み込む 7. Windows Serverの初期構築 8. 実行結果を通知 ジョブテンプレート(1) ジョブテンプレート(2) (2) EC2インスタンス作成 (4) Windows Server初期構築
  43. プロビジョニング部分の流れ 1つずつ、話していきます
  44. プロビジョニング部分の流れ 1. SCM連携 2. パラメータファイルを読み込む 3. ベースAMIの選択 4. EC2インスタンスを作成 5. Ansible AWX にホストを登録 6. パラメータファイルを読み込む 7. Windows Serverの初期構築 8. 実行結果を通知 ジョブテンプレート(1) ジョブテンプレート(2) (2) EC2インスタンス作成 (4) Windows Server初期構築
  45. SCM連携 - Ansible AWXはPlaybookの取得元を指定できる - “プロジェクト” にて取得元の情報を定義する - プロジェクト = Playbookを管理する単位 - 取得元として設定できる場所 - 外部SCM(Git, Subversion等) - ローカルディレクトリ 今回はGitHub ローカルのGitLabとも連携可能
  46. SCM連携 - プロジェクト設定画面 Gitを指定 URL, ブランチなど ジョブ起動時に自動更新
  47. プロビジョニング部分の流れ 1. SCM連携 2. パラメータファイルを読み込む 3. ベースAMIの選択 4. EC2インスタンスを作成 5. Ansible AWX にホストを登録 6. パラメータファイルを読み込む 7. Windows Serverの初期構築 8. 実行結果を通知 ジョブテンプレート(1) ジョブテンプレート(2) (2) EC2インスタンス作成 (4) Windows Server初期構築
  48. パラメータファイルを読み込む - インスタンス毎にパラメータファイルを用意し、 インスタンス固有のパラメータを定義する (パラメータファイルはGitHub上に用意しておく) - 一例 - インスタンスタイプ - 起動するサブネット - セキュリティグループ - IAMロール  etc…
  49. パラメータファイルを読み込む - パラメータファイルはPlaybook内で読み込む - 今回は パラメータファイル名 = ホスト名 にした ※ include_varsモジュール   ファイルの内容から変数を読み込むことが可能
  50. - パラメータファイルはPlaybook内で読み込む - 今回は パラメータファイル名 = ホスト名 にした パラメータファイルを読み込む ホスト名は変数から取得する...どこで定義する...?
  51. パラメータファイルを読み込む - どこでホスト名を定義する...? - Ansible AWXの “Survey機能” を利用する - Survey機能 - ジョブテンプレート実行時、ユーザーに 対話的に値を入力させる機能 - Survey機能を利用し、実行時にホスト名を定義
  52. パラメータファイルを読み込む - Survey機能の設定画面 ホスト名をテキストで入力させる 入力値を hostname という変数に代入
  53. パラメータファイルを読み込む - Survey機能 ジョブテンプレート実行時の画面 (1)
  54. パラメータファイルを読み込む - Survey機能 ジョブテンプレート実行時の画面 (2) 変数hostnameにホスト名がセットされた private_ip_addressは後ほど使用
  55. プロビジョニング部分の流れ 1. SCM連携 2. パラメータファイルを読み込む 3. ベースAMIの選択 4. EC2インスタンスを作成 5. Ansible AWX にホストを登録 6. パラメータファイルを読み込む 7. Windows Serverの初期構築 8. 実行結果を通知 ジョブテンプレート(1) ジョブテンプレート(2) (2) EC2インスタンス作成 (4) Windows Server初期構築
  56. - Windows ServerのAMIについて - 最新のWindows Updateを適用したAMIが利用可能 - 最新のAMI情報について - Parameter Storeの “パブリックパラメータ” で 最新のAMIの情報が公開されている - AnsibleのshellモジュールでAWS CLIを実行して AMI IDを取得し、モジュールのパラメータに渡す パブリックパラメータの使用 - AWS Systems Manager https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/parameter-store-public-parameters.html ベースAMIの選択
  57. ベースAMIの選択 - 実行するコマンド - 実行結果 --queryオプションを使用し、AMI IDのみ出力する
  58. ベースAMIの選択 - Playbookに書き起こす latest_ami_id という変数にAWS CLIの実行結果を格納
  59. ベースAMIの選択 - Playbookを実行してみる(確認) AMI IDが取得できている
  60. 【余談】ゴールデンイメージを作成しないの? - パイプラインのメンテナンスが面倒問題 - 更新され続けるゴールデンイメージ(AMI) - 知らぬ間に “ナニカ” が混ざり込んだらどうする問題 - この問題を考えたくない - Ansibleを使えばOS初期構築は簡単にできる! - それなら起動する度に構築すればええやん!(安直)
  61. プロビジョニング部分の流れ 1. SCM連携 2. パラメータファイルを読み込む 3. ベースAMIの選択 4. EC2インスタンスを作成 5. Ansible AWX にホストを登録 6. パラメータファイルを読み込む 7. Windows Serverの初期構築 8. 実行結果を通知 ジョブテンプレート(1) ジョブテンプレート(2) (2) EC2インスタンス作成 (4) Windows Server初期構築
  62. EC2インスタンスを作成する...その前に! - AnsibleからWindowsを操作には、WinRMの有効化が必須 - セットアップ用のPowerShellスクリプトが公開されているので、 ユーザーデータ内でダウンロードし、実行する 【下準備用のスクリプト】 ansible/ConfigureRemotingForAnsible.ps1 at devel · ansible/ansible · GitHub https://github.com/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1
  63. EC2インスタンスを作成する...その前に! - ユーザーデータはファイルとして用意しておき、 モジュールのパラメータに渡す - ユーザーデータの中身 スクリプトをダウンロード スクリプトを実行
  64. EC2インスタンスを作成する...その前に! - ユーザーデータでAdministratorのパスワードを変更する - WindowsのAdministratorの初期パスワードは インスタンス毎に異なる - Ansible AWXの “認証情報” 機能で管理している ユーザーID/パスワードを使用したいため、 インスタンス起動時に変更し、統一する
  65. EC2インスタンスを作成する...その前に! - ユーザーデータでAdministratorのパスワードを変更する パスワード、ベタ書き😇
  66. EC2インスタンスを作成する...その前に! - ユーザーデータでAdministratorのパスワードを変更する ユーザーデータはAWSコンソールから 参照可能であるため、パスワードは 丸見えになってしまう・・・
  67. EC2インスタンスを作成する...その前に! - 認証情報の設定画面 パスワードは暗号化されて保存される (管理者でも参照不可)
  68. EC2インスタンスを作成 - ec2_instanceモジュールを使用して作成する 最新AMIのAMI IDが格納されている ユーザーデータを定義したファイル
  69. 【余談】EC2インスタンスを作成 - EC2を管理するためのモジュールは2種類ある どう使い分けるか・・・? - ec2モジュール - EC2インスタンスを量産したい場合に使用 - ec2_instanceモジュール - ec2モジュールでは設定できない EC2の細かい設定をしたい場合に使用 - CPUオプションを指定する場合など
  70. ジョブテンプレート(1) で実行されるPlaybook 再利用性を高めるため、Role化 事前タスクでパラメータファイル読み込み
  71. プロビジョニング部分の流れ 1. SCM連携 2. パラメータファイルを読み込む 3. ベースAMIの選択 4. EC2インスタンスを作成 5. Ansible AWX にホストを登録 6. パラメータファイルを読み込む 7. Windows Serverの初期構築 8. 実行結果を通知 ジョブテンプレート(1) ジョブテンプレート(2) (2) EC2インスタンス作成 (4) Windows Server初期構築
  72. Ansible AWX にホストを登録 - Ansibleから管理したいホストをAnsibleに登録する - 今回は “ダイナミックインベントリ” を利用 - クラウド等で動的にホストの台数、構成が変化する 環境で、柔軟にホストを管理したい場合に有用な機能 (今回のシナリオでは有用か?と言われると微妙) - EC2インスタンスに付けられたタグでフィルターし、 管理対象を絞り込むことも可能
  73. Ansible AWX にホストを登録 - ダイナミックインベントリの設定画面 タグでフィルター、管理対象のインスタンスを絞り込む スクリプトを開発すれば構成管理DBとの連携も可能
  74. プロビジョニング部分の流れ 1. SCM連携 2. パラメータファイルを読み込む 3. ベースAMIの選択 4. EC2インスタンスを作成 5. Ansible AWX にホストを登録 6. パラメータファイルを読み込む 7. Windows Serverの初期構築 8. 実行結果を通知 ジョブテンプレート(1) ジョブテンプレート(2) (2) EC2インスタンス作成 (4) Windows Server初期構築
  75. パラメータファイルを読み込む - EC2インスタンス作成時に読み込んだけど・・・? - 変数は “同一ジョブ内(Playbook内)” でのみ有効 - EC2インスタンス作成、Windows Server初期構築 それぞれでジョブテンプレート(ジョブ)を 分けているため、ジョブ毎に読み込む必要がある
  76. プロビジョニング部分の流れ 1. SCM連携 2. パラメータファイルを読み込む 3. ベースAMIの選択 4. EC2インスタンスを作成 5. Ansible AWX にホストを登録 6. パラメータファイルを読み込む 7. Windows Serverの初期構築 8. 実行結果を通知 ジョブテンプレート(1) ジョブテンプレート(2) (2) EC2インスタンス作成 (4) Windows Server初期構築
  77. Windows Serverの初期構築 - 時間の都合上、初期構築の詳細は割愛します🙏 詳しく知りたい方は・・・(過去登壇資料) Happy Windows Automation with Ansible(Ansible Night in Osaka 2019.05) https://www.slideshare.net/sugoto/happy-windows-automation-with-ansible - Ansible ✖ Windows は相性が悪いように思われがち ですが・・・実際、できることはかなり多い - Windowsモジュールは増え続けている Windows modules — Ansible Documentation https://docs.ansible.com/ansible/latest/modules/list_of_windows_modules.html
  78. Windows Serverの初期構築 Ansible ✖ Windowsの事例は少ない気がするが・・・ AWS SummitのWindows関連セッションにて 「WindowsシステムをAWSに移行する顧客は増えている!」 と聞いたので、今後も需要はあるはず!(確信)
  79. ジョブテンプレート(2) で実行されるPlaybook 実行するホストを指定 実行時に定義した変数はここで使用 (変数:private_ip_address) ホストと通信可能になるまで待機 このtaskを入れないと大抵コケます 重要
  80. ジョブテンプレート(2) で実行されるPlaybook 実行するホストを指定 実行時に定義した変数はここで使用 (変数:private_ip_address) ホストと通信可能になるまで待機 このtaskを入れないと大抵コケます 他に方法がないか 模索中・・・
  81. プロビジョニング部分の流れ 1. SCM連携 2. パラメータファイルを読み込む 3. ベースAMIの選択 4. EC2インスタンスを作成 5. Ansible AWX にホストを登録 6. パラメータファイルを読み込む 7. Windows Serverの初期構築 8. 実行結果を通知 ジョブテンプレート(1) ジョブテンプレート(2) (2) EC2インスタンス作成 (4) Windows Server初期構築
  82. 実行結果を通知 - 通知の設定画面 チャネルとトークンを設定 “Slack” を選択
  83. 実行結果を通知 - Slackへの通知 - ジョブの成功、失敗を確認できる - 通知はジョブテンプレート毎に設定する リンクを開くと、実行結果の詳細が見れる
  84. 実行結果の詳細(リンク先のページ) -
  85. 本編はここまで おさらい
  86. 構成図(おさらい) Provisioning Ansible AWX Windows Playbook Parameter File GitHub Operation Ojisan AWX Console Slack Notify Notify (1) (2) (3) (4)
  87. プロビジョニング部分の流れ(おさらい) 1. SCM連携 2. パラメータファイルを読み込む 3. ベースAMIの選択 4. EC2インスタンスを作成 5. Ansible AWX にホストを登録 6. パラメータファイルを読み込む 7. Windows Serverの初期構築 8. 実行結果を通知
  88. プロビジョニング部分の流れ(おさらい) - 各ジョブテンプレートとSCM連携、ホスト登録処理を “ワークフ ローテンプレート” で繋げて一本化する (1) SCM連携 (2) EC2インスタンス作成 (4) Windows Server初期構築 (3) ホスト登録 ジョブテンプレート ジョブテンプレート
  89. プロビジョニング部分の流れ(おさらい) 1. SCM連携 2. パラメータファイルを読み込む 3. ベースAMIの選択 4. EC2インスタンスを作成 5. Ansible AWX にホストを登録 6. パラメータファイルを読み込む 7. Windows Serverの初期構築 8. 実行結果を通知 ジョブテンプレート ジョブテンプレート (2) EC2インスタンス作成 (4) Windows Server初期構築
  90. おさらいここまで 補足、参考資料
  91. 【補足】通知機能について - 「通知」のON/OFFはジョブテンプレート毎に設定 できるため、ジョブテンプレート(1), (2)それぞれで 実行結果を通知させることが可能です - 通知のON/OFFはジョブの開始、成功、失敗で設定可能 - 通知が設定できるもの(一部) - ジョブテンプレート - ワークフローテンプレート - プロジェクト - インベントリのソース
  92. 【補足】REST API経由での実行 今回のシナリオではワークフローテンプレートを 手動実行しましたが、REST API経由でも実行できます つ ま り Ansibleをシステムに組み込めます!
  93. 【参考】AWXをデプロイするCFnテンプレート - Ansible AWXをAWS上にデプロイするための CloudFormationテンプレートが公開されている - クイックスタートガイドあり(英語) - ECSクラスタ、RDS等が作成される...課金に注意! - 参考 - AWS での AWX - クイックスタート https://aws.amazon.com/jp/quickstart/architecture/awx/ - GitHub - aws-quickstart/quickstart-awx: AWS Quick Start Team https://github.com/aws-quickstart/quickstart-awx
  94. 【参考】過去資料 Ansible AWXについて、もっと知りたい! Ansible AWXを導入してみた(Ansible Night in Nagoya 2019.02) https://www.slideshare.net/sugoto/ansible-awx Ansible ✖ Windowsについて、もっと知りたい! Happy Windows Automation with Ansible(Ansible Night in Osaka 2019.05) https://www.slideshare.net/sugoto/happy-windows-automation-with-ansible
  95. Ansibleコミュニティ - Ansible ユーザー会 - connpass https://ansible-users.connpass.com/ - Slack(参加リンク) http://bit.ly/slack-ansiblejp - イベント - Ansible Night(LT、やってみた系セッション) - Ansibleもくもく会(ほぼ月1開催) - サーバー編、ネットワーク編
  96. Ansibleコミュニティ - Ansible ユーザー会 - connpass https://ansible-users.connpass.com/ - Slack(参加リンク) http://bit.ly/slack-ansiblejp - イベント - Ansible Night(LT、やってみた系セッション) - Ansibleもくもく会(ほぼ月1開催) - サーバー編、ネットワーク編 次回 7/30 開催! リモート参加枠あり!
  97. Ansibleコミュニティ - Ansible ユーザー会 - connpass https://ansible-users.connpass.com/ - Slack(参加リンク) http://bit.ly/slack-ansiblejp - イベント - Ansible Night(LT、やってみた系セッション) - Ansibleもくもく会(ほぼ月1開催) - サーバー編、ネットワーク編 リモート参加枠あり! 名古屋からでも!👌
  98. 作成 @fideleruuth
  99. Happy Automation ! ご清聴、ありがとうございました!
Advertisement