【问题标题】: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 数据库的脚本(例如)。之后,它就可以用于测试了。我想找到一种方法来避免这种人机交互步骤。所以创建和操作的顺序应该是:

  1. 供应数据库集群
  2. 供应实用程序 EC2 实例(flyway 脚本可以在其中运行)
  3. 执行flyway

如何以自动化方式完成?此外,如果我的资源很少也需要类似设置(可能不是 flyway,而是某种脚本),我如何控制活动的顺序(从创建资源到在其上运行脚本)?

【问题讨论】:

  • 请用第 2 步和第 3 步的信息更新您的问题。

标签: amazon-ec2 automation terraform


【解决方案1】:

尝试使用terraform provisionersaws_instance 资源,我想您正在使用的资源完全支持此功能。使用配置器,您可以在实例创建后立即运行任何您想要的命令。

不要忘记应用connection 设置。你可以阅读更多herehere

最后,你应该得到一些接近这个的东西:

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")}"
  }
}

【讨论】:

    猜你喜欢
    • 2018-07-10
    • 2021-03-03
    • 1970-01-01
    • 2020-01-06
    • 2019-02-04
    • 2020-04-22
    • 2019-07-25
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多