業務でAnsibleを使ったインフラ構築に関わっており、備忘も兼ねて手順を書いていこうと思います。今回の目的としては、ローカル環境のLinuxサーバにAnsibleをインストールして、EC2サーバを設定変更するところまでの手順をご紹介できればと思います。
この記事で分かること
・LinuxサーバへのAnsibleインストール方法
・SSH認証の設定方法
・インベントリ、プレイブックの書き方
・AnsibleでEC2サーバの設定変更を行う方法
AnsibleでAWSのEC2を操作する手順
環境と前提条件
ローカル環境:Linux(Ubuntu20.04)
EC2サーバ:Linux(Ubuntu20.04)
AWS環境:FW(セキュリティグループ)では、ローカル環境からのSSH接続を許可
ローカルPC側のAnsible設定
下記コマンドでAnsibleのインストールを行います
$ apt install ansible
Ansible用のディレクトリとファイルは以下のようにしました
$ tree
.
├── ansible.cfg
├── hosts
│ ├── prd
│ │ ├── group_vars
│ │ │ └── all.yml
│ │ └── inventory
│ └── stg
│ ├── group_vars
│ └── inventory
├── roles
│ ├── apt
│ │ └── tasks
│ │ └── main.yml
├── ssh_config
└── web.yml
SSH認証用の設定
ここではEC2サーバへSSH接続するための設定を行っていきます。
任意の場所にプライベートキーを登録します。
$ ~/.ssh/<プライベートキー名>
ssh_configの設定
$ vi ssh_config
Host EC2のプライベートIP
User ubuntu #ec2側の実行ユーザ
HostName EC2のプライベートIP
IdentityFile ~/.ssh/<プライベートキー名>
StrictHostKeyChecking no
下記設定で接続の際にssh_configを参照する
$ vi ansible.cfg
[ssh_connection]
ssh_args = -F ssh_config
Ansibleの定義作成
Ansibleの定義として、EC2サーバに対して、aptで複数のアプリケーションをインストールする設定を記載しました。
Play bookの設定
$ cat web.yml
- name: Deploy web server
hosts: web
become: yes
roles:
- apt
inventoryの設定
cat hosts/prd/inventory
[web]
<EC2のグローバルIP>
タスクの設定
$ cat roles/apt/tasks/main.yml
---
- name: Upgrade all package
apt:
update_cache: yes
upgrade: yes
- name: Install apt packages
apt:
name:
- vim
- curl
- git
- docker-compose
- tree
state: latest
Play bookの実行
下記コマンドでPlay bookの実行を行い、実行が成功していることを確認しました。
$ ansible-playbook web.yml -i hosts/prd
35.72.x.xxx : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
EC2側の確認
EC2側のサーバにログインし、対象のアプリケーションがインストールされていることを確認できました。
まとめ
今回は、apt installをAnsibleで行ってみました。実際には、cofigファイルを変更したり、AWSリソースを作成することも可能です。次回以降の記事では、install以外の操作を行ったり、Cloud9からの実行などを検証してみたいと思います。