梅雨の季節がやって参りました。
Ansibleのs3
モジュールを使ってディレクトリごとアップロードする方法を覚え書きとして。
TOC
認証情報を環境変数に入れておく
Ansibleで使うAWSの認証情報はPlaybookに書き込むか
環境変数を使うかで選べます。
万が一のことを考えて環境変数で管理したほうが良いと思います。
export AWS_ACCESS_KEY="AK..." export AWS_SECRET_KEY="i8/..."
ファイルのアップロード
- name: Upload systemd script to s3 s3: bucket: BUCKET_NAME object: /script/startup-api.service src: /tmp/startup-api.service mode: put overwrite: true delegate_to: 127.0.0.1
ディレクトリごとアップロード(Ansible 2.3以降)
- name: Upload source code to s3 s3_sync: bucket: BUCKET_NAME key_prefix: source/ file_root: /tmp/sourcecode delegate_to: 127.0.0.1
key_prefix
がないとバケット直下にファイルが展開されちゃうので
key_prefix
を設定しておきます。
こうすると
BUCKET_NAME/source/<sourcecodeの中身>
ってなる。
boto required for this module
Ansibleを実行するホストでAWSの操作をする場合、
boto
とかいうPythonのモジュールをインストールします。
加えてdelegate_to: 127.0.0.1
をタスクに追加しないとリモート先で実行されてしまって
エラーが消えないのでご注意を。
逆にリモート先で行うならリモート先で実行します。
yum で Ansible をインストールした場合 $ sudo yum install python-boto -y pip で Ansible をインストールした場合(多分いける) $ sudo pip install boto boto3
それでも解決できない場合
引数にansible_python_interpreter
をつけて実行する
ansible-playbook -i production/hosts api.yml --extra-vars "ansible_python_interpreter=`(which python)" --user root --ask-pass
hostsファイルにansible_python_interpreter
をつける
[api] api.luis.local ansible_python_interpreter=/usr/bin/python