
Ansible使いの人はちょっと見逃せない。AWS Systems Managerで複雑な構成のAnsible-Playbookの実行が可能になりました
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
AWS事業本部 梶原@新福岡オフィスです。
数日前に、AWS Systems Manager で複雑な構成のAnsible-Playbookの実行がサポートされました。
一瞬、以前からAnsible Playbookの実行はできてたじゃん。とスルーしそうになったんですが、Complexの文字が目にとまりました。
よくよく読んでみると、S3 or Github上のzip またはディレクトリ構造のPlaybookを実行できるとの記載があります。
そうです、AnsibleのBest Practicesに沿った構成のまま、EC2上でAnsible-Playbookの実行ができそうです。
やってみた。
という事で、とりあえず何か手頃なPlaybookを実行してみようと、FTPSサーバを立てる際に使用したPlaybookがあったので 適当にEC2インスタンスを起動し、S3にzipファイルを置いて、AWS Systems Managerから実行してみました。
PlayBookを含んだzipファイルの作成
Playbookは下記ブログの内容と同じなのですが、role配下のフォルダもzipに含む必要があります
適当なディレクトリに移動し
ansible-galaxy install -p ./roles weareinteractive.vsftpd
を実行するとコマンドを実行したディレクトリ配下にrolesにファイルがダウンロードされますので、そちらを含めてzipファイルを作成します。(ansible-vsftpd.zipとして作成しました) zipの中はこんな感じになります。
. ├── roles │ ├── weareinteractive.openssl │ │ ├── CHANGELOG.md │ │ ├── defaults │ │ │ └── main.yml │ │ ├── LICENSE │ │ ├── Makefile │ │ ├── meta │ │ │ ├── main.yml │ │ │ └── readme.yml │ │ ├── README.md │ │ ├── tasks │ │ │ ├── cacert.yml │ │ │ ├── config.yml │ │ │ ├── create_dir.yml │ │ │ ├── install.yml │ │ │ ├── main.yml │ │ │ ├── manage.yml │ │ │ └── vars.yml │ │ ├── templates │ │ │ └── etc │ │ │ └── ssl │ │ │ └── openssl.cnf.j2 │ │ ├── tests │ │ │ └── main.yml │ │ └── vars │ │ ├── default.yml │ │ ├── redhat.yml │ │ ├── suse.yml │ │ └── ubuntu.yml │ └── weareinteractive.vsftpd │ ├── CHANGELOG.md │ ├── defaults │ │ └── main.yml │ ├── handlers │ │ └── main.yml │ ├── LICENSE │ ├── Makefile │ ├── meta │ │ ├── main.yml │ │ └── readme.yml │ ├── README.md │ ├── tasks │ │ ├── config.yml │ │ ├── install.yml │ │ ├── main.yml │ │ ├── manage.yml │ │ └── service.yml │ ├── templates │ │ └── etc │ │ └── vsftpd.conf.j2 │ ├── tests │ │ └── main.yml │ ├── Vagrantfile │ └── vars │ ├── Debian.yml │ └── RedHat.yml └── vsftpd-ftps.yml
自分が作成したPlaybook自体は大したことないのですが、role配下はベストプラクティスに沿った構成となっています。
vsftpd-ftps.yml(省略)完全なファイルはこちらを参照
# ansible-playbook vsftpd-ftps.yml
- hosts: all
vars:
<< 省略>>
# 自己証明書作成
# FTP用 User 追加
vsftpd_users:
- username: ftpuser
name: FTP User
# vsFTPD設定
vsftpd_config:
force_local_data_ssl: YES
force_local_logins_ssl: YES
# log_ftp_protocol: YES
# ssl key
vsftpd_key_file: "ftp.classmethod.info.key"
# ssl cert
vsftpd_cert_file: "ftp.classmethod.info.crt"
roles:
- weareinteractive.openssl
- weareinteractive.vsftpd
S3へ保存
作成したzipファイルをS3にアップロードして配置します。 (公開もしくは、アクセス権限を設定してください)
オブジェクト URL をメモします
https://pub-devio-blog-qrgebosd.s3-ap-northeast-1.amazonaws.com/ansible/ansible-vsftpd.zip
にアップロードしたものとして進めます。
AWS Systems Managerのコマンドの実行
コマンドのドキュメントを選択
AWS Systems Manager のコマンドの実行からAWS-ApplyAnsiblePlaybooks を選択します。
コマンドのパラメータを選択(入力)します
1.Source Type: S3 を選択します。
- Source Info はpathにS3に保存したzipファイルのURLを設定します。
{
"path":"https://pub-devio-blog-qrgebosd.s3-ap-northeast-1.amazonaws.com/ansible/ansible-vsftpd.zip"
}
- Install Dependencies は
Trueを選択します。 対象のインスタンスにてTrueを選択した場合、Ansibleのインストール(依存関係含む)が行われます。 -
Playbook File は 実行するplaybookを指定します。 ここでは、
vsftpd-ftps.ymlを入力します。
ターゲットを選択します。
通常Systems Managerでのインスタンスの指定と特にかわりはありません。 RoleにSystems ManagerのRoleを設定したインスタンスを指定します。
実行
実行結果
正常にコマンドが実行されると、コマンド履歴から進捗状況、実行結果等が確認できます。
実行のログからですが、コマンド実行の流れとしては
- Ansibleのインストール
Installed: ansible.noarch 0:2.8.4-1.el7
- 実行対象のプレイブックをS3からダウンロード
Complete! Running Ansible in /var/lib/amazon/ssm/i-072e8030071378e13/document/orchestration/1fd1ace2-e2e1-4bdb-9615-7afffb677d70/downloads Archive: ./ansible-vsftpd.zip creating: roles/ creating: roles/weareinteractive.openssl/ extracting: roles/weareinteractive.openssl/.ansible-lint inflating: roles/weareinteractive.openssl/.clog.toml
- Ansible-Playbookの実行
PLAY [all] ********************************************************************* TASK [Gathering Facts] ********************************************************* <<省略>>
が行われ、指定したzipファイルの展開、Playbookの実行が行われました。
まとめ
特にPlaybookの実行途中などで引っかかることもなく、あっけなく、Ansible Playbookの実行ができてしまいました。 デバッグ等はさすがにAWS Systems Managerを経由しながらだと手間がかかるかと思いますが、検証済みのAnsibleのPlaybookがあれば、Systems Managerを生かして SSH不要、複数のインスタンスに同時に実行、など利点を享受できるかと思います。またSystems Mangerのコマンド実行は管理インスタンスであればよいので、オンプレミスのインスタンスなどでも実行可能かと思われます。
ミドルウェアの構成管理などはPlaybookの方がやりやすかったりするので、S3またGithubに保持し、AnsibleのPlaybookを用いて設定また、再利用することが可能になるかと思います。 また、PlaybookのCheck実行もできるので、構成差異の検出などにも役立つかもしれません。
Ansibleを使われている方はぜひとも試してみてください。










