読者です 読者をやめる 読者になる 読者になる

dehio3’s diary

仕事、生活、趣味のメモ

mac(OS EI Capitan)からansibleを使ってEC2の作成

前回からの続き

dehio3.hatenablog.com

EC2を操作するためのansibleモジュールの追加

ansibleのEC2機能は、PythonのBotoライブラリが必要。

以下を実行する必要がる。

sudo pip install boto
そもそもpipって?

pip - Wikipedia

pipはPythonで書かれたパッケージソフトウェアをインストール・管理するためのパッケージ管理システムである。多くのPythonパッケージは、Python Package Index(PyPI)上にある。
pipはPython 2.7.9 以降、Python 3.4以降からデフォルトで付属するようになった。

pythonのバージョンを確認。

$ python --version
Python 2.7.10

実行。

$ sudo pip install boto
sudo: pip: command not found

ないじゃん。

こちらを参考に標準のPythonではなくbrew版のPythonを導入してみることに。

MacでPython使う時の最低限のメモ(Homebrew編) - Qiita

ちなみにansibleが対応しているバージョンは Python 2.6 or 2.7

http://docs.ansible.com/ansible/intro_installation.html#control-machine-requirements

事前のパス確認。

$ which python
/usr/bin/python

インストール。

$ brew install python

インストール確認。

$ which python
/usr/local/bin/python
$ python --version
Python 2.7.10

botoインストール。

$ sudo pip install boto
Collecting boto
  Downloading boto-2.42.0-py2.py3-none-any.whl (1.3MB)
    100% |████████████████████████████████| 1.4MB 922kB/s 
Installing collected packages: boto
Successfully installed boto-2.42.0

できた。

playbookを作成

こちらを参考に作成。

dev.classmethod.jp

playbook実行。

$ ansible-playbook -i hosts playbook.yml 

PLAY [Create a sandbox instance] ***********************************************

TASK [Launch instance] *********************************************************
fatal: [localhost -> localhost]: FAILED! => {"changed": false, "failed": true, "msg": "boto required for this module"}

NO MORE HOSTS LEFT *************************************************************
 [WARNING]: Could not create retry file 'playbook.retry'.         [Errno 2] No
such file or directory: ''


PLAY RECAP *********************************************************************
localhost                  : ok=0    changed=0    unreachable=0    failed=1   

こけた!

対応。

 echo "localhost ansible_python_interpreter=`which python`" > hosts

再実行。

$ ansible-playbook -i hosts playbook.yml 

PLAY [Create a sandbox instance] ***********************************************

TASK [Launch instance] *********************************************************
fatal: [localhost -> localhost]: FAILED! => {"changed": false, "failed": true, "msg": "Region ap-northeast-1a does not seem to be available for aws module boto.ec2. If the region definitely exists, you may need to upgrade boto or extend with endpoints_path"}

NO MORE HOSTS LEFT *************************************************************
 [WARNING]: Could not create retry file 'playbook.retry'.         [Errno 2] No
such file or directory: ''


PLAY RECAP *********************************************************************
localhost                  : ok=0    changed=0    unreachable=0    failed=1   

こけた!

直訳。

リージョンAP-北東-1aは、AWSモジュールboto.ec2のために利用可能であるように思えません。地域は間違いなく存在する場合は、のbotoをアップグレードするか、endpoints_pathに拡張する必要があるかもしれません

playbookの「region」の設定値を既存のインスタンスアベイラビリティーゾーンをコピペしてた。 最後の「a」が入らない。

region: ap-northeast-1a

再実行。

$ ansible-playbook -i hosts playbook.yml 

PLAY [Create a sandbox instance] ***********************************************

TASK [Launch instance] *********************************************************
fatal: [localhost -> localhost]: FAILED! => {"changed": false, "failed": true, "msg": "No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV4Handler'] Check your credentials"}

NO MORE HOSTS LEFT *************************************************************
 [WARNING]: Could not create retry file 'playbook.retry'.         [Errno 2] No
such file or directory: ''


PLAY RECAP *********************************************************************
localhost                  : ok=0    changed=0    unreachable=0    failed=1   

こけた。。

クレデンシャル確認しろって言ってるけど、そもそもクレデンシャルが何なのか理解してなかった。

そういえばansibleでEC2作成するサイト見ていると、APIの接続情報を環境変数で設定してたりしてた。

AWS_ACCESS_KEY_ID=アクセスキー
AWS_SECRET_ACCESS_KEY=シークレットアクセスキー

そもそもIAMユーザ作成していなかったので作成。

この辺りを参考に作成。

dev.classmethod.jp

キー情報を設定。

$ export AWS_ACCESS_KEY_ID=アクセスキー
$ export AWS_SECRET_ACCESS_KEY=シークレットアクセスキー

再実行。

$ ansible-playbook -i hosts playbook.yml 

成功!!

コンソール画面からも新しいEC2インスタンスが作成されている事を確認!!

f:id:dehio3:20160922161648p:plain

尚、アクセスキーの情報は環境変数以外でもファイルで定義しておくことも可能らしい。

botoの設定ファイルについて - はっぱのこの日々

$ cat ~/.boto
[Credentials]
AWS_SECRET_ACCESS_KEY=アクセスキー
AWS_ACCESS_KEY_ID=シークレットアクセスキー

大変勉強になりました。。

ちなみに

職場のansible環境で実行するとEC2は作成されるが、今回のように起動状態にはなってくれない事象が発生している。。

boto 周りの問題なのかな・・・?

明日botoのバージョンをとりあえず確認してみよう!!

$ sudo pip list | grep boto
boto (2.42.0)