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