【问题标题】:How to execute some automation scripts after provisioning resources via terraform通过 terraform 配置资源后如何执行一些自动化脚本
【发布时间】:2021-12-17 18:19:21
【问题描述】:
请考虑这个用例:作为我们测试框架的一部分,我们必须部署一些资源,然后执行一些脚本,然后才能开始使用资源进行测试。一个典型的例子是 AirView RDS 模块。 RDS 通常配备 flyway 模块,该模块具有用于创建 DB 的 SSM 文档。我们一直在做的是调用 RDS 模块和 flyway 模块,将它们应用到 terraform 工作区中。一旦成功部署(即应用),人类将需要通过 AWS 控制台并执行创建 NGCS 数据库的脚本(例如)。之后,它就可以用于测试了。我想找到一种方法来避免这种人机交互步骤。所以创建和操作的顺序应该是:
- 供应数据库集群
- 供应实用程序 EC2 实例(flyway 脚本可以在其中运行)
- 执行flyway
如何以自动化方式完成?此外,如果我的资源很少也需要类似设置(可能不是 flyway,而是某种脚本),我如何控制活动的顺序(从创建资源到在其上运行脚本)?
【问题讨论】:
标签:
amazon-ec2
automation
terraform
【解决方案1】:
尝试使用terraform provisioners。 aws_instance 资源,我想您正在使用的资源完全支持此功能。使用配置器,您可以在实例创建后立即运行任何您想要的命令。
不要忘记应用connection 设置。你可以阅读更多here和here
最后,你应该得到一些接近这个的东西:
resource "aws_instance" "my_instance" {
ami = "${var.instance_ami}"
instance_type = "${var.instance_type}"
subnet_id = "${aws_subnet.my_subnet.id}"
vpc_security_group_ids = ["${aws_security_group.my_sg.id}"]
key_name = "${aws_key_pair.ec2key.key_name}"
provisioner "remote-exec" {
inline = [
"my commands",
]
}
connection {
type = "ssh"
user = "ec2-user"
password = ""
private_key = "${file("~/.ssh/id_rsa")}"
}
}