教程:创建将您的无服务器应用程序发布到的管道 AWS Serverless Application Repository - AWS CodePipeline

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

教程:创建将您的无服务器应用程序发布到的管道 AWS Serverless Application Repository

您可以使用 AWS CodePipeline 将您的 AWS SAM 无服务器应用程序持续交付给。 AWS Serverless Application Repository

重要

作为创建管道的一部分,客户提供的 S3 工件存储桶将 CodePipeline 用于项目。(这与用于 S3 源操作的存储桶不同。) 如果 S3 工件存储桶与您的管道账户位于不同的账户中,请确保 S3 工件存储桶归其所有 AWS 账户 ,该存储桶是安全且可靠的。

本教程介绍如何创建和配置管道来构建托管的无服务器应用程序并将其 AWS Serverless Application Repository 自动发布到。 GitHub 管道 GitHub 用作源提供者和 CodeBuild 生成提供者。要将您的无服务器应用程序发布到 AWS Serverless Application Repository,您需要部署一个应用程序(来自 AWS Serverless Application Repository),并将该应用程序创建的 Lambda 函数关联为管道中的 Invoke 操作提供者。然后,您无需编写任何代码即可持续向 AWS Serverless Application Repository提供应用程序更新。

重要

在此过程中,您在管道中添加的许多操作都涉及在创建管道之前需要创建的 AWS 资源。 AWS 源操作的资源必须始终在您创建管道的同一 AWS 区域创建。例如,如果您在美国东部(俄亥俄州)地区创建管道,则您的 CodeCommit 存储库必须位于美国东部(俄亥俄州)区域。

您可以在创建管道时添加跨区域操作。 AWS 跨区域操作的资源必须位于您计划执行操作的同一 AWS 区域。有关更多信息,请参阅 在中添加跨区域操作 CodePipeline

开始前的准备工作

在本教程中,我们假设您满足以下条件:

步骤 1:创建 buildspec.yml 文件

创建包含以下内容的buildspec.yml文件,并将其添加到无服务器应用程序的 GitHub 存储库中。Replace(替换) template.yml 使用您的应用程序的 AWS SAM 模板和 bucketname 使用存储打包应用程序的 S3 存储桶。

version: 0.2 phases: install: runtime-versions: python: 3.8 build: commands: - sam package --template-file template.yml --s3-bucket bucketname --output-template-file packaged-template.yml artifacts: files: - packaged-template.yml

步骤 2:创建并配置您的管道

按照以下步骤在要发布无服务器应用程序的 AWS 区域 位置创建管道。

  1. 登录 AWS Management Console 并打开 CodePipeline 控制台,网址为https://console.aws.amazon.com/codepipeline/

  2. 如有必要,请切换到要发布无服务器应用程序 AWS 区域 的位置。

  3. 选择 Create pipeline(创建管道)。在 Choose pipeline settings (选择管道设置) 页面上,在 Pipeline name (管道名称) 中,输入管道的名称。

  4. 管道类型中,选择 V2。有关更多信息,请参阅 管道类型。选择下一步

  5. 服务角色中,选择新建服务角色 CodePipeline 以允许在中创建服务角色IAM。

  6. 高级设置中的各项设置保留为默认值,然后选择下一步

  7. 添加源舞台页面的源提供者中,选择GitHub

  8. 连接下,选择一个现有连接或创建一个新连接。要创建或管理 GitHub 源操作的连接,请参阅GitHub 连接

  9. 存储库中,选择您的 GitHub 源存储库。

  10. Branch 中,选择您的 GitHub 分支。

  11. 保留源操作的其余默认值。选择下一步

  12. Add build stage (添加构建阶段) 页面上,添加一个构建阶段:

    1. 构建提供程序中,选择 AWS CodeBuild。对于 Region (区域),请使用管道区域。

    2. 选择创建项目

    3. 项目名称中,输入此构建项目的名称。

    4. 环境映像中,选择托管映像。对于操作系统,请选择 Ubuntu

    5. 对于 Runtime (运行时)Runtime version (运行时版本),选择无服务器应用程序所需的运行时和版本。

    6. 对于服务角色,选择新建服务角色

    7. 对于构建规范,选择使用 buildspec 文件

    8. 选择 “继续” CodePipeline。这将打开 CodePipeline 控制台并创建一个使用存储库buildspec.yml中的进行配置的 CodeBuild 项目。该构建项目使用服务角色来管理 AWS 服务 权限。此步骤可能需要几分钟时间。

    9. 选择下一步

  13. Add deploy stage (添加部署阶段) 页面上,选择 Skip deploy stage (跳过部署阶段),并通过再次选择 Skip (跳过) 接受警告消息。选择下一步

  14. 选择 Create pipeline(创建管道)。您应看到一个显示源和构建阶段的示意图。

  15. 向 CodeBuild 服务角色授予访问存储打包应用程序的 S3 存储桶的权限。

    1. 在新管道的 “构建” 阶段,选择CodeBuild

    2. 选择 Build details (构建详细信息) 选项卡。

    3. 环境中,选择 CodeBuild 服务角色以打开IAM控制台。

    4. 展开 CodeBuildBasePolicy 选项,然后选择 Edit policy (编辑策略)

    5. 选择JSON

    6. 添加包含以下内容的新策略声明。该语句 CodeBuild 允许将对象放入存储已打包应用程序的 S3 存储桶中。Replace(替换) bucketname 使用您的 S3 存储桶的名称。

      { "Effect": "Allow", "Resource": [ "arn:aws:s3:::bucketname/*" ], "Action": [ "s3:PutObject" ] }
    7. 选择查看策略

    8. 选择 Save changes(保存更改)

步骤 3:部署发布应用程序

按照以下步骤部署包含 Lambda 函数的应用程序,该函数执行到 AWS Serverless Application Repository的发布操作。此应用程序是 aws-serverless-codepipeline-serverlessrepo-pub lish。

注意

您必须将应用程序部署到与您的管道 AWS 区域 相同的位置。

  1. 转到应用程序页面,然后选择 Deploy (部署)

  2. 选择 “我确认此应用程序创建了自定义IAM角色”。

  3. 选择部署

  4. 选择 “查看 AWS CloudFormation 堆栈” 以打开 AWS CloudFormation 控制台。

  5. 展开资源部分。你看 ServerlessRepoPublish,它的类型是:: LambdaAWS:: Func tion。记下此资源的物理 ID 以供下一步使用。在中创建新的发布操作时,您将使用此物理 ID CodePipeline。

步骤 4:创建发布操作

请按照以下步骤在管道中创建发布操作。

  1. 打开 CodePipeline 控制台,网址为https://console.aws.amazon.com/codepipeline/

  2. 在左侧导航部分中,选择要编辑的管道。

  3. 选择编辑

  4. 在当前管道的最后一个阶段之后,选择 + Add stage (+ 添加阶段)。在 Stage name (阶段名称) 中,输入名称,例如 Publish,然后选择 Add stage (添加阶段)

  5. 在新阶段中,选择 + 添加操作组

  6. 输入操作名称。从 Action provider (操作提供程序)Invoke (调用) 中,选择 AWS Lambda

  7. 输入构件中选择BuildArtifact

  8. 函数名称中,选择您在上一步中记下的 Lambda 函数的物理 ID。

  9. 对操作选择 Save (保存)

  10. 对阶段选择 Done (完成)

  11. 在右上角,选择 Save (保存)

  12. 要验证您的管道,请在中对您的应用程序进行更改 GitHub。例如,更改 AWS SAM 模板文件Metadata部分中应用程序的描述。提交更改并将其推送到您的 GitHub 分支。这将触发您的管道运行。管道完成后,检查您的应用程序是否已根据 AWS Serverless Application Repository 中的更改进行了更新。