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