在Terraform中的源代码操作策略

首先

在Terraform中,面临着一个关于如何处理源代码管理的重大问题。
具体来说,AWS Lambda等云资源是其中之一。

这次的构想基于以下结构来考虑。

/   
└ terraform
  ├ module
  │ └ lambda
  ├ production
  ├ stagin
  └ develop

在其中,我认为有两个主要的对策。

将其嵌入到与Terraform相同的存储库中(备选方案)。

/
├ app
│ ├ func1
│ └ func2   
└ terraform
  ├ module
  │ └ lambda
  ├ production
  ├ stagin
  └ develop

将源代码包含在与Terraform存储库相同的存储库中。
在没有切换分支的情况下,仅使用main进行Terraform环境的差异管理。
总之,几乎不使用Git的功能,而是将其用作文件服务器。
这是因为我们希望保持存储库与当前系统配置的等效性。
Terraform目录模式集。
在这种情况下,app目录是源代码,当然希望能够频繁创建分支进行版本管理。

在另一个存储库中管理Terraform

/   
└ terraform
  ├ module
  │ └ lambda
  ├ production
  ├ stagin
  └ develop
/
└func1

如果这样做,可以将Terraform的单一分支保持思想与传统源代码的Git策略分离开来。
但是,会遇到一个问题。
如何将源代码与Terraform绑定在一起。

这次我们这样处理的。

image.png

具体来说,Terraform会在其自身中定义函数的设置(与IAM等相关),
但实际的源代码会指定云端存储(如S3或GCS)的Func1存储桶,
该存储桶会按版本划分目录,在每次部署时按版本进行拆分。

这样,除非明确在Terraform的一侧升级版本,否则可以阻止自动升级版本。另外,源代码仍然可以像以前一样进行管理,当有想要在Terraform中体现的版本时,可以在Git上打标签并进行CI/CD流程。

最后

对于Terraform而言,我认为它与Git的兼容性非常差,所以没有最佳实践。

广告
将在 10 秒后关闭
bannerAds