はじめに
Terraformの勉強を始めたので備忘録を兼ねて行ったことを投稿しようと思います。
以下の4つの投稿内容を実施した上で今回の内容を行います。
TerraformをインストールしてTerraformでAWS上にEC2作ってみる
TerraformでIAMを設定してEC2にセッションマネージャー経由で接続してみる
Terraformでセキュリティグループを設定してEC2にhttp接続する
TerraformでS3とIAMロールを構築してEC2からS3にアクセスしてみる
IAMロールの変更
まず、SSMのRun CommandでAnsibleが実行できるようにEC2にアタッチしているIAMロールにポリシーAmazonEC2RoleforSSM
を追加します。
ポリシーを定義
dataを使ってAWSのAmazonEC2RoleforSSM
のポリシーを定義します。
# ssmのrun commandでansible実行用に
data "aws_iam_policy" "ec2_role_ssm" {
name = "AmazonEC2RoleforSSM"
}
ポリシーをロールにアタッチ
下記で定義したロールに先程定義したポリシーをアタッチします。
※このロールは下記でEC2に付与されています
Terraformのplan applyを実行
IAMロールの変更を反映する為、Terraform を実行します
terraform plan
terraform apply
Ansible Playbookの作成
今回実行するAnsible Playbookを作成します。
nginxをインストールして起動するだけです。
test_ansible/
roles/
web/
tasks/
main.yml
site.yml
---
- hosts: localhost
become: yes
roles:
- web
---
- name: nginx install
command: amazon-linux-extras install nginx1
- name: start nginx
command: systemctl start nginx
S3に作成したAnsible Playbookをアップロード
今回はS3にアップロードしたPlaybookを使って行います。
以下で作成したS3のバケットにPlaybookをzip圧縮したzipファイルをアップロードします。
https://qiita.com/kakita-yzrh/items/acc23e9aa1880fec3e38#s3%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B
SSM Run Command を実行
実行 コマンドの設定
実行するコマンドのタイプ選択
AWS コンソールから
AWS Systems Manager > Run Commandを選択し、ansible
で検索します。
AWS-ApplyAnsiblePlaybooks
を選択します。
Source Typeの選択
S3を選択します。
Source Infoの設定
アップロードしたPlaybookのS3のパスを設定します。
{"path":"https://(S3バケット名).s3.ap-northeast-1.amazonaws.com/test_ansible.zip"}
Playbook Fileの設定
test_ansible/site.yml
ターゲットを選択
ansibleを実行するEC2を選択します。
インスタンスを手動で選択するを選ぶとTerraformで作成したEC2インスタンスが表示されるので、選択します。
出力オプション
コマンドの結果を出力します。
作成したS3のバケットを選択します。
出力が不要であれば全てのチェックを外します。
実行
一番下の実行ボタンを押して実行します。
実行結果の確認
問題なければ成功
と表示されます。
失敗
と表示された場合はログを確認してください。
nginxの動作確認
問題なければ、EC2のパブリックIPをもとにhttp接続するとnginxのページが表示されます。
作成したリソースの削除
terraformのdestroyを実行して、AWS上のリソースを削除します。
terraform destroy
さいごに
今回はSSMのRun Commandを使ってAnsibleを実行してみました。
Run Commandで出力されるエラー時の内容がわかりづらくてはまってしまいました。
Ansible Playbookの書き方もまだまだ慣れていないので、次回はより複雑なAnsible Playbookを実行してみようと思います。