EC2でwindowsインスタンスを作って、Ansibleで操作できるようにセットアップした


ansibleでwindows向けのplaybookを作る機会があったので、手軽にテストできるようにansibleで操作可能なwindowsインスタンスをEC2で作成した。そのときの手順をまとめた。

AWSにWindowsServerインスタンスを作成

"Microsoft Windows Server 2016 Base - ami-04f188a745c1a5ecb"で検証を行った。

インスタンス作成時に注意しておくことは次の3点

  • 「セキュリティグループの設定」のインバウンド設定で、RDPとWinRM-HTTPSのポートを開けておく。
  • キーペアの登録は必ず行う。
  • 「インスタンスの詳細設定」の「高度な詳細」>「ユーザーデータ」に次の内容をコピペしておく。これにより、インスタンス起動時にpowershellでスクリプトが実行され、AnsibleがWindowsServerと通信するために必要な、WindowsServer側のセットアップが完了する。このスクリプトは、Ansibleの公式ドキュメント Setting up a Windows Host を参考にした。
<powershell>
$url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"
$file = "$env:temp\ConfigureRemotingForAnsible.ps1"
(New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
powershell.exe -ExecutionPolicy ByPass -File $file
</powershell>

ちなみに、上記の設定はあまり安全とはいえない設定(Basic認証など)を有効にしているので、本番環境ではこのまま使わないほうがいい。

inventoryファイルの作成

インスタンスができたら、「アクション」 > 「Windows パスワードの取得」 で、パブリックDNSユーザー名パスワードを取得する。

この情報を元に、inventoryファイルを作成する。

[windows2016]
<パブリックDNS> ansible_user=<ユーザー名> ansible_password=<パスワード> ansible_connection=winrm ansible_winrm_server_cert_validation=ignore

接続確認

$ ansible windows2016 -i ./inventory -m win_ping                                
ec2-13-231-151-252.ap-northeast-1.compute.amazonaws.com | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

起動テンプレートの作成

上記の設定で通信できることが確認できので、同じ設定でEC2の起動テンプレートを作成して、いつでも同じ設定のWindowsServerを素早く作れるようにした。