第 1 部分:我在其中回答您的问题
这些基础设施条目在 AWS SAM 中来自哪里?
我在 Lambda 控制台中复制了您的步骤,以创建名为 super-app 的“无服务器 API 后端”。当您按下 create 时,AWS 会创建
两个CloudFormation Stacks,每个都有一个 YAML 模板。您可以在 CloudFormation 控制台的 Stacks > Templates Tab 下查看堆栈资源和 YAML 模板。
-
super-app:“资源”堆栈,其中包含您设法复制的 lambda 和 dynamo 资源。
-
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,但更少3。 SAM 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 构造。它原生支持testing 和CI/CD。
AWS CDK workshop 包括测试和管道。很多 AWS CDK example apps。
- 请注意,CloudFormation 是此信息的最终来源。 lambda 控制台调用
cloudformation.DescribeStack API 来获取它。
- YAML 或 JSON
- SAM 还有一个marketplace-like repository,带有可重复使用的 AWS 和 3rd 方组件