それなりに適当にやってます

なんとなくそれっぽいメモとか備忘録とか適当に。 2018年5月にブログ移転しました。 古い記事は未整理です。

AnsibleでGCEインスタンスを立ててみたメモ

Google Cloud Platform (以下、GCP) の プリエンティブルVMが値下げしたので、DigitalOcean を利用して構築していた一時的な検証環境をGCPへ引っ越すついでに、Ansibleを利用してGCEインスタンスの作成から設定まで行えるか簡単に試してみた。

参考URL

Ansible

以下、VirtualBox にインストールした、Xubuntu 16.04.01 LTS の環境で確認した。 pyenv, pyenv-virtualenv を用いて Ansible を実行する環境を整えるとこから。

依存パッケージのインストール

Xubuntu(Ubuntu)で Python をコンパイルするために必要となるパッケージをインストールしておく。

$ sudo apt install git python-pip make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev

pyenv+pyenv-virtualenv のインストールと設定

git clone で拾い、pyenvを使えるように環境変数などの設定を行う。

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile$ exit...(再ログイン)$ type pyenvpyenv is /home/<username>/.pyenv/bin/pyenv  

Python 2.7.x のインストール

Ansible はまだ Python3 系には対応していないので、 pyenv を用いて Python 2.7.x をインストールする。

$ pyenv install --list$ pyenv install 2.7.12          * 2016/08/18時点で 2.7.12 が2.7系の最新だった

Ansible用のPython環境の作成

この辺はお好みで。

$ mkdir ansible ; cd $_               * Ansible用のディレクトリ作成$ pyenv virtualenv 2.7.12 ansible     * 2.7.12をベースに、Ansible用の環境を作成$ pyenv local ansible                 * ~/ansible下は上記で作ったAnsible用の環境を利用$ pip freeze                 * モジュールが1つも出力されない事を確認

Ansbile のインストール

pip を用いてAnsbileをインストールする。

$ pip install ansible

Ansible を利用したGCEインスタンスを作成手順

ここからAnsibleのドキュメントを参考に環境を作成する。

追加モジュールのインストール

Ansible/GCEモジュールが依存する "apache-libcloud" をインストールする。

$ pip install apache-libcloud

GCP/IAM サービスアカウントの作成

GCPのIAMと管理でサービスアカウントを作成し、JSON形式の認証情報をダウンロードしてくる。

ダウンロードしたJSONは、Ansibleから参照出来る安全な場所に保管する。

例)$ mkdir ~/.gcp$ vi ~/.gcp/ansible.json...(取得していたJSONをコピペ)$ chmod -R 600 ~/.gcp/*

"secret.py" の作成

GCPへアクセスするための資格情報をAnsbileが利用する方法は、以下3通りあるらしい。

  • Playbook に直接記載する
  • "secrets.py" というファイルを作成し、環境変数 $PYTHONPATH で設置したパスを指定する
  • 環境変数で指定する

以降では secrets.py を作成して実行する方法を試す。 GCPへアクセスするためのアカウントや、JSONパス、プロジェクト名を記載した設定ファイル "secrets.py" を作成する。

$ vi ~/.gcp/secrets.py

記入例は以下の通り。

GCE_PARAMS = ('i...@project.googleusercontent.com', '/path/to/project.json')  GCE_KEYWORD_PARAMS = {'project': 'project_id'}  

インスタンスの作成例

Ansibleのドキュメントに書かれていた Playbook を参考に、インスタンスを起動するだけの内容を作成してみる。

$ vi gce.yaml
- name: example  hosts: localhost  gather_facts: no  connection: local  vars:    machine_type: n1-standard-1    image: centos-7  tasks:    - name: Launch instances      gce:          zone: asia-east1-c          instance_names: example          machine_type: "{{ machine_type }}"          image: "{{ image }}"          preemptible: true

環境変数 $PYTHONPATH に、 secrets.py を設置したパスをセットし、Playbook を実行する。

$ export PYTHONPATH=${HOME}/.gcp$ ansible-playbook gce.yaml

で、別途導入していた gcloud コマンドや、ブラウザで確認したら問題なく出来てた(´∀`∩) 毎回exportするのは面倒だから、別途シェルスクリプト経由で実行するようにした方が良いかな。

あとは Ansible Documentation: Cloud Modules に記載されたGoogle関連のモジュールで詳細確認しつつ実装するだけみたいな感じで。

以上