🍴

AWS-ApplyAnsiblePlaybooks SSM ドキュメントを使用したEC2の設定

2022/10/23に公開

概要

EC2起動後の設定でAnsibleを使用する場合は、AWS-ApplyAnsiblePlaybooks SSM ドキュメントを使用することが可能です。
これを使用することで、自分でAnsibleをインストールしなくてもEC2を設定可能になります。
今回は起動済みのEC2に対してGUIからAWS-ApplyAnsiblePlaybooks SSM ドキュメントの使用を設定して、EC2にDocker Composeをインストールしてみます。
AnsibleのPlaybookはS3に格納したものを使用します。

環境

sh-4.2$ uname -r
5.10.144-127.601.amzn2.x86_64

sh-4.2$ cat /etc/os-release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"

Ansible Playbook

ファイル構成

playbook.ymlでinstall_dockercomposeロールを実行するだけの構成です。

% tree -aF
./
└── install_dockercompose/
    ├── playbook.yml
    └── roles/
        └── install_dockercompose/
            └── tasks/
                └── main.yml

4 directories, 2 files

install_dockercompose/playbook.yml

---
- hosts: localhost
  name: Install docker compose playbook
  roles:
    - install_dockercompose

install_dockercompose/roles/install_dockercompose/tasks/main.yml

---
- name: Enable docker repo
  ansible.builtin.shell: 'amazon-linux-extras enable docker'
  when: ansible_facts['os_family'] == 'RedHat' and ansible_facts['distribution'] == 'Amazon'

- name: Install docker
  ansible.builtin.yum:
    name: docker-20.10.17
    state: present

- name: Start & enable docker
  ansible.builtin.systemd:
    name: docker
    state: started
    enabled: yes

- name: Install docker-compose
  ansible.builtin.get_url:
    url: https://github.com/docker/compose/releases/download/v2.12.1/docker-compose-linux-x86_64
    dest: /usr/local/bin/docker-compose
    mode: '0755'

zipの中身

PlaybookをS3に格納してAWS-ApplyAnsiblePlaybooks SSM ドキュメントを使用する場合は、ディレクトリ構造を保ったままS3に格納するか、zipで格納する必要があります。
今回はzipで格納するため、以下のzipを作りました。

% zipinfo -1 ansible.zip
install_dockercompose/
install_dockercompose/roles/
install_dockercompose/roles/install_dockercompose/
install_dockercompose/roles/install_dockercompose/tasks/
install_dockercompose/roles/install_dockercompose/tasks/main.yml
install_dockercompose/playbook.yml

S3に格納したzip

Playbookのzipは作成したS3バケットの直下に格納しました。

% aws s3 ls s3://test2012322143248299264
2022-10-23 20:14:13       1677 ansible.zip

AWS-ApplyAnsiblePlaybooks SSM ドキュメントの実行

事前確認

実行前にEC2にdocker-composeコマンドがインストールされていないことを確認しました。

sh-4.2$ uptime
 11:37:37 up 8 min,  0 users,  load average: 0.00, 0.01, 0.00
sh-4.2$ ls -l /usr/local/bin/
total 0

EC2のIAMロール

SSMとS3を使用するために以下のポリシーを許可したロールをEC2に設定しています。

  • AmazonSSMManagedInstanceCore
  • AmazonS3ReadOnlyAccess

マネコンでの設定

AWS Systems ManagerのRun Commandから設定をします。
コマンドドキュメントでansibleで検索し、AWS-ApplyAnsiblePlaybooksを選択します。

コマンドのパラメータで以下を設定します。

  • Source Type:S3
  • Source Info:以下のようなS3に格納したzipのパス
{"path":"https://test2012322143248299264.s3.ap-northeast-1.amazonaws.com/ansible.zip"}
  • Playbook File:zip解凍後のPlaybookのパス
install_dockercompose/playbook.yml

ターゲットでは、「インスタンスを手動で選択する」を選択し、Playbookを実行するEC2を選択します。

設定を終えたら画面右下にある実行ボタンをクリックして、コマンドが正常終了するのを待ちます。
ステータスはおそらく自動では変わらないので、適当なタイミングで更新ボタンを押す必要がありそうです。

実行後の確認

OSにログインし、docker-composeコマンドが利用可能となっていることが確認できました。

sh-4.2$ ls -l /usr/local/bin/
total 43896
-rwxr-xr-x 1 root root 44949504 Oct 23 11:57 docker-compose
sh-4.2$ docker-compose -v
Docker Compose version v2.12.1

参考

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-state-manager-ansible.html
https://aws.amazon.com/jp/blogs/news/using-state-manager-over-cfn-init-in-cloudformation-and-its-benefits/

Discussion