教程:在 AWS CodeStar 中创建和管理无服务器项目 - AWS CodeStar

2024 年 7 月 31 日,亚马逊 Web Services (AWS) 将停止支持创建和查看 AWS CodeStar 项目。2024 年 7 月 31 日之后,您将无法再访问 AWS CodeStar 控制台或创建新项目。但是,由 AWS CodeStar创建的 AWS 资源(包括您的源存储库、管道和构建)将不受此更改的影响,并将继续运行。 AWS CodeStar 此次停用不会影响连接和 AWS CodeStar 通知。

 

如果您想跟踪工作、开发代码以及构建、测试和部署应用程序,Amazon CodeCatalyst 提供了简化的入门流程和其他功能来管理您的软件项目。详细了解 Amazon 的功能定价 CodeCatalyst。

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

教程:在 AWS CodeStar 中创建和管理无服务器项目

在本教程中,将使用 AWS CodeStar 创建一个使用 AWS 无服务器应用程序模型 (AWS SAM) 的项目,以便为托管在 AWS Lambda 中的 Web 服务创建和管理 AWS 资源。

AWS CodeStar 使用 AWS SAM(依赖于 AWS CloudFormation)提供一种简化方式,以创建和管理支持的 AWS 资源,包括 Amazon API Gateway API、AWS Lambda 函数和 Amazon DynamoDB 表。(此项目不使用任何 Amazon DynamoDB 表。)

有关更多信息,请参阅 GitHub 上的 AWS 无服务器应用程序模型(AWS SAM)

先决条件:完成设置 AWS CodeStar中的步骤。

注意

您的 AWS 账户可能产生与本教程相关的费用,包括 AWS CodeStar 使用 AWS 服务的费用。有关更多信息,请参阅 AWS CodeStar 定价

概述

在本教程中,您将:

  1. 使用 AWS CodeStar 创建一个项目,此项目使用 AWS SAM 构建和部署基于 Python 的 Web 服务。此 Web 服务托管在 AWS Lambda 中,可通过 Amazon API Gateway 访问。

  2. 浏览项目的主要资源,其中包括:

    • 存储项目源代码的 AWS CodeCommit 存储库。源代码包含 Web 服务逻辑并定义了相关的 AWS 资源。

    • 自动构建源代码的 AWS CodePipeline 管道。此管道使用 AWS SAM 创建函数并将其部署到 AWS Lambda、在 Amazon API Gateway 中创建相关的 API,然后将该 API 连接至函数。

    • 部署到 AWS Lambda 的函数。

    • 在 Amazon API Gateway 中创建的 API。

  3. 测试 Web 服务,确认 AWS CodeStar 按预期构建和部署了 Web 服务。

  4. 设置本地工作站来处理项目的源代码。

  5. 使用本地工作站更改项目的源代码。当您向项目中添加一个函数、然后将更改推送到源代码时,AWS CodeStar 将重新构建和重新部署 Web 服务。

  6. 再次测试 Web 服务,确认 AWS CodeStar 按预期重新构建和重新部署了 Web 服务。

  7. 使用本地工作站编写单元测试,用自动测试替换部分手动测试。当您推送单元测试时,AWS CodeStar 将重新构建和重新部署 Web 服务并运行单元测试。

  8. 查看单元测试的结果。

  9. 清理项目。这一步可避免向您的 AWS 账户收取与本教程相关的费用。

步骤 1:创建项目

在本步骤中,使用 AWS CodeStar 控制台创建项目。

  1. 登录 AWS Management Console,然后通过以下网址打开 AWS CodeStar 控制台:https://console.aws.amazon.com/codestar/

    注意

    您必须使用与在 设置 AWS CodeStar 中创建或标识的 IAM 用户关联的凭证登录 AWS Management Console。此用户必须附加了 AWSCodeStarFullAccess 托管策略。

  2. 选择要在其中创建项目及其资源的 AWS 区域。

    有关 AWS CodeStar 在其中可用的 AWS 区域的信息,请参阅 AWS 一般参考中的区域和端点

  3. 请选择创建项目

  4. 选择项目模板页面上:

    • 对于应用程序类型,选择 Web 服务

    • 对于编程语言,选择 Python

    • 对于AWS 服务,选择 AWS Lambda

  5. 选择您所需项对应的框。选择下一步

  6. 对于项目名称,输入项目的名称(例如,My SAM Project)。如果使用不同于示例所用的名称,请确保在本教程中通篇使用它。

    对于项目 ID,AWS CodeStar 将为此项目选择一个相关的标识符(例如,my-sam-project)。如果看到不同于示例所用的项目 ID,请务必在本教程中通篇使用它。

    AWS CodeCommit 保留为选中状态,不要更改存储库名称值。

  7. 选择下一步

  8. 检查您的设置,然后选择创建项目

    如果是第一次在此 AWS 区域使用 AWS CodeStar,则对于显示名称电子邮件,输入希望 AWS CodeStar 用于您的 IAM 用户的显示名称和电子邮件地址。选择下一步

  9. 等待 AWS CodeStar 创建项目。这可能需要花几分钟的时间。请在刷新时看到项目已配置横幅后再继续。

步骤 2:浏览项目资源

在此步骤中,将浏览项目的四个 AWS 资源,以便了解项目的工作原理:

  • 存储项目源代码的 AWS CodeCommit 存储库。AWS CodeStar 为存储库指定名称 my-sam-project,其中 my-sam-project 是项目的名称。

  • 使用 CodeBuild 和 AWS SAM 在 API Gateway 中自动构建和部署 Web 服务的 Lambda 函数和 API 的 AWS CodePipeline 管道。AWS CodeStar 为管道指定名称 my-sam-project--Pipeline,其中 my-sam-project 是项目的 ID。

  • 包含 Web 服务逻辑的 Lambda 函数。AWS CodeStar 为函数指定名称 awscodestar-my-sam-project-lambda-HelloWorld-RANDOM_ID,其中:

    • my-sam-project 是项目的 ID。

    • HelloWorld 是在 AWS CodeCommit 存储库的 template.yaml 文件中指定的函数 ID。稍后将浏览该文件。

    • RANDOM_ID 是一个随机 ID,AWS SAM 向函数分配此 ID 来帮助确保唯一性。

  • API Gateway 中用于方便调用 Lambda 函数的 API。AWS CodeStar 为该 API 指定名称 awscodestar-my-sam-project--lambda,其中 my-sam-project 是项目的 ID。

在 CodeCommit 中浏览源代码存储库
  1. 在项目在 AWS CodeStar 控制台中打开的情况下,在导航栏上选择存储库

  2. 存储库详情中选择指向您 CodeCommit 存储库的链接(My-SAM-Project)。

  3. 在 CodeCommit 控制台的代码页面中,将显示项目的源代码文件:

    • buildspec.yml,CodePipeline 指示 CodeBuild 在构建阶段使用该文件,以便利用 AWS SAM 打包 Web 服务。

    • index.py,包含 Lambda 函数的逻辑。此函数只输出字符串 Hello World 及 ISO 格式的时间戳。

    • README.md – 包含有关存储库的一般信息。

    • template-configuration.json,包含带有占位符的项目 ARN,用于使用项目 ID 标记资源

    • template.yml,AWS SAM 使用它打包 Web 服务和在 API Gateway 中创建 API。

    CodeCommit 中的项目源代码文件

    要查看某个文件的内容,请从列表中选择该文件。

    有关 CodeCommit 控制台的更多信息,请参阅 AWS CodeCommit 用户指南

在 CodePipeline 中浏览管道
  1. 要查看有关管道的信息,在项目在 AWS CodeStar 控制台中打开的情况下,请在导航栏上选择管道,即可看到管道包括:

    • 阶段 - 从 CodeCommit 获取源代码。

    • 构建阶段 - 使用 CodeBuild 构建源代码。

    • Deploy 阶段 - 使用 AWS SAM 部署构建好的源代码和 AWS 资源。

  2. 要查看有关管道的更多信息,请在管道详细信息中,选择要在 CodePipeline 控制台中打开的管道。

有关 CodePipeline 控制台的信息,请参阅 AWS CodePipeline 用户指南

概览页面上浏览项目活动和 AWS 服务资源
  1. 在 AWS CodeStar 控制台中打开您的项目,并从导航栏中选择概览

  2. 查看项目活动项目资源列表。

在 Lambda 中浏览函数
  1. 在项目在 AWS CodeStar 控制台中打开的情况下,在侧导航栏上选择概览

  2. 项目资源ARN 列中,选择 Lambda 函数的链接。

    函数代码显示在 Lambda 控制台中。

有关使用 Lambda 控制台的更多信息,请参阅 AWS Lambda 开发人员指南

在 API Gateway 中浏览 API
  1. 在项目在 AWS CodeStar 控制台中打开的情况下,在侧导航栏上选择概览

  2. 项目资源ARN 列中,选择 Amazon API Gateway API 的链接。

    该 API 的资源显示在 API Gateway 控制台中。

有关使用 API Gateway 控制台的更多信息,请参阅 API Gateway 开发人员指南

步骤 3:测试 Web 服务

在此步骤中,将测试 AWS CodeStar 刚刚构建和部署的 Web 服务。

  1. 在上一步中的项目仍然打开的情况下,在导航栏上选择管道

  2. 确保构建部署阶段显示已成功,然后再继续。这可能需要花几分钟的时间。

    注意

    如果任何阶段显示失败,请参阅以下内容获取问题排查帮助:

  3. 选择查看应用程序

在 Web 浏览器中打开的新标签页上,Web 服务显示以下响应输出:

{"output": "Hello World", "timestamp": "2017-08-30T15:53:42.682839"}

步骤 4:设置本地工作站以编辑项目代码

在此步骤中,将设置本地工作站,以便编辑 AWS CodeStar 项目的源代码。本地工作站可以是运行 macOS、Windows 或 Linux 的物理或虚拟计算机。

  1. 在上一步中的项目仍然打开的情况下,执行以下操作:

    • 在导航栏中,选择 IDE,然后展开访问您的项目代码

    • 选择命令行界面下方的查看说明

      如果安装了 Visual Studio 或 Eclipse,则改为选择 Visual StudioEclipse 下的查看说明,按照说明进行操作,然后跳到 步骤 5:向 Web 服务添加逻辑

  2. 按照说明完成以下任务:

    1. 在本地工作站上设置 Git。

    2. 使用 IAM 控制台为您的 IAM 用户生成 Git 凭证。

    3. 将项目的 CodeCommit 存储库克隆到本地工作站上。

  3. 在左侧导航栏中,选择项目,返回到项目概述。

步骤 5:向 Web 服务添加逻辑

在此步骤中,将使用本地工作站向 Web 服务添加逻辑。具体来说,将添加一个 Lambda 函数,然后将其连接到 API Gateway 中的 API。

  1. 在本地工作站上,转到包含克隆的源代码存储库的目录。

  2. 在此目录中,创建名为 hello.py 的文件。添加以下代码,然后保存文件:

    import json def handler(event, context): data = { 'output': 'Hello ' + event["pathParameters"]["name"] } return { 'statusCode': 200, 'body': json.dumps(data), 'headers': {'Content-Type': 'application/json'} }

    上述代码将输出字符串 Hello 及调用方发送到此函数的字符串。

  3. 在同一目录中,打开 template.yml 文件。将以下代码添加到文件末尾,然后保存文件:

    Hello: Type: AWS::Serverless::Function Properties: FunctionName: !Sub 'awscodestar-${ProjectId}-lambda-Hello' Handler: hello.handler Runtime: python3.7 Role: Fn::GetAtt: - LambdaExecutionRole - Arn Events: GetEvent: Type: Api Properties: Path: /hello/{name} Method: get

    AWS SAM 将使用此代码在 Lambda 中创建一个函数,向 API Gateway 中的 API 添加一个新方法和路径,然后将此方法和路径连接到新函数。

    注意

    上述代码的缩进很重要。如果添加的代码与所示代码有任何差异,都可能无法正确构建项目。

  4. 运行 git add .,将文件更改添加到克隆存储库的暂存区域。不要忘记圆点 (.),它表示添加所有更改过的文件。

    注意

    如果使用 Visual Studio 或 Eclipse 而不是命令行,则使用 Git 的说明可能有所不同。请参阅 Visual Studio 或 Eclipse 文档。

  5. 运行 git commit -m "Added hello.py and updated template.yaml." 以提交克隆存储库中的暂存文件

  6. 运行 git push 以将提交推送到远程存储库。

    注意

    系统可能会提示您输入之前为您生成的登录凭证。要避免每次与远程存储库交互时都显示提示,可以考虑安装和配置 Git 凭证管理器。例如,在 macOS 或 Linux 上,可以在终端中运行 git config credential.helper 'cache --timeout 900',指示显示提示的间隔不得短于 15 分钟。或者,也可以运行 git config credential.helper 'store --file ~/.git-credentials' 永久关闭提示。Git 将凭证以明文形式存储在主目录中的纯文本文件中。有关更多信息,请参阅 Git 网站上的 Git 工具 - 凭证存储

AWS CodeStar 检测到推送后,将指示 CodePipeline 使用 CodeBuild 和 AWS SAM 自动重新构建和重新部署 Web 服务。您可以在管道页面上查看部署进度。

AWS SAM 为新函数提供名称 awscodestar-my-sam-project-lambda-Hello-RANDOM_ID,其中:

  • my-sam-project 是项目的 ID。

  • Hellotemplate.yaml 文件中指定的函数 ID。

  • RANDOM_ID 是一个随机 ID,AWS SAM 向函数分配此 ID 来确保唯一性。

步骤 6:测试增强型 Web 服务

在此步骤中,将测试 AWS CodeStar 基于在上一步中添加的逻辑构建和部署的增强型 Web 服务。

  1. 在项目仍在 AWS CodeStar 控制台中打开的情况下,在导航栏上选择管道

  2. 确保管道已再次运行,且构建部署阶段显示已成功,然后再继续。这可能需要花几分钟的时间。

    注意

    如果任何阶段显示失败,请参阅以下内容获取问题排查帮助:

  3. 选择查看应用程序

    在 Web 浏览器中打开的新标签页上,Web 服务显示以下响应输出:

    {"output": "Hello World", "timestamp": "2017-08-30T15:53:42.682839"}
  4. 在该标签的地址框中,将路径 /hello/ 和您的名字添加到 URL 末尾(例如,https://API_ID.execute-api.REGION_ID.amazonaws.com/Prod/hello/YOUR_FIRST_NAME),然后按 Enter

如果您的名字是 Mary,Web 服务将显示以下响应输出:

{"output": "Hello Mary"}

步骤 7:向 Web 服务添加单元测试

在此步骤中,将使用本地工作站添加 AWS CodeStar 对 Web 服务运行的测试。此测试将取代之前做过的手动测试。

  1. 在本地工作站上,转到包含克隆的源代码存储库的目录。

  2. 在此目录中,创建名为 hello_test.py 的文件。添加以下代码,然后保存文件。

    from hello import handler def test_hello_handler(): event = { 'pathParameters': { 'name': 'testname' } } context = {} expected = { 'body': '{"output": "Hello testname"}', 'headers': { 'Content-Type': 'application/json' }, 'statusCode': 200 } assert handler(event, context) == expected

    此测试检查 Lambda 函数输出是否为预期格式。如果是,则测试成功。否则,测试失败。

  3. 在同一目录中,打开 buildspec.yml 文件。使用以下代码替换文件内容,然后保存文件。

    version: 0.2 phases: install: runtime-versions: python: 3.7 commands: - pip install pytest # Upgrade AWS CLI to the latest version - pip install --upgrade awscli pre_build: commands: - pytest build: commands: # Use AWS SAM to package the application by using AWS CloudFormation - aws cloudformation package --template template.yml --s3-bucket $S3_BUCKET --output-template template-export.yml # Do not remove this statement. This command is required for AWS CodeStar projects. # Update the AWS Partition, AWS Region, account ID and project ID in the project ARN on template-configuration.json file so AWS CloudFormation can tag project resources. - sed -i.bak 's/\$PARTITION\$/'${PARTITION}'/g;s/\$AWS_REGION\$/'${AWS_REGION}'/g;s/\$ACCOUNT_ID\$/'${ACCOUNT_ID}'/g;s/\$PROJECT_ID\$/'${PROJECT_ID}'/g' template-configuration.json artifacts: type: zip files: - template-export.yml - template-configuration.json

    此构建规范指示 CodeBuild 向构建环境中安装 Python 测试框架 pytest。CodeBuild 使用 pytest 运行单元测试。构建规范的其余部分与以前相同。

  4. 使用 Git 将这些更改推送到远程存储库。

    git add . git commit -m "Added hello_test.py and updated buildspec.yml." git push

步骤 8:查看单元测试结果

在此步骤中,将看到单元测试成功还是失败。

  1. 在项目仍在 AWS CodeStar 控制台中打开的情况下,在导航栏上选择管道

  2. 请确保管道已再次运行,然后再继续。这可能需要花几分钟的时间。

    如果单元测试成功,则构建阶段显示已成功

  3. 要查看单元测试结果的详细信息,请在构建阶段中选择 CodeBuild 链接。

  4. 在 CodeBuild 控制台中,在构建项目: my-sam-project 页面上的构建历史记录中,选择表的构建运行列中的链接。

  5. my-sam-project:BUILD_ID 页面的构建日志中,选择查看完整日志链接。

  6. 在 Amazon CloudWatch Logs 控制台中,在日志输出中查找类似以下内容的测试结果。在以下测试结果中,测试通过:

    ... ============================= test session starts ============================== platform linux2 -- Python 2.7.12, pytest-3.2.1, py-1.4.34, pluggy-0.4.0 rootdir: /codebuild/output/src123456789/src, inifile: collected 1 item hello_test.py . =========================== 1 passed in 0.01 seconds =========================== ...

    如果测试失败,日志输出中应包含详细信息,可帮助您进行问题排查。

第 9 步:清除

在此步骤中,将清理项目,以免继续产生与此项目相关的费用。

如果需要继续使用此项目,可以跳过这一步,但您的 AWS 账户可能会继续计费。

  1. 在项目仍在 AWS CodeStar 控制台中打开的情况下,在导航栏上选择设置

  2. 项目详细信息页上,选择删除项目

  3. 输入 delete,让删除资源框处于选中状态,然后选择删除

    重要

    如果清除此框,将从 AWS CodeStar 中删除项目记录,但项目的许多 AWS 资源都将保留。您的 AWS 账户可能需要继续支付相应费用。

如果仍有 AWS CodeStar 为此账户创建的 Amazon S3 存储桶,请执行以下步骤将其删除:

  1. 通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在存储桶列表中,选择 aws-codestar-REGION_ID-ACCOUNT_ID-my-sam-project--pipe 旁边的图标,其中:

    • REGION_ID 是刚刚删除的项目的 AWS 区域。

    • ACCOUNT_ID 是您的 AWS 账户 ID。

    • my-sam-project 是刚刚删除的项目的 ID。

  3. 选择清空存储桶。输入存储桶名称,然后选择确认

  4. 选择删除存储桶。输入存储桶名称,然后选择确认

后续步骤

至此,您已完成本教程,建议您查看以下资源: