【问题标题】:这些基础设施条目在 AWS SAM 中来自哪里?
【发布时间】:2022-01-14 17:38:12
【问题描述】:

我正在学习 SAM,我创建了两个项目。

第一个示例 1,我从 AWS Web 控制台创建它,方法是转到 Lambda、应用程序并选择此模板:

向导完成应用创建后,如下所示:

我对黄色突出显示的区域感兴趣,因为我还不了解它。

我尝试使用sam init 或多或少地手动复制它并创建了example2。很容易查看它创建的template.yml 并查看 Resources 中的内容是如何创建的,但 Infrastructure 中的内容是如何创建的。

当我使用 sam deploy --guided 部署 example2 时,Infrastructure 中确实没有任何内容:

给定示例 2,我应该如何创建与示例 1 开箱即用的基础架构(然后对其进行更改,例如,我想要多个环境、产品、登台等)。这是在 AWS 控制台中点击还是可以通过 CloudFormation 完成?

我尝试将权限边界添加到示例 2,在示例 1 在基础架构中的内容中,我在 IAM 中创建了策略(手动,在控制台中),将其添加到 template.yml,并部署它,但它没有t 出现在“基础设施”中。

【问题讨论】:

  • 您如何/在控制台中部署什么?
  • @Paolo:我只是创建了示例,没有进行任何部署。但是,如果我将更改推送到该存储库,它会自动部署。
  • 哪个例子?目前尚不清楚第二次部署是如何进行的
  • @Paolo:我重写了这个问题以使其更清楚。
  • 这更清楚了,谢谢

标签: amazon-web-services


【解决方案1】:

第 1 部分:我在其中回答您的问题

这些基础设施条目在 AWS SAM 中来自哪里?

我在 Lambda 控制台中复制了您的步骤,以创建名为 super-app 的“无服务器 API 后端”。当您按下 create 时,AWS 会创建 两个CloudFormation Stacks,每个都有一个 YAML 模板。您可以在 CloudFormation 控制台的 Stacks > Templates Tab 下查看堆栈资源和 YAML 模板。

  1. super-app:“资源”堆栈,其中包含您设法复制的 lambda 和 dynamo 资源。
  2. serverlessrepo-super-app-toolchain:带有“基础设施”CI/CD 资源的神秘堆栈1

这是在 AWS 控制台中点击还是可以通过 CloudFormation 完成?

是的,是的。您可以使用sam deploy(或aws cloudformation deploy)来更新堆栈。或指向并单击。

示例:使用 SAM CLI 更新 serverlessrepo-super-app-toolchain 模板:

# compile
sam build -t cicd_template.yaml --region us-east-1 --profile sandbox

# send changes to the cloud
sam deploy --stack-name serverlessrepo-super-app-toolchain --capabilities CAPABILITY_NAMED_IAM --region us-east-1 --profile sandbox 

您必须在部署时传入 template parameters 的值。参数的当前值位于CloudFormation > Stack > Parameters Tab 下的控制台中。您可以使用deploy 命令中的--parameter-overrides 参数传递它们。如果 参数是静态的,我发现在samconfig.toml 中传递SAM 参数值更容易,sam deploy 默认会使用它:

# samconfig.toml
version = 0.1
[default]
[default.deploy]
[default.deploy.parameters]
# template default parameters - fill in the template blanks
# Where do the values come from?  the CloudFormation console, Parameters tab
AppId = "super-app"
AppResourceArns = "arn:aws:lambda:us-east-1:1xxxxxx:function..."
ConnectionArn = "arn:aws:codestar-connections:us-east-1:xxxxxx:connection/xxxx3c5c-f0fe-4eb9-8164-d3c2xxxxx6e2"
GitHubRepositoryOwner = "mygithuborg"
RepositoryName = "super-app"
SourceCodeBucketKey = "sample-apps/nodejs/14.x/javascript/sam/web-backend.zip"
SourceCodeBucketName = "prodiadstack-subsystemsn-apptemplatesbucket03axxx-96eem3xxxxxx"
UseCodeCommit = false

如果在模板中进行了更改,它们将被部署。成功!

第 2 部分:我试图说服您改用 CDK

SAM 和 YAML 模板远未消亡,但我认为可以肯定地说,对于从 AWS 开始的熟练开发人员来说,较新的 AWS Cloud Development Kit 是需要 CI/CD 和测试的雄心勃勃的应用程序的自然首选。对于我们大多数人来说,编辑一个 800 行的 YAML 文件并不是一种有趣的体验。

AWS 基础设施即代码

有很多 AWS 和 3rd Party IaaC 工具可以在 AWS 上部署基础设施。每个抽象有时对某人来说都是最好的。要记住的重要一点是,无论您使用哪种更高级别的 IaaC 工具集,它最终都会被部署为 CloudFormation 模板。以下是 AWS 方法,从最早到最新:

CloudFormation YAML2 模板

OG,全能,最低级别的方法是手动编码 YAML 模板。 Cfn template reference docs 是不可或缺的 no 不管你使用什么工具,因为这就是被部署的东西。

SAM YAML 模板

AWS SAM,你 仍然手动编码 YAML,但更少3SAM template 是 CloudFormation 的超集,对主要的无服务器组件(如 Lambda、DynamoDB 表和队列)具有一些更高级别的抽象。 SAM CLI 将 SAM 模板编译为 Cfn。它具有出色的功能,例如本地测试和部署便利。

云开发工具包

最新、最闪亮的 IaaC 方法是 CDK,now on V2。使用 CDK,我们编写 Typescript/Python/Java/etc。而不是 YAML。 CDK CLI 将您的语言代码编译为 Cfn 并使用 cdk deploy 进行部署。它有一组更大的high-level infra abstractions,超越了无服务器,escape hatches 为高级用例公开了低级 Cfn 构造。它原生支持testingCI/CD

AWS CDK workshop 包括测试和管道。很多 AWS CDK example apps


  1. 请注意,CloudFormation 是此信息的最终来源。 lambda 控制台调用cloudformation.DescribeStack API 来获取它。
  2. YAML 或 JSON
  3. SAM 还有一个marketplace-like repository,带有可重复使用的 AWS 和 3rd 方组件

【讨论】:

  • 感谢您的详细解答。除了查看 AWS 控制台中的堆栈之外,CI/CD 基础设施的定义是否在其他任何地方?当然,从没有有关基础架构信息的 repo 进行 sam deploy 无法部署基础架构,对吧?
  • 很高兴为您提供帮助。您需要将 serverlessrepo-super-app-toolchain 堆栈的模板从 AWS 控制台复制粘贴到您的存储库中。文件名不重要,我在答案中将其命名为cicd_template.yaml。在本地,编辑 .yaml 为您的新部署阶段添加 Cfn 配置。然后按照答案进行部署。部署后,您会注意到 AWS 控制台中的模板已更改为与您推送的更改相匹配。
【解决方案2】:

编辑:

如果我理解正确,您希望在 SAM 应用程序上重现部署。如果是这种情况,有一个 AWS sample 涵盖了相同的方法。


您似乎正在使用 AWS 的 CodeStar/CodeCommit/CodePipeline/CodeDeploy/Code... 等在 example1 上部署您的 SAM 应用程序。

在部署时,infrastructure 下的这些资源由“代码”服务系列创建,以便授权、实例化、构建、验证、存储和部署您的应用程序到 CloudFormation。

另一方面,在example2,每当您在本地机器上构建项目时,您自己的设备都会利用实例化、构建、验证、存储(可上传的构建工件),因此不需要由 AWS 提供。

简短地回答您的问题:不。您无法自行重新创建这些基础架构资源。但同样,在 AWS 的代码服务之外进行部署时,您不需要这样做。

【讨论】:

  • 那么,控制台中从 AWS SAM 模板创建的项目无法重现?如果我有另一个项目我想成为这样,我做不到?
  • 你不需要复制任何东西,两个项目都是相同的。您在“基础架构”下看到的是 CodeStar 用于从控制台部署您的应用程序的工具,而不是应用程序本身的一部分。
  • 我知道我在基础设施中看到的并不是正在运行的应用程序的一部分,而是 CI/CD,从 github 中挑选更改、构建它们、部署它们。从sam init 创建的另一个项目没有。另一个项目不会自动部署在每个 git push 上。这就是我试图弄清楚如何复制的内容。
  • 我明白了。无论哪种方式,答案仍然适用于为什么 SAM CLI 不创建基础架构资源。不过,这个问题仍然需要澄清,关于这两个项目是如何设置的,以及“复制”和“另一个项目是这样的”是什么意思。
  • 您是否希望为 SAM 项目设置 CI/CD?
猜你喜欢
  • 2022-01-15
  • 2010-10-16
  • 2011-11-28
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-25
  • 1970-01-01
相关资源
最近更新 更多