在SSM的Run Command中尝试执行Ansible

首先

因为我开始学习Terraform,所以我想将我的所学笔记发布出来。
在下面的四个内容进行过后,我将进行本次的内容。
安装Terraform并使用Terraform创建一个AWS上的EC2
使用Terraform设置IAM并通过会话管理器连接到EC2
使用Terraform设置安全组并连接到EC2进行http连接
使用Terraform构建S3和IAM角色,并尝试从EC2访问S3。

更改IAM角色

首先,您需要将IAM角色附加到EC2实例上,以使Ansible能够通过SSM的运行命令执行。您可以通过在SSM的运行命令中添加AmazonEC2RoleforSSM策略来完成此操作。

制定政策

利用数据来定义AWS的AmazonEC2RoleforSSM策略。

# ssmのrun commandでansible実行用に
data "aws_iam_policy" "ec2_role_ssm" {
  name = "AmazonEC2RoleforSSM"
}

将策略附加到角色上

将刚刚定义的策略附加到以下定义的角色上。

 

※ 这个权限已经在下面指示的EC2实例上设置好了。

 

执行Terraform的计划应用

为了反映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压缩文件。
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 > 运行命令,并搜索ansible。
选择AWS-ApplyAnsiblePlaybooks。

选择源类型

选择S3。

设置源信息

设定已上传的Playbook在S3中的路径。

{"path":"https://(S3バケット名).s3.ap-northeast-1.amazonaws.com/test_ansible.zip"}

Playbook 文件的配置

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。

bannerAds