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

pup*_*eno 6 amazon-web-services

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

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

在此输入图像描述

向导完成创建应用程序后,它看起来像这样:

在此输入图像描述

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

sam init我尝试通过使用并创建 example2来或多或少地手动复制此内容。查看template.yml它创建的内容并了解资源中的内容是如何创建的很容易,但基础设施中的内容是如何创建的。

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

在此输入图像描述

给定 example2,我应该如何创建与 example1 相同的开箱即用的基础设施(然后更改它,例如,我想要几个环境、产品、暂存等)。这是在 AWS 控制台中点击还是可以通过 CloudFormation 完成?

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

fed*_*nev 4

第 1 部分:我回答你的问题

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

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

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

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

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

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

# 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 
Run Code Online (Sandbox Code Playgroud)

您必须在部署时传入模板参数的值。参数的当前值位于控制台中的 下CloudFormation > Stack > Parameters Tab--parameter-overrides您可以使用命令中的参数传递它们deploy。如果参数是静态的,我发现在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
Run Code Online (Sandbox Code Playgroud)

如果模板中发生更改,它们将进行部署。成功!

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

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

AWS 基础设施即代码

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

CloudFormation YAML 2模板

OG、全能、最低级别的方法是手动编码 YAML 模板。无论您使用什么工具,Cfn 模板参考文档都是不可或缺的,因为这就是部署的工具

SAM YAML 模板

使用AWS SAM,您仍然可以手动编写 YAML,但数量减少了3SAM 模板是CloudFormation 的超集,为主要无服务器组件(如 Lambda、DynamoDB 表和队列)提供一些更高级别的抽象。SAM CLI将 SAM 模板编译为 Cfn。它具有本地测试和部署便利等出色的功能。

云开发套件

最新、最闪亮的 IaaC 方法是 CDK,现在处于 V2 版本。使用 CDK,我们可以编写 Typescript/Python/Java/等。而不是 YAML。CDK CLI将您的语言代码编译为 Cfn 并使用cdk deploy. 它拥有一组更大的高级基础设施抽象,超越了无服务器,并且提供了为高级用例公开低级 Cfn 构造的逃生舱口。它本身支持测试CI/CD

AWS CDK 研讨会,包括测试和管道。许多 AWS CDK 示例应用程序


  1. 请注意,CloudFormation 是此信息的最终来源。lambda 控制台进行cloudformation.DescribeStackAPI 调用来获取它。
  2. YAML 或 JSON
  3. SAM 还拥有一个类似市场的存储库,其中包含可重复使用的 AWS 和第 3 方组件