在 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 SDK、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 角色、资源策略和嵌套应用程序