Interact 2019 -OP01: ひよこでもわかるAnsible AnsibleによるAzure構成管理

Interact 2019 -OP01: ひよこでもわかるAnsible AnsibleによるAzure構成管理

2019年6月29日に開催されたInteract 2019のスライド資料です。

Ca7f3070b0edb9ec3e1b5b5109920a8a?s=128

hiyokotaisa

June 29, 2019
Tweet

Transcript

  1. Interact 2019 Ansible による Azure 構成管理 ひよこでもわかる Ansible Kento Yagisawa

    (@hiyoko_taisa) Technical Support Engineer Red Hat 1 ×
  2. 自己紹介 Agenda 2 八木澤 健人 (やぎさわ けんと) ITエンジニア 7年目 (昨年3月にTwitter転職しました)

    Ansible Engine / Ansible Tower のテクニカルサポートをしています @hiyoko_taisa https://github.com/hiyokotaisa
  3. 本日のおしながき Agenda 3 1. Ansibleのおさらい 2. Azureのおさらい 3. AnsibleからAzureを操作する 4.

    Dynamic Inventoryを活用してみる 5. Ansible Tower(AWX)からAzureを活用する
  4. What is Ansible? 4 のおさらい

  5. Ansibleとは? What is Ansible 5 • Red Hatとコミュニティが開発している構成管理ツール • 学習コストの低いYAML形式のPlaybook

    • 冪等性(べきとうせい)を保った変更 • 多種多様な環境に対応 (Linux/Windows/Network/etc…) • エージェントレス • 最新バージョンは2.8.1
  6. Ansibleの動作イメージ What is Ansible 6 SSH / WinRM / etc...

  7. Ansibleの動作イメージ What is Ansible 7 Inventory host_A host_B ... Playbook

    test.yml 1. スクリプトを転送 host_A 3.結果を返却 Connection Plugin Modules 2.実行
  8. What is Azure? 8 のおさらい

  9. Azureとは? What is Azure? 9 • Microsoftが提供するパブリッククラウドプラットフォーム • 100を超えるサービス ◦

    Azure Virtual Maches ◦ Azure SQL Database ◦ Azure Cosmos DB ◦ Azure Active Directory(Azure AD) ◦ etc...
  10. What is Azure? 10

  11. Managing Azure from Ansible 11 から を操作する

  12. Azureを操作するとは? Managing Azure from Ansible 12 • Azure上のリソース管理 → azure_rm_*

    モジュール • Azure VM上のインスタンスに接続 → Dynamic Inventory
  13. Azure関連モジュール Managing Azure from Ansible 13 146 モジュール (2019年6月29日時点)

  14. Managing Azure from Ansible 14

  15. 事前準備 Managing Azure from Ansible 15 • 実行するノードにAzure SDK Moduleをインストール

    https://docs.ansible.com/ansible/latest/scenario_guides/guide_azure.html ※ Azure Cloud ShellからもAnsibleを実行できる Azure Cloud Shell の概要 https://docs.microsoft.com/ja-jp/azure/cloud-shell/overview $ pip install 'ansible[azure]'
  16. 事前準備 Agenda 16 • Azure用の認証情報 ◦ Service Principalを利用 https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal ◦

    ADのユーザー名/パスワード ※2FAは利用不可
  17. Service Principal Agenda 17 • 必要な認証情報 Client ID Tenant ID

    Secret Key Subscription ID
  18. Agenda 18

  19. Agenda 19

  20. Agenda 20

  21. Agenda 21

  22. Agenda 22

  23. Agenda 23

  24. Agenda 24

  25. 認証情報を定義する Agenda 25 • 下記のどれかに定義 ◦ 環境変数 ◦ Playbook内の各taskのパラメーター ◦

    ファイルに定義
  26. 環境変数に定義する Agenda 26 • AZURE_CLIENT_ID • AZURE_SECRET • AZURE_SUBSCRIPTION_ID •

    AZURE_TENANT
  27. Task内のパラメーターに定義する Agenda 27 - name: Power Off azure_rm_virtualmachine: resource_group: myResourceGroup

    name: testvm002 started: no client_id: xxxxxx secret: xxxx subscription_id: xxxx tenant: xxxx
  28. ファイルに定義する(検証用) Agenda 28 • $HOME/.azure/credentials [default] subscription_id=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx client_id=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx secret=xxxxxxxxxxxxxxxxx tenant=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

  29. Managing Azure from Dynamic Inventory 29 VMインスタンスを つくってみよう

  30. azure_rm_storageaccount Agenda 30 • ストレージアカウントを作成する azure_rm_storageaccount: resource_group: Testing name: hiyokotest

    account_type: Standard_LRS
  31. azure_rm_virtualnetwork Agenda 31 • Virtual Networkを作成する azure_rm_virtualnetwork: resource_group: Testing name:

    testvn001 address_prefixes: "10.10.0.0/16"
  32. azure_rm_subnet Agenda 32 • Virtual NetworkにSubnetを作成する azure_rm_subnet: resource_group: Testing name:

    subnet001 address_prefix: "10.10.0.0/24" virtual_network: testvn001
  33. azure_rm_publicipaddress Agenda 33 • Public IP addressを作成する azure_rm_publicipaddress: resource_group: Testing

    allocation_method: Static name: publicip001
  34. azure_rm_securitygroup Agenda 34 • セキュリティグループを作成する azure_rm_securitygroup: resource_group: Testing name: secgroup001

    rules: - name: SSH protocol: Tcp destination_port_range: 22 access: Allow priority: 101 direction: Inbound
  35. azure_rm_networkinterface Agenda 35 • NICを作成する azure_rm_networkinterface: resource_group: Testing name: testnic001

    virtual_network: testvn001 subnet: subnet001 public_ip_name: publicip001 security_group: secgroup001
  36. azure_rm_virtualmachine Agenda 36 • VMの作成・削除・起動・停止などができる azure_rm_virtualmachine: resource_group: Testing name: testvm

    vm_size: Standard_D1_v2 admin_username: test ssh_password_enabled: false image: offer: CentOS publisher: OpenLogic sku: '7.6' version: latest
  37. Inventoryファイルをつくる Agenda 37 • hosts localhost ansible_connection=local

  38. Playbookをつくる Agenda 38 • createvm.yml --- - hosts: localhost vars:

    tasks: - name: Create storage account azure_rm_storageaccount: resource_group: Testing name: hiyokotest account_type: Standard_LRS - name: Create virtual network azure_rm_virtualnetwork: ...
  39. Managing Azure from Dynamic Inventory 39

  40. Managing Azure from Dynamic Inventory 40 Dynamic Inventory を活用してみる

  41. Dynamic Inventoryとは? What is Ansible 41 • インベントリ情報をAPIから動的に取得する • 実体はPythonスクリプト

    • AWS/Azure/vCenter/OpenStackなど https://docs.ansible.com/ansible/latest/user_guide/intro_dynamic_inventory.html
  42. なにがうれしい? What is Ansible 42 • 都度かわるインスタンス情報をスマートに管理できる (いちいちインベントリを書き換えなくてよい) • 既存のインベントリ管理ソースを使える(vCenterとか)

  43. azure_rm.py What is Ansible 43 • Azure VM向けDynamic Inventory https://github.com/ansible/ansible/blob/devel/contrib/inventory/azure_rm.py

    • 設定ファイルは azure_rm.ini https://github.com/ansible/ansible/blob/devel/contrib/inventory/azure_rm.ini
  44. Dynamic Inventoryを指定する What is Ansible 44 • 通常のインベントリと指定方法は同じ $ ansible-playbook

    -i azure_rm.py createvm.yml
  45. Managing Azure from Ansible Tower (AWX) 45 から を活用する

  46. Ansible Towerとは? What is Ansible 46 • Red Hatが開発するAnsible用オーケストレーションツール •

    Web UIによる管理 • 権限管理(RBAC) • Git等のVCSとの統合 • ワークフローの作成
  47. AWXとは? What is Ansible 47 • Ansible Tower のアップストリームプロジェクト •

    最新の機能が導入され、安定したものがAnsible Towerへ • コンテナ環境必須 • エンタープライズな環境にはAnsible Towerがオススメ
  48. なにがうれしい? What is Ansible Tower? 48 • 認証情報やPlaybookを一元管理できる • 実行結果を一元管理できる

    • 強力な権限管理 • LDAPやSSOによるユーザー管理 • Splunk等へのexternal logging • virtualenvを使って複数のAnsibleバージョンを 共存させられる
  49. Managing Azure from Dynamic Inventory 49

  50. What is Ansible Tower! 50 Towerのデモ (動くように祈りましょう)

  51. Ansible Lightbulb What is Ansible Tower? 51 • 各種教材やデモ用のリソース https://github.com/ansible/lightbulb

    Ansibleもくもく会でも同様の教材を使っています もくもく会にも遊びにきてください!
  52. 52 Ansibleで Happy Automation!

  53. CONFIDENTIAL Designator linkedin.com/company/red-hat youtube.com/user/RedHatVideos facebook.com/redhatinc twitter.com/RedHat Red Hat is the

    world’s leading provider of enterprise open source software solutions. Award-winning support, training, and consulting services make Red Hat a trusted adviser to the Fortune 500. Thank you 53
  54. Managing Azure from Dynamic Inventory 54 おまけ

  55. Ansible 2.8 x Windows 55 Ansible 2.8で追加された新機能 • Connection PluginにSSHを指定可能

    (Experimental Support) • 新モジュール: ◦ win_user_profile ◦ win_partition ◦ win_psrepository
  56. Ansible 2.8 x Windows 56 ようこそSSH! (ベータだけど)

  57. Ansible 2.8 x Windows 57 従来: WinRMによる接続 • HTTPS/HTTPベースの独自プロトコル •

    ansible_connection: winrm を指定する • Remote Management Serviceの有効化などの事前設定が必要 WinRM(WS-Management) HTTPS / HTTP Windows
  58. Ansible 2.8 x Windows 58 SSHによる接続 • Linux/Unixなどで広く使われてきたプロトコル • WinRMと比較してオーバーヘッドが少ない

    • ansible_connection: ssh を指定する • Windows側にOpenSSHのインストールが必要 Win32-OpenSSH SSH Windows
  59. Ansible 2.8 x Windows 59 SSH接続手順 1. Win32-OpenSSHのインストール 参考: https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH

    2. sshd_configの設定変更 (必要に応じて) PATH: %programdata%\ssh\sshd_config 3. ansible_shell_type を指定 ( cmd | powershell ) Windows側のDefault Shell設定と一致している必要がある (デフォルトはcmd.exe) 注意事項: v7.9.0.0p1-Betaより以前のバージョンのOpenSSHは、 ansible_shell_type: powershell を指定できない。 (Windows Server 2019に同梱されているOpenSSHなど)
  60. Ansible 2.8 x Windows 60 Win32-OpenSSHのインストール Win32-OpenSSHのインストールは、ChocolateyもしくはAnsible GalaxyのRoleからも実行可能 $ ansible-galaxy

    install jborean93.win_openssh 参考: https://galaxy.ansible.com/jborean93/win_openssh
  61. Ansible 2.8 x Windows 61 Playbook

  62. Ansible 2.8 x Windows 62 実行結果

  63. Ansible 2.8 x Windows 63 SSHで接続していることが読み取れる

  64. Ansible 2.8 x Windows 64 参考資料 • Windows SSH Setup

    - Ansible https://docs.ansible.com/ansible/2.8/user_guide/windows_setup.html#windows-ssh-setup • Win32-OpenSSH https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH • Galaxy Role https://galaxy.ansible.com/jborean93/win_openssh