教程:创建将无服务器应用程序发布到 Amazon Serverless Application Repository 的管道
您可以使用 Amazon CodePipeline 将 Amazon SAM 无服务器应用程序持续交付到 Amazon Serverless Application Repository。
重要
作为创建管道的一部分,CodePipeline 将使用客户提供的 S3 构件存储桶来存放构件。(这与用于 S3 源操作的存储桶不同。) 如果 S3 构件存储桶所在的账户与您的管道账户不同,请确保 S3 构件存储桶归 Amazon Web Services 账户所有,并且安全可靠。
本教程介绍如何创建和配置管道以构建 GitHub 中托管的无服务器应用程序并自动将其发布到 Amazon Serverless Application Repository。该管道使用 GitHub 作为源提供程序,使用 CodeBuild 作为构建提供程序。要将无服务器应用程序发布到 Amazon Serverless Application Repository,您需要部署 应用程序
重要
在此过程中,您在管道中添加的许多操作都涉及在创建管道之前需要创建的 Amazon 资源。源操作的 Amazon 资源必须始终在您创建管道的同一 Amazon 区域中创建。例如,如果您在美国东部(俄亥俄州)区域中创建管道,则必须在美国东部(俄亥俄州)区域中创建 CodeCommit 存储库。
您可以在创建管道时添加跨区域操作。跨区域操作的 Amazon 资源必须位于您计划执行操作的同一 Amazon 区域中。有关更多信息,请参阅 在 CodePipeline 中添加跨区域操作。
开始前的准备工作
在本教程中,我们假设您满足以下条件:
-
您熟悉Amazon Serverless Application Model (Amazon SAM) 和 Amazon Serverless Application Repository。
-
您有一个托管在 GitHub 中的无服务器应用程序,并且您已使用 Amazon Serverless Application Repository CLI 将其发布到 Amazon SAM。要向 Amazon Serverless Application Repository 发布示例应用程序,请参阅 Amazon Serverless Application Repository 开发者指南 中的快速入门:发布应用程序。要将自己的应用程序发布到 Amazon Serverless Application Repository,请参阅 Amazon Serverless Application Model 开发者指南 中的使用 Amazon SAM CLI 发布应用程序。
步骤 1:创建 buildspec.yml 文件
创建包含以下内容的 buildspec.yml 文件,并将其添加到您的无服务器应用程序的 GitHub 存储库。将 template.yml 替换为应用程序的 Amazon SAM 模板,将 bucketname 替换为存储打包应用程序的 S3 存储桶。
version: 0.2 phases: install: runtime-versions: python: 3.8 build: commands: - sam package --template-filetemplate.yml--s3-bucketbucketname--output-template-file packaged-template.yml artifacts: files: - packaged-template.yml
步骤 2:创建并配置您的管道
按照以下步骤在您要在其中发布无服务器应用程序的 Amazon Web Services 区域中创建管道。
通过以下网址登录 Amazon Web Services 管理控制台 并打开 CodePipeline 控制台:https://console.aws.amazon.com/codepipeline/。
-
如有必要,请切换到要在其中发布无服务器应用程序的 Amazon Web Services 区域。
-
在欢迎页面、入门页面或管道页面上,选择创建管道。
-
在步骤 1:选择创建选项页面上的创建选项下,选择构建自定义管道选项。选择下一步。
-
选择 Create pipeline(创建管道)。在步骤 2:选择管道设置页面上,在管道名称中,输入管道的名称。
-
在管道类型中,选择 V2。有关更多信息,请参阅 管道类型。选择下一步。
-
在服务角色中,选择新建服务角色,以允许 CodePipeline 在 IAM 中创建服务角色。
-
将高级设置中的各项设置保留为默认值,然后选择下一步。
-
在步骤 3:添加源阶段页面上,在源提供程序中,选择 GitHub。
-
在连接下,选择一个现有连接或创建一个新连接。要创建或管理 GitHub 源操作的连接,请参阅GitHub 连接。
-
在 Repository (存储库) 中,选择源存储库。
-
在 Branch (分支) 中,选择您的 GitHub 分支。
-
保留源操作的其余默认值。选择下一步。
-
在步骤 4:添加构建阶页面上,添加一个构建阶段:
-
在构建提供程序中,选择 Amazon CodeBuild。对于 Region (区域),请使用管道区域。
-
选择创建项目。
-
在项目名称中,输入此构建项目的名称。
-
在环境映像中,选择托管映像。对于操作系统,请选择 Ubuntu。
-
对于 Runtime (运行时) 和 Runtime version (运行时版本),选择无服务器应用程序所需的运行时和版本。
-
对于服务角色,选择新建服务角色。
-
对于构建规范,选择使用 buildspec 文件。
-
选择前往 CodePipeline。这将打开 CodePipeline 控制台并创建一个 CodeBuild 项目,该项目将存储库中的
buildspec.yml用于配置。该构建项目使用服务角色来管理 Amazon Web Services 服务 权限。此步骤可能需要几分钟时间。 -
选择下一步。
-
-
在步骤 5:添加测试阶段中,选择跳过测试阶段,并通过再次选择跳过接受警告消息。
选择下一步。
-
在步骤 6:添加部署阶段页面上,选择跳过部署阶段,并通过再次选择跳过接受警告消息。选择下一步。
-
在步骤 7:审核中,选择创建管道。您应该可以看到一个显示阶段的示意图。
-
授予 CodeBuild 服务角色访问存储打包应用程序的 S3 桶的权限。
-
在新管道的构建阶段,选择 CodeBuild。
-
选择 Build details (构建详细信息) 选项卡。
-
在环境中,选择 CodeBuild 服务角色以打开 IAM 控制台。
-
展开
CodeBuildBasePolicy选项,然后选择 Edit policy (编辑策略)。 -
选择 JSON。
-
添加包含以下内容的新策略声明。该语句允许 CodeBuild 将对象放入存储打包应用程序的 S3 桶中。将
bucketname替换为您的 S3 存储桶的名称。{ "Effect": "Allow", "Resource": [ "arn:aws:s3:::bucketname/*" ], "Action": [ "s3:PutObject" ] } -
选择查看策略。
-
选择保存更改。
-
步骤 3:部署发布应用程序
按照以下步骤部署包含 Lambda 函数的应用程序,该函数执行到 Amazon Serverless Application Repository 的发布操作。此应用程序是 aws-serverless-codepipeline-serverlessrepo-publish。
注意
您必须将应用程序部署到与您的管道相同的 Amazon Web Services 区域。
-
转到应用程序
页面,然后选择 Deploy (部署)。 -
选择 I acknowledge that this app creates custom IAM roles (我确认此应用程序创建自定义 IAM 角色)。
-
选择部署。
-
选择查看 Amazon CloudFormation 堆栈以打开 Amazon CloudFormation 控制台。
-
展开资源部分。您将看到 ServerlessRepoPublish,它是 AWS::Lambda::Function 类型。记下此资源的物理 ID 以供下一步使用。您在 CodePipeline 中创建新的发布操作时将会用到此物理 ID。
步骤 4:创建发布操作
请按照以下步骤在管道中创建发布操作。
-
在 https://console.aws.amazon.com/codepipeline/ 打开 CodePipeline 控制台。
-
在左侧导航部分中,选择要编辑的管道。
-
选择编辑。
-
在当前管道的最后一个阶段之后,选择 + Add stage (+ 添加阶段)。在 Stage name (阶段名称) 中,输入名称,例如
Publish,然后选择 Add stage (添加阶段)。 -
在新阶段中,选择 + 添加操作组。
-
输入操作名称。从 Action provider (操作提供程序) 的 Invoke (调用) 中,选择 Amazon Lambda。
-
从 Input artifacts (输入构件) 中,选择 BuildArtifact。
-
从函数名称中,选择您在上一步中记下的 Lambda 函数的物理 ID。
-
对操作选择 Save (保存)。
-
对阶段选择 Done (完成)。
-
在右上角,选择 Save (保存)。
-
要验证您的管道,请在 GitHub 中更改您的应用程序。例如,在
Metadata模板文件的 Amazon SAM 部分中更改应用程序的描述。提交更改并将其推送到 GitHub 分支。这将触发您的管道运行。管道完成后,检查您的应用程序是否已根据 Amazon Serverless Application Repository中的更改进行了更新。