前回からの続き
EC2を操作するためのansibleモジュールの追加
ansibleのEC2機能は、PythonのBotoライブラリが必要。
以下を実行する必要がる。
sudo pip install boto
そもそもpipって?
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を作成
こちらを参考に作成。
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ユーザ作成していなかったので作成。
この辺りを参考に作成。
キー情報を設定。
$ export AWS_ACCESS_KEY_ID=アクセスキー $ export AWS_SECRET_ACCESS_KEY=シークレットアクセスキー
再実行。
$ ansible-playbook -i hosts playbook.yml
成功!!
コンソール画面からも新しいEC2インスタンスが作成されている事を確認!!
尚、アクセスキーの情報は環境変数以外でもファイルで定義しておくことも可能らしい。
$ cat ~/.boto [Credentials] AWS_SECRET_ACCESS_KEY=アクセスキー AWS_ACCESS_KEY_ID=シークレットアクセスキー
大変勉強になりました。。
ちなみに
職場のansible環境で実行するとEC2は作成されるが、今回のように起動状態にはなってくれない事象が発生している。。
boto 周りの問題なのかな・・・?
明日botoのバージョンをとりあえず確認してみよう!!
$ sudo pip list | grep boto boto (2.42.0)