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 基础设施即代码文档的主要内容,如果未能解决你的问题,请参考以下文章