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