在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。

广告
将在 10 秒后关闭
bannerAds