Slide 1

Slide 1 text

Interact 2019 Ansible による Azure 構成管理 ひよこでもわかる Ansible Kento Yagisawa (@hiyoko_taisa) Technical Support Engineer Red Hat 1 ×

Slide 2

Slide 2 text

自己紹介 Agenda 2 八木澤 健人 (やぎさわ けんと) ITエンジニア 7年目 (昨年3月にTwitter転職しました) Ansible Engine / Ansible Tower のテクニカルサポートをしています @hiyoko_taisa https://github.com/hiyokotaisa

Slide 3

Slide 3 text

本日のおしながき Agenda 3 1. Ansibleのおさらい 2. Azureのおさらい 3. AnsibleからAzureを操作する 4. Dynamic Inventoryを活用してみる 5. Ansible Tower(AWX)からAzureを活用する

Slide 4

Slide 4 text

What is Ansible? 4 のおさらい

Slide 5

Slide 5 text

Ansibleとは? What is Ansible 5 ● Red Hatとコミュニティが開発している構成管理ツール ● 学習コストの低いYAML形式のPlaybook ● 冪等性(べきとうせい)を保った変更 ● 多種多様な環境に対応 (Linux/Windows/Network/etc…) ● エージェントレス ● 最新バージョンは2.8.1

Slide 6

Slide 6 text

Ansibleの動作イメージ What is Ansible 6 SSH / WinRM / etc...

Slide 7

Slide 7 text

Ansibleの動作イメージ What is Ansible 7 Inventory host_A host_B ... Playbook test.yml 1. スクリプトを転送 host_A 3.結果を返却 Connection Plugin Modules 2.実行

Slide 8

Slide 8 text

What is Azure? 8 のおさらい

Slide 9

Slide 9 text

Azureとは? What is Azure? 9 ● Microsoftが提供するパブリッククラウドプラットフォーム ● 100を超えるサービス ○ Azure Virtual Maches ○ Azure SQL Database ○ Azure Cosmos DB ○ Azure Active Directory(Azure AD) ○ etc...

Slide 10

Slide 10 text

What is Azure? 10

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

Azureを操作するとは? Managing Azure from Ansible 12 ● Azure上のリソース管理 → azure_rm_* モジュール ● Azure VM上のインスタンスに接続 → Dynamic Inventory

Slide 13

Slide 13 text

Azure関連モジュール Managing Azure from Ansible 13 146 モジュール (2019年6月29日時点)

Slide 14

Slide 14 text

Managing Azure from Ansible 14

Slide 15

Slide 15 text

事前準備 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]'

Slide 16

Slide 16 text

事前準備 Agenda 16 ● Azure用の認証情報 ○ Service Principalを利用 https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal ○ ADのユーザー名/パスワード ※2FAは利用不可

Slide 17

Slide 17 text

Service Principal Agenda 17 ● 必要な認証情報 Client ID Tenant ID Secret Key Subscription ID

Slide 18

Slide 18 text

Agenda 18

Slide 19

Slide 19 text

Agenda 19

Slide 20

Slide 20 text

Agenda 20

Slide 21

Slide 21 text

Agenda 21

Slide 22

Slide 22 text

Agenda 22

Slide 23

Slide 23 text

Agenda 23

Slide 24

Slide 24 text

Agenda 24

Slide 25

Slide 25 text

認証情報を定義する Agenda 25 ● 下記のどれかに定義 ○ 環境変数 ○ Playbook内の各taskのパラメーター ○ ファイルに定義

Slide 26

Slide 26 text

環境変数に定義する Agenda 26 ● AZURE_CLIENT_ID ● AZURE_SECRET ● AZURE_SUBSCRIPTION_ID ● AZURE_TENANT

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

ファイルに定義する(検証用) 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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

azure_rm_virtualnetwork Agenda 31 ● Virtual Networkを作成する azure_rm_virtualnetwork: resource_group: Testing name: testvn001 address_prefixes: "10.10.0.0/16"

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

azure_rm_publicipaddress Agenda 33 ● Public IP addressを作成する azure_rm_publicipaddress: resource_group: Testing allocation_method: Static name: publicip001

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

Inventoryファイルをつくる Agenda 37 ● hosts localhost ansible_connection=local

Slide 38

Slide 38 text

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: ...

Slide 39

Slide 39 text

Managing Azure from Dynamic Inventory 39

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

Dynamic Inventoryとは? What is Ansible 41 ● インベントリ情報をAPIから動的に取得する ● 実体はPythonスクリプト ● AWS/Azure/vCenter/OpenStackなど https://docs.ansible.com/ansible/latest/user_guide/intro_dynamic_inventory.html

Slide 42

Slide 42 text

なにがうれしい? What is Ansible 42 ● 都度かわるインスタンス情報をスマートに管理できる (いちいちインベントリを書き換えなくてよい) ● 既存のインベントリ管理ソースを使える(vCenterとか)

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

Dynamic Inventoryを指定する What is Ansible 44 ● 通常のインベントリと指定方法は同じ $ ansible-playbook -i azure_rm.py createvm.yml

Slide 45

Slide 45 text

Managing Azure from Ansible Tower (AWX) 45 から を活用する

Slide 46

Slide 46 text

Ansible Towerとは? What is Ansible 46 ● Red Hatが開発するAnsible用オーケストレーションツール ● Web UIによる管理 ● 権限管理(RBAC) ● Git等のVCSとの統合 ● ワークフローの作成

Slide 47

Slide 47 text

AWXとは? What is Ansible 47 ● Ansible Tower のアップストリームプロジェクト ● 最新の機能が導入され、安定したものがAnsible Towerへ ● コンテナ環境必須 ● エンタープライズな環境にはAnsible Towerがオススメ

Slide 48

Slide 48 text

なにがうれしい? What is Ansible Tower? 48 ● 認証情報やPlaybookを一元管理できる ● 実行結果を一元管理できる ● 強力な権限管理 ● LDAPやSSOによるユーザー管理 ● Splunk等へのexternal logging ● virtualenvを使って複数のAnsibleバージョンを 共存させられる

Slide 49

Slide 49 text

Managing Azure from Dynamic Inventory 49

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

Ansible Lightbulb What is Ansible Tower? 51 ● 各種教材やデモ用のリソース https://github.com/ansible/lightbulb Ansibleもくもく会でも同様の教材を使っています もくもく会にも遊びにきてください!

Slide 52

Slide 52 text

52 Ansibleで Happy Automation!

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

Managing Azure from Dynamic Inventory 54 おまけ

Slide 55

Slide 55 text

Ansible 2.8 x Windows 55 Ansible 2.8で追加された新機能 ● Connection PluginにSSHを指定可能 (Experimental Support) ● 新モジュール: ○ win_user_profile ○ win_partition ○ win_psrepository

Slide 56

Slide 56 text

Ansible 2.8 x Windows 56 ようこそSSH! (ベータだけど)

Slide 57

Slide 57 text

Ansible 2.8 x Windows 57 従来: WinRMによる接続 ● HTTPS/HTTPベースの独自プロトコル ● ansible_connection: winrm を指定する ● Remote Management Serviceの有効化などの事前設定が必要 WinRM(WS-Management) HTTPS / HTTP Windows

Slide 58

Slide 58 text

Ansible 2.8 x Windows 58 SSHによる接続 ● Linux/Unixなどで広く使われてきたプロトコル ● WinRMと比較してオーバーヘッドが少ない ● ansible_connection: ssh を指定する ● Windows側にOpenSSHのインストールが必要 Win32-OpenSSH SSH Windows

Slide 59

Slide 59 text

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など)

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

Ansible 2.8 x Windows 61 Playbook

Slide 62

Slide 62 text

Ansible 2.8 x Windows 62 実行結果

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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