AnsibleでEC2にSSH接続してファイルをアップロードする
仕事でAnsibleを少し触る機会があったのですが、初見でさっぱり分からなかったので
復習を兼ねてインストールからやってみました。
タイトルにも書きましたが、やったことは
です。
以下、やったことのメモとなります。
Ansibleのインストール
ローカルマシンにAnsibleをインストールします。私はWSLのUbuntuを使ったので、公式の以下の手順を参考にしました。
https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#latest-releases-via-apt-ubuntu
Ansibleはエージェントレスで動き、先にも書いたようにSSHで接続して操作を行うため、EC2に何かをインストールする必要はありません。
プロジェクト作成
ローカルの任意のフォルダをプロジェクトフォルダとし、以下のファイルを用意します。
- ssh_config ・・・ SSHでの接続先を定義
- inventory.ini ・・・ ssh_configで定義した接続先を指定
- ansible.cnf ・・・ SSHの接続オプションを指定
- sample.yml ・・・ 実行するタスク(今回はフォルダの作成、ファイルのアップロード)を定義
- test.txt ・・・ アップロードするファイル
以下、各ファイルについてです。
ssh_config
SSHの接続先を定義します。今回はEC2にキーペアで接続しました。
こんな感じとなります。(~/.ssh/configを使ったSSH接続と同じ内容です)
Host my-ec2 HostName ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com User ec2-user IdentityFile your_pem_fullpath.pem ServerAliveInterval 15
用意したらこのファイル単体でSSH接続できるかを確認します。
$ ssh -F ssh_config my-ec2
sample.yml
実行するタスクを定義します。今回は
- /home/ec2-user に workフォルダを作成
- workフォルダにローカルのtext.txtをアップロード
を行っています。
- hosts: my-ec2
tasks:
- name: make dir
file:
path: /home/ec2-user/work
state: directory
mode: 0755
- name: file copy
copy:
src: ./test.txt
dest: /home/ec2-user/work/
mode: 0755
test.txt
特にこだわりはないです。適当なテキストファイルを用意します。
実行
ここまで用意したら実行してみます。
AnsibleはDry Runが可能なので、まずはDry Runで確認してみます。
$ ansible-playbook ./sample.yml -i inventory.ini --check
「--check」を付けることでDry Runとなります。
本番実行は以下のようになります。
$ ansible-playbook ./sample.yml -i inventory.ini
参考
以下を参考にさせていただきました。ありがとうございました。
https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#latest-releases-via-apt-ubuntu
https://dev.classmethod.jp/server-side/ansible/enable_ssh_conf_using_via_ansible-cnf/
https://qiita.com/okoshi/items/9c11fa7e5f2eb76896a1
https://tekunabe.hatenablog.jp/entry/2019/03/03/ansible_file_intro
https://qiita.com/brighton0725/items/7754c3ea462d3b06e5d3