使用嵌套应用程序重用代码和资源 AWS SAM - AWS Serverless Application Model

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用嵌套应用程序重用代码和资源 AWS SAM

无服务器应用程序可以包含一个或多个嵌套应用程序。嵌套应用程序是大型应用程序的一部分,可以作为独立工件打包和部署,也可以作为大型应用程序的组件进行打包和部署。嵌套应用程序允许您将经常使用的代码转换为自己的应用程序,然后可以在更大的无服务器应用程序或多个无服务器应用程序中重复使用。

随着无服务器架构的发展,通常会出现一些常见的模式,即在多个应用程序模板中定义相同的组件。嵌套应用程序允许您在单独的 AWS SAM 模板中重复使用常用代码、功能、资源和配置,从而只能维护来自单一来源的代码。这样可以减少重复的代码和配置。此外,这种模块化方法简化了开发,增强了代码组织,并促进了无服务器应用程序之间的一致性。使用嵌套应用程序,您可以更加专注于应用程序特有的业务逻辑。

要在无服务器应用程序中定义嵌套应用程序,请使用 AWS::Serverless::Application 资源类型。

您可以从以下两个来源定义嵌套应用程序:

  • AWS Serverless Application Repository 应用程序 – 您可以使用您的账户在 AWS Serverless Application Repository中可用的应用程序来定义嵌套应用程序。这些应用程序可以是您账户中的私有应用程序、与您的账户私下共享的应用程序或在中公开共享的应用程序 AWS Serverless Application Repository。有关不同部署权限级别的更多信息,请参阅《AWS Serverless Application Repository 开发人员指南》中的应用程序部署权限发布应用程序

  • 本地应用程序 – 您可以使用存储在本地文件系统上的应用程序来定义嵌套应用程序。

有关如何在无服务器应用程序中使用 AWS SAM 定义这两种类型的嵌套应用程序的详细信息,请参阅以下各节。

注意

无服务器应用程序中可以嵌套的最大应用程序数量为 200。

嵌套应用程序可以拥有的最大参数数量为 60。

从中定义嵌套应用程序 AWS Serverless Application Repository

您可以使用 AWS Serverless Application Repository中可用的应用程序来定义嵌套应用程序。您还可以使用 AWS Serverless Application Repository存储和分发包含嵌套应用程序的应用程序。要查看中嵌套应用程序的详细信息 AWS Serverless Application Repository,您可以使用 AWS 软件开发工具包 AWS CLI、或 Lambda 控制台。

要在无服务器应用程序的 AWS SAM 模板中定义托管 AWS Serverless Application Repository 在中的应用程序,请使用每个 AWS Serverless Application Repository 应用程序详细信息页面上的 “复制为 SAM 资源” 按钮。为此,请按照以下步骤操作:

  1. 请确保您已登录 AWS Management Console。

  2. 使用《AWS Serverless Application Repository 开发人员指南》 AWS Serverless Application Repository 的 “浏览、搜索和部署应用程序” 部分中的步骤,找到要嵌套的应用程序

  3. 选择复制为 SAM 资源按钮。您正在查看的应用程序的 SAM 模板部分现在位于剪贴板中。

  4. 将 SAM 模板部分粘贴到要嵌套在此应用程序中的应用程序的 SAM 模板文件的 Resources: 部分。

以下是托管在 AWS Serverless Application Repository中的嵌套应用程序的 SAM 模板部分示例:

Transform: AWS::Serverless-2016-10-31 Resources: applicationaliasname: Type: AWS::Serverless::Application Properties: Location: ApplicationId: arn:aws:serverlessrepo:us-east-1:123456789012:applications/application-alias-name SemanticVersion: 1.0.0 Parameters: # Optional parameter that can have default value overridden # ParameterName1: 15 # Uncomment to override default value # Required parameter that needs value to be provided ParameterName2: YOUR_VALUE

如果没有必需的参数设置,则可以省略模板的 Parameters: 部分。

重要

包含托管在中的嵌套应用程序的应用程序会 AWS Serverless Application Repository 继承嵌套应用程序的共享限制。

例如,假设一个应用程序是公开共享的,但它包含一个仅与创建父应用程序的 AWS 账户私下共享的嵌套应用程序。在这种情况下,如果您的 AWS 账户无权部署嵌套应用程序,则无法部署父应用程序。有关应用程序部署权限的更多信息,请参阅《AWS Serverless Application Repository 开发人员指南》中的应用程序部署权限发布应用程序

从本地文件系统定义嵌套应用程序

您可以使用存储在本地文件系统上的应用程序来定义嵌套应用程序。为此,您可以指定存储在本地文件系统中的 AWS SAM 模板文件的路径。

以下是嵌套本地应用程序的 SAM 模板部分示例:

Transform: AWS::Serverless-2016-10-31 Resources: applicationaliasname: Type: AWS::Serverless::Application Properties: Location: ../my-other-app/template.yaml Parameters: # Optional parameter that can have default value overridden # ParameterName1: 15 # Uncomment to override default value # Required parameter that needs value to be provided ParameterName2: YOUR_VALUE

如果没有参数设置,则可以省略模板的 Parameters: 部分。

部署嵌套应用程序

您可以使用 AWS SAM CLI 命令 sam deploy 部署嵌套应用程序。有关更多详细信息,请参阅使用部署您的应用程序和资源 AWS SAM

注意

部署包含嵌套应用程序的应用程序时,必须确认这一点。您可以通过将 CAPABILITY_AUTO_EXPAND 传递给 CreateCloudFormationChangeSet API 或使用命令来实现此目的。aws serverlessrepo create-cloud-formation-change-set AWS CLI

有关确认嵌套应用程序的更多信息,请参阅《AWS Serverless Application Repository 开发人员指南》中的在部署应用程序时确认 IAM 角色、资源策略和嵌套应用程序