GCEインスタンス上で、`auth_kind: machineaccount`設定でAnsibleを走らせる


はじめに

gcp_compute等のプラグインを利用してGCEに対してAnsibleでアクセスしたい場合には、公式ガイドにあるようにService Accountのjsonを発行し、適当な場所に配置することを求められます。
しかし、Ansibleを実行する環境がGCEインスタンス、もしくはGCPのCloud Shellの場合、Service Accountをインスタンスに紐付けることが可能であり、これを利用して実行することが可能です。

本記事では、Service Accountのjsonを発行せずにAnsibleでGCEインスタンスを操作するための設定を説明します。

前提条件

  • pip install ansible requests google-auth が実行済である
  • 実行するインスタンスにService Accountが紐付いている
  • 紐付いているService Accountには「Compute 閲覧者」の役割を与えられている
    • 今回実行するコマンドに対して必要な権限。やりたいことに応じて権限は適宜変更すること

TL;DR

任意のディレクトリに以下のファイルを準備してください。
{}で囲われている部分については適宜編集してください。

なお、ファイル名について以下の条件があります:

  • ansible.cfgは固定
  • foobar.gcp.ymlは拡張子に当たる.gcp.ymlは固定

また、foobar.gcp.ymlについて、service_account_emailを設定していないと走りません。(罠)

ansible.cfg
[inventory]
enable_plugins = gcp_compute
foobar.gcp.yml
plugin: gcp_compute
projects:
  - {HOGE_PROJECT}
  - ...
zones:
  - {FUGA_ZONE}
  - ...
auth_kind: machineaccount
hostnames:
  - name
service_account_email: default

準備ができたら、ansible-inventory --list -i foobar.gcp.ymlを実行してください。
Ansibleを使用して構成する準備ができたGCEインスタンスのリストが作成されます。

Enjoy!!!!

参考文献