AWS 基础设施即代码文档

Posted

技术标签:

【中文标题】AWS 基础设施即代码文档【英文标题】:Documentation for AWS infrastructure as code 【发布时间】:2021-01-25 07:54:48 【问题描述】:

最近,在尝试构建 terraform IaC 时,我发现我无法让 API 网关正确路由到 Lambda。事实证明,在使用控制台时,AWS 会自动为 Lambda 分配网关所需的权限,但是对于 terraform 中的 IaC,这必须明确分配。

以上是可以理解的,但对于 AWS 和 terraform 的新手来说,会感到困惑。

是否有文档解释了基础设施连接中所需的组件,例如上面的那些?

我知道 AWS 文档和 terraform 文档经过深思熟虑,但没有一个真正解释(据我所见)在任何特定(无论多么常见或晦涩)设置中都需要某种资源。从一般搜索中推断出这些联系并不是一个很好的替代方法。

【问题讨论】:

【参考方案1】:

我认为没有在一个页面/区域中列出“所有必需组件”的文档。但是您可以从不同的文档中获得不同的信息,正如您所提到的,AWS 和 Terraform 在这方面做得很好。

谈到AWS,在API网关权限的情况下,我能想到两个有用的链接(第一个是从第二个引用的):

How API Gateway resource policies affect authorization workflow Control access for invoking an API

我同意这样一个事实,如果您真的不知道自己要实现什么目标,那么有时将 AWS 转换为 terraform 需要很多猜测。通常,当我在 IaC 与 AWS 控制台中“理论上应该有效”的事情上受阻时,我会从问题中退后一步,并尝试找出我真正想在 AWS 世界中将哪种组件粘合在一起。然后通常事情会变得更加明显。

因为在 terraform 中,它实际上是在创建小型独立的基础设施并使它们协同工作。与其他 IaC 相比,根据我的经验,它比 CloudFormation 更精细。

帮助我更快地弄清楚事情的个人实践是阅读我在 Terraform 中工作的每个组件的介绍文档。例如,如果我在 terraform IaC 中编写 lambda,我会快速阅读所有 lambda_xxxx_yyyy 介绍部分,以减少卡顿并在出现故障时更快地做出反应。它通常对我有用。

【讨论】:

【参考方案2】:

我没有看到这样的文档,但我可以分享我针对类似情况的解决方法。

您可以使用 AWS 控制台进行所需的更改 - 使用 UI 手动进行。然后,您可以定义刚刚在 TF 文件中创建的资源,定义仅/必需的一组属性,即使是随机值也可以。然后将您手动创建的内容导入到您定义的资源中。

通过运行terraform plan,您将看到差异,这将允许您相应地调整您的 TF 文件。

经过几次迭代后,您将使用 TF 在 UI 中复制刚刚完成的操作。作为最终测试,您可以手动还原更改,运行 terraform apply 并确保一切正常。

【讨论】:

谢谢,这真的很棒。我面临的问题是在控制台中看不到权限对象(或者至少我和我的同事都找不到它。)? 能否提供一个示例,说明在这种情况下如何使用import 命令? 每个 terraform 资源引用原始 aws 资源的方式略有不同,例如这里有一个文档 how to import s3 bucket。因此,您的操作顺序将是:手动创建存储桶。添加最少的资源定义,以便 terraform plan 通过。然后使用您刚刚添加的资源名称和文档中的正确引用运行导入。然后运行terraform plan,根据diff同步tf文件。 我的 apigateway 的特定 tf 文件包含 aws_lambda_permission 以正常工作,但是如果我不知道包含哪些内容,我怎么知道要包含哪些项目?我不认为将 lambda 的内容包含在网关的 tf 中,因此(我认为)不会由 import 完成。 由于 terraform apply 正常工作 - 基础知识(最小依赖项)已经涵盖。当然可能还有别的东西,我不认为有灵丹妙药可以自动解决。我在这里看到了两种方法:1)手动删除,使用 TF 创建并确认一切正常 2)查看相关资源的 TF 文档 - 您可能会确定您在那里实际使用的东西。

以上是关于AWS 基础设施即代码文档的主要内容,如果未能解决你的问题,请参考以下文章

AWS — AWS CloudFormation

在“云基础设施即服务的魔力象限”报告中,AWS 连续三年被评为领导者

无服务器框架:实现完整“基础架构即代码”的方法?

网络基础知识及计算机基础

aws(亚马逊WEB服务)详细资料大全

AWSBasis基础概念