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

Posted

技术标签:

【中文标题】在 AWS 中管理一次性基础设施作业【英文标题】:Manage one-time infrastructure jobs in AWS 【发布时间】:2021-12-25 11:16:26 【问题描述】:

Terraform 是声明式 IaC,但有时您需要使用 aws cli 编写命令式修复程序.

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

由于 Terraform 是声明式的并由 CI/CD 部署,因此添加/更改其他模块、提交不会有任何问题,CI/CD 会处理其余的工作。

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

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

【问题讨论】:

您可以在 terraform 中运行 (bash) 脚本没问题。我们例如在指定湖泊形成管理员时这样做。如果您知道自己在做什么,则具有适当触发器的 null_resources 可以很好地工作;) 【参考方案1】:

如果我站在你的立场上,我会将所有内容都保留在 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"]
  

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

【讨论】:

以上是关于在 AWS 中管理一次性基础设施作业的主要内容,如果未能解决你的问题,请参考以下文章

第一次课程作业(3月7日)

如何管理aws云服务器

大学计算机基础第一次作业

AWS Storage Gateway 现已在由西云数据运营的 AWS 中国(宁夏)区域用于 Linux KVM 管理程序

第一次作业 林宏璘 2013551601

由光环新网运营的AWS中国(北京)区域AWS Storage Gateway服务现已用于Linux KVM管理程序