在 AWS 中管理一次性基础设施作业

Manage one-time infrastructure jobs in AWS

Terraform 是声明性 IaC,但有时您需要使用例如 aws cli 编写命令式修复程序,我有一个由 CI/CD 管道维护的 terraform 项目,并且通过维护主要的基础设施可以正常工作我们工作的区域。

但现在是时候做一些 Terraform 尚未准备好处理的事情了,比如在所有 AWS 区域跨大量账户启用 Aws Config。

由于 Terraform 是声明式的并由 CI/CD 部署,您没有任何问题 adding/changing 其他模块,提交,CI/CD 将处理其余部分。

但是使用 aws cli 命令维护 bash 脚本的相应最佳实践解决方案是什么,每次创建新脚本时应该 运行 一次?

我有很多手动解决方案,比如创建一个存储库并通过每次删除应用的 scripts/adding 新脚本来不断更新它。或者构建新工具来维护已完成脚本的状态,每次只维护 运行 个新脚本。但我想问的是,是否已经有最佳实践解决方案,无论是来自 AWS、第 3 方还是没有。

如果我处在你的位置,我会把所有东西都保留在 terraform 中并鼓励团队也这样做,你可以使用 null_resource 到 运行 脚本并有很多花哨的触发器.. .
以下是一些示例:

variable "vpc_ids" {
  default = [
    "vpc1",
    "vpc2",
    "vpc3",
  ]
}

resource "null_resource" "tion" {
  count = length(compact(var.vpc_ids))

  triggers {
    vpcs = join(",", var.vpc_ids)
  }

  provisioner "local-exec" {
    when    = "create"
    command = "echo create ${var.vpc_ids[count.index]}"
  }

  provisioner "local-exec" {
    when    = "destroy"
    command = "echo destroy ${var.vpc_ids[count.index]}"
  }
}

resource "null_resource" "sh_test" {
  provisioner "local-exec" {
    when        = "create"
    command     = "if [ '${join(",", var.vpc_ids)}' != '' ]; then echo 'GOOD TO GO'; else echo 'NO VPC FOUND'; fi"
    interpreter = ["/bin/sh", "-c"]
  }
}

理想情况下,如果您可以编码,并且 AWS 功能在他们的 API 中可用,那么正确的做法是更改 AWS terraform 提供商,代码是开源的并托管在 GitHub:
https://github.com/hashicorp/terraform-provider-aws