【AWS】AnsibleでEC2を操作する手順をご紹介します

devops

業務で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からの実行などを検証してみたいと思います。

タイトルとURLをコピーしました