教程:使用可组合的 PDK 蓝图创建全栈应用程序
Amazon CodeCatalyst 提供了许多不同的蓝图,可帮助您快速开始处理自己的项目。使用蓝图创建的项目包含所需的资源,其中包括源存储库、示例源代码、CI/CD 工作流、构建和测试报告以及集成式事务跟踪工具。但是,有时您可能需要逐步构建项目,或者向蓝图所创建的现有项目添加功能。也可以使用蓝图做到这一点。本教程演示了如何开始使用单个蓝图来设定基础,并将所有项目代码存储在单个存储库中。之后,您可以方便地在初始蓝图上添加其他蓝图,从而灵活地整合其他资源和基础设施。通过此构建块方法,您可以满足多个项目的特定需求。
本教程说明了如何将多个 AWS Project Development Kit(AWS PDK)蓝图组合在一起,创建一个包含 React 网站、Smithy API 和支持的 CDK 基础设施的应用程序,并将它部署到 AWS。AWS PDK 提供了常用模式的构建块以及用于管理和构建项目的开发工具。有关更多信息,请参阅 AWS PDK GitHub source repository
以下 PDK 蓝图旨在相互结合使用,以可组合的方式构建应用程序:
Monorepo
– 创建一个根级项目来管理 monorepo 中项目之间的相互依赖关系。该项目还提供构建缓存和依赖关系可视化。 Type Safe API
– 创建可在 Smithy 或 OpenAPI v3 中定义的 API,并管理构建时代码生成,以便您能够以类型安全的方式实现 API 并与之交互。提供一个 CDK 构造,用于管理将 API 部署到 API Gateway 这一操作并配置自动输入验证。 Cloudscape React 网站
– 创建一个使用 Cloudscape 构建的基于 React 的网站,该网站预先集成了 Cognito Auth 和(可选)您创建的 API,使您能够安全地调用 API。 基础设施
– 创建一个项目,用于设置部署应用程序所需的所有与 CDK 相关的基础设施。它还经过了预配置,可以在您每次构建时根据您的 CDK 代码生成图表。 DevOps
– 创建与在 AWS Project Development Kit(AWS PDK)中找到的构造兼容的 DevOps 工作流。
本教程还包括查看已部署的应用程序、邀请其他用户处理该应用程序,以及使用拉取请求对代码进行更改所需的步骤,在合并拉取请求时会自动构建这些更改并部署到所连接的 AWS 账户中的资源。
当您创建包含 PDK 蓝图的项目时,将使用 CodeCatalyst 项目中的以下资源创建您的项目:
配置为 monorepo 的源存储库。
一个工作流,用于运行静态代码分析和许可检查,并会在对默认分支进行更改时构建并部署示例代码。每次更改代码时,都会生成架构图。
事务面板和待办事项,可用于计划和跟踪工作。
带有自动报告的测试报告套件。
主题
先决条件
要创建和更新项目,您必须完成设置并登录 CodeCatalyst 中的任务,如下所示:
-
拥有用于登录 CodeCatalyst 的 AWS 构建者 ID。
-
属于某个空间,并且在该空间中已为您分配了空间管理员或高级用户角色。有关更多信息,请参阅创建空间、向用户授予空间权限和空间管理员角色。
-
具有与您的空间关联的 AWS 账户,并具有您在注册期间创建的 IAM 角色。例如,在注册期间,您可以选择使用名为 CodeCatalystWorkflowDevelopmentRole-
spaceName
的角色策略来创建服务角色。该角色的名称为CodeCatalystWorkflowDevelopmentRole-
,并且将附加唯一标识符。有关角色和角色策略的更多信息,请参阅了解 CodeCatalystWorkflowDevelopmentRole-spaceName 服务角色。有关创建角色的步骤,请参阅为您的账户和空间创建 CodeCatalystWorkflowDevelopmentRole-spaceName 角色。spaceName
步骤 1:创建 monorepo 项目
首先,使用 PDK - Monorepo 蓝图创建 monorepo 代码库以作为基础,这可让您添加其他 PDK 蓝图。
使用 PDK - Monorepo 蓝图创建项目
通过访问 https://codecatalyst.aws/
打开 CodeCatalyst 控制台。 -
在 CodeCatalyst 控制台中,导航到要在其中创建项目的空间。
-
在空间控制面板上,选择创建项目。
-
选择从蓝图开始。
-
选择 PDK - Monorepo 蓝图,然后选择下一步。
-
在命名项目下,输入要分配给项目的名称及其关联资源名称。该名称在空间内必须是唯一的。
-
在项目资源下,执行以下操作:
在主要编程语言下,选择要用于开发项目代码的语言。您可以选择 TypeScript、Java 或 Python。
选择代码配置
在源存储库文本输入字段中,输入将创建新存储库的源存储库的名称,或从现有的已链接存储库中进行选择。现有存储库必须为空。有关更多信息,请参阅链接源存储库。
(可选)从程序包管理器下拉菜单中,选择程序包管理器。仅当您选择 TypeScript 作为您的主要编程语言时,才必须执行此操作。
-
(可选)要预览将基于所选项目参数生成的代码,请从生成项目预览中选择查看代码。
-
(可选)从蓝图卡中选择查看详细信息,查看蓝图的具体详细信息,如蓝图架构概述、所需连接和权限,以及蓝图创建的资源种类。
-
选择创建项目来创建您的 monorepo 项目。创建的根级项目将管理 monorepo 中项目之间的相互依赖关系,并提供构建缓存和依赖项管理。
有关项目蓝图的更多信息,请参阅使用 CodeCatalyst 蓝图创建综合项目。
PDK - Monorepo 蓝图仅生成项目的基础。要使用蓝图创建可用的应用程序,您需要添加其他 PDK 蓝图,例如 Type Safe API、Cloudscape React 网站、基础设施或 DevOps。在下一步中,您将向项目添加 Type Safe API。
步骤 2:将 Type Safe API 添加到项目
PDK - Type Safe API 蓝图可让您使用 Smithy 或 OpenAI v3 定义 API。它根据您的 API 定义生成运行时包,其中包括用于与您的 API 交互的客户端和用于实施您的 API 的服务器端代码。该蓝图还会为每个 API 操作生成一个具有类型安全的 CDK 构造。您可以将该蓝图添加到现有 PDK monorepo 项目中,从而为该项目添加 API 功能。
添加 PDK - Type Safe API 蓝图
-
在 monorepo 项目的导航窗格中,选择蓝图,然后选择添加蓝图。
-
选择 PDK - Type Safe API 蓝图,然后选择下一步。
-
在配置蓝图下,配置蓝图参数:
在模型语言下,选择用于定义 API 模型的语言。
在命名空间文本输入字段中,输入您的 API 的命名空间。
在 API 名称文本输入字段中,输入您的 API 的名称。
在 CDK 语言下,选择您的首选语言来编写在其中部署 API 的 CDK 基础设施。
选择处理程序语言下拉菜单,然后选择要实施用于 API 操作的处理程序的语言。
选择文档格式下拉菜单,然后选择要用于生成 API 文档所需的格式。
-
在代码更改选项卡中,查看建议的更改。拉取请求中显示的差异指明了创建拉取请求时对项目进行的更改。
-
如果您对在应用蓝图时将进行的建议更改满意,请选择添加蓝图。
创建拉取请求后,可以添加备注。可以将备注添加到拉取请求中或文件内的单独行中,也可以为整个拉取请求添加备注。您可以使用
@
符号后跟文件名的方式,添加指向文件等资源的链接。 -
从状态列中,选择 PDK - Type Safe API 蓝图行的待处理拉取请求,然后选择已打开的拉取请求的链接。
-
选择合并,再选择您的首选合并策略,然后选择合并以整合应用的蓝图中的更改。
合并拉取请求后,将在您的 monorepo 项目中生成一个新的
packages/apis/
文件夹,其中包含您配置的 Type Safe API 的所有与 API 相关的源代码。mypdkapi
-
在导航窗格中,选择蓝图以确认 PDK - Type Safe API 的状态显示最新。
步骤 3:为项目添加 Cloudscape React 网站
PDK - Cloudscape React 网站蓝图会生成一个网站。您可以关联可选参数(Type Safe API)以自动将网站配置为设置经过身份验证的类型安全客户端以及交互式 API 资源管理器,从而测试您的各种 API。
添加 PDK - Cloudscape React 网站蓝图
-
在 monorepo 项目的导航窗格中,选择蓝图,然后选择添加蓝图。
-
选择 PDK - Cloudscape React 网站蓝图,然后选择下一步。
-
在配置蓝图下,配置蓝图参数:
在网站名称文本输入字段中,输入您的网站的名称。
选择 Type Safe API 下拉菜单,然后选择要集成到网站中的 API 蓝图。通过传入 API,将设置经过身份验证的客户端并添加所需的依赖项、API 资源管理器和其他功能。
-
在代码更改选项卡中,查看建议的更改。拉取请求中显示的差异指明了创建拉取请求时对项目进行的更改。
-
如果您对在应用蓝图时将进行的建议更改满意,请选择添加蓝图。
创建拉取请求后,可以添加备注。可以将备注添加到拉取请求中或文件内的单独行中,也可以为整个拉取请求添加备注。您可以使用
@
符号后跟文件名的方式,添加指向文件等资源的链接。 -
从状态列中,选择 PDK - Cloudscape React 网址蓝图行的待处理拉取请求,然后选择已打开的拉取请求的链接。
-
选择合并,再选择您的首选合并策略,然后选择合并以整合应用的蓝图中的更改。
合并拉取请求后,将在您的 monorepo 项目中生成一个新的
packages/websites/
文件夹,其中包含您的新网站的所有源代码。my-website-name
-
在导航窗格中,选择蓝图以确认 PDK - Cloudscape React 网站的状态显示最新。
接下来,您将添加 PDK - 基础设施蓝图以生成基础设施,从而将您的网站部署到 AWS 云。
步骤 4:生成基础设施以将应用程序部署到 AWS 云
PDK - 基础设施蓝图设置一个程序包,其中包含所有用于部署网站和 API 的 CDK 代码。默认情况下,它还提供图表生成和与原型设计 nag pack 的一致性。
添加 PDK - 基础设施蓝图
-
在 monorepo 项目的导航窗格中,选择蓝图,然后选择添加蓝图。
-
选择 PDK - 基础设施蓝图,然后选择下一步。
-
在配置蓝图下,配置蓝图参数:
在 CDK 语言下,选择要用于开发基础设施的语言。
在堆栈名称文本输入字段中,输入为蓝图生成的 CloudFormation 堆栈的名称。
注意
请记下此堆栈名称,以便在下一步中用于设置 DevOps 工作流。
选择 Type Safe API 下拉菜单,然后选择要集成到网站中的 API 蓝图。
选择 Cloudscape React TS 网站下拉菜单,然后选择要在基础设施中部署的网站蓝图(例如,PDK - Cloudscape React 网站)。
-
在代码更改选项卡中,查看建议的更改。拉取请求中显示的差异指明了创建拉取请求时对项目进行的更改。
-
如果您对在应用蓝图时将进行的建议更改满意,请选择添加蓝图。
创建拉取请求后,可以添加备注。可以将备注添加到拉取请求中或文件内的单独行中,也可以为整个拉取请求添加备注。您可以使用
@
符号后跟文件名的方式,添加指向文件等资源的链接。 -
从状态列中,选择 PDK - 基础设施蓝图行的待处理拉取请求,然后选择已打开的拉取请求的链接。
-
选择合并,再选择您的首选合并策略,然后选择合并以整合应用的蓝图中的更改。
合并拉取请求后,将在您的 monorepo 项目中生成一个新的
packages/infra
文件夹,其中包含将您的项目部署到 AWS 云中的基础设施。 -
在导航窗格中,选择蓝图以确认 PDK - 基础设施的状态显示最新。
接下来,您将添加 PDK - DevOps 蓝图来部署您的应用程序。
步骤 5:设置 DevOps 工作流以部署您的项目
PDK - DevOps 蓝图生成所需的 DevOps 工作流,以便使用配置中指定的 AWS 账户和角色构建和部署项目。
添加 PDK - DevOps 蓝图
-
在 monorepo 项目的导航窗格中,选择蓝图,然后选择添加蓝图。
-
选择 PDK - DevOps 蓝图,然后选择下一步。
-
在配置蓝图下,配置蓝图参数:
在当前环境中选择引导式 CDK。
在堆栈名称文本输入字段中,输入要部署的 CloudFormation 堆栈的名称。这应与在步骤 4:生成基础设施以将应用程序部署到 AWS 云中为 PDK - 基础设施蓝图配置堆栈名称相匹配。
选择 AWS 账户连接下拉菜单,然后选择要用于资源的 AWS 账户。有关更多信息,请参阅将 AWS 账户添加到空间。
选择用于部署应用程序的角色下拉菜单,然后选择要用于部署项目应用程序的 IAM 角色。
注意
创建 IAM 角色时,请将
SourceArn
限制为在项目设置中找到的当前ProjectID
。有关更多信息,请参阅了解 CodeCatalystWorkflowDevelopmentRole-spaceName 服务角色。选择区域下拉菜单,然后选择要部署 monorepo 项目的区域。部署仅适用于已有所需的 AWS 服务的区域。有关更多信息,请参阅按区域划分的 AWS 服务
。
-
在代码更改选项卡中,查看建议的更改。拉取请求中显示的差异指明了创建拉取请求时对项目进行的更改。
-
如果您对在应用蓝图时将进行的建议更改满意,请选择添加蓝图。
创建拉取请求后,可以添加备注。可以将备注添加到拉取请求中或文件内的单独行中,也可以为整个拉取请求添加备注。您可以使用
@
符号后跟文件名的方式,添加指向文件等资源的链接。 -
从状态列中,选择 PDK - 基础设施蓝图行的待处理拉取请求,然后选择已打开的拉取请求的链接。
-
选择合并,再选择您的首选合并策略,然后选择合并以整合应用的蓝图中的更改。
合并拉取请求后,将在您的 monorepo 项目中生成一个新的
.codecatalyst/workflows
文件夹。 -
在导航窗格中,选择蓝图以确认 PDK - DevOps 的状态显示最新。
注意
此时,PDK - DevOps 蓝图以及对 PDK 蓝图进行的所有后续更改都将显著减慢,因为后台会生成 lockfile,以确保将来可以重复构建和部署。它将跨任意受支持的语言为所有程序包生成 lockfile。
步骤 6:确认发布工作流并查看您的网站
完成前面的步骤后,您可以确认发布工作流以确保将构建项目。
确认发布工作流并查看您的网站
-
在 monorepo 项目的导航窗格中,选择 CI/CD,然后选择工作流。
-
对于发布工作流,请选择最新的工作流运行以查看详细信息。有关更多信息,请参阅查看单个运行的状态和详细信息。
-
在工作流运行成功完成后,选择工作流中的最后一个操作(例如 Deploy-Beta-ap-souteast-2),然后选择变量。
-
通过将在变量表中找到的链接(例如
MyPDKApi
websiteDistributionDomainNameXXXXX)复制并粘贴到新的浏览器窗口中来查看已部署的网站。您需要一个 Amazon Cognito 账户才能登录您的网站。默认情况下,用户池未设置为允许自助注册。
-
导航到 AWS Cognito 控制台
。 -
从用户池表中,选择与 PDK - DevOps 蓝图创建的用户池相匹配的用户池名称,可在变量表中找到该名称(例如,infra
calculate
betaUserIdentityinfracalculate
betaUserIdentityIdentityPoolIdXXXXX)。有关更多信息,请参阅 Getting started with user pools。 -
选择创建用户。
-
配置用户信息参数:
在邀请消息下,选择发送电子邮件邀请。
在用户名文本输入字段中,输入用户名。
在电子邮件地址文本输入字段中,输入用户名。
在临时密码下,选择生成密码。
-
选择创建用户。
-
导航到您为用户信息参数输入的电子邮件账户,并使用临时密码打开电子邮件。记下此密码。
-
导航回已部署的网站,输入您创建的用户名和收到的临时密码,然后选择登录。
-
-
(可选)在工作流运行成功完成后,您还可以查看生成的图表。在 CodeCatalyst 中选择构件选项卡,为图表行选择下载,然后打开已下载的文件。
在 PDK 项目上进行协作和迭代
在设置项目后,您可以对源代码进行更改。您也可以邀请其他空间成员参与项目。PDK 蓝图可让您以迭代方式构建应用程序,仅在需要时添加所需的内容,同时保留对每个蓝图配置的完全控制。
步骤 1:邀请成员加入您的项目
您可以使用控制台邀请用户加入您的项目。您可以邀请空间成员或添加空间之外的名称。
要邀请用户加入您的项目,您必须使用项目管理员或空间管理员角色登录。
您无需邀请具有空间管理员角色的用户加入您的项目,因为他们具有对空间中的所有项目的隐式访问权限。
当您邀请一个用户加入您的项目(未分配空间管理员角色)时,该用户将显示在项目下的项目成员表中和空间下的项目成员表中。
从“项目设置”选项卡邀请成员加入您的项目
-
导航到您的项目。
提示
您可以在顶部导航栏中选择要查看的项目。
-
在导航窗格中,选择项目设置。
-
选择成员选项卡。
-
在项目成员中,选择邀请新成员。
-
键入新成员的电子邮件地址,选择该成员的角色,然后选择邀请。有关角色的更多信息,请参阅使用用户角色授予访问权限。
从项目概述页面邀请成员加入您的项目
-
导航到您的项目。
提示
您可以在顶部导航栏中选择要查看的项目。
-
选择成员 + 按钮。
-
键入新成员的电子邮件地址,选择该成员的角色,然后选择邀请。有关角色的更多信息,请参阅使用用户角色授予访问权限。
步骤 2:创建要协作处理并跟踪工作的事务
CodeCatalyst 可以协助您使用事务跟踪项目中涉及的功能、任务、错误以及其他任何工作。您可以创建事务来跟踪所需的工作和想法。默认情况下,创建事务时,事务会添加到待办事项中。您可以将事务移动到面板,在其中跟踪正在进行的工作。您也可以将事务分配给特定的项目成员。在此步骤中,创建一个事务以更改您的 PDK 项目。
创建事务
通过访问 https://codecatalyst.aws/
打开 CodeCatalyst 控制台。 -
导航到要在其中创建事务的 monorepo 项目。
-
在项目主页上,选择创建事务。或者,在导航窗格中,选择事务。
-
选择创建事务。
注意
在使用网格视图时,也可以内联方式添加事务。
-
输入事务的标题。
-
(可选)输入描述。对于事务,请输入以下描述:
a change in the src/mysfit_data.json file.
。您可以使用 Markdown 添加格式。 -
(可选)选择事务的状态、优先级、估算。
-
(可选)添加现有标签或创建一个新标签并通过选择 + 添加标签来添加该标签。
要添加现有标签,请从列表中选择该标签。您可以在字段中输入一个搜索词来搜索项目中所有包含该搜索词的标签。
要创建并添加新标签,请在搜索字段中输入要创建的标签的名称,然后按 Enter。
-
(可选)通过选择 + 添加被分派人来添加被分派人。您可以通过选择 + 添加我来快速将自己添加为被分派人。
提示
您可以选择将事务分配给 Amazon Q,让 Amazon Q 尝试解决该事务。有关更多信息,请参阅教程:使用 CodeCatalyst 生成式人工智能功能来加快开发工作。
此功能要求为空间启用生成式人工智能功能。有关更多信息,请参阅 Managing generative AI features。
-
(可选)添加现有的自定义字段或创建新的自定义字段。事务可具有多个自定义字段。
要添加现有的自定义字段,请从列表中选择该自定义字段。您可以在字段中输入一个搜索词来搜索项目中所有包含该搜索词的自定义字段。
要创建并添加新的自定义字段,请在搜索字段中输入要创建的自定义字段的名称,然后按 Enter。然后选择要创建的自定义字段的类型并设置一个值。
-
选择创建事务。右下角将显示一条通知:如果已成功创建事务,则会显示一条确认消息,指明已成功创建事务。如果事务创建失败,则会显示一条错误消息,指明失败的原因。之后,您可以选择重试以进行编辑并重试创建事务,或选择放弃以放弃事务。选择这两个选项都将关闭通知。
注意
在创建一个事务时,无法将拉取请求链接到该事务。不过,您可以在创建事务后编辑它,以添加拉取请求的链接。
有关更多信息,请参阅在 CodeCatalyst 中跟踪和整理有关事务的工作。
步骤 3:查看您的源存储库
您可以在 Amazon CodeCatalyst 中查看与项目关联的源存储库。对于 CodeCatalyst 中的源存储库,存储库的概述页面提供了该存储库中的信息和活动的快速概览,包括:
-
存储库的描述(如果有)
-
存储库中的分支数量
-
存储库的未处理拉取请求数量
-
存储库的相关工作流数量
-
默认分支或您选择的分支中的文件和文件夹
-
显示分支的最后一次提交的标题、作者和日期
-
以 Markdown 格式呈现的 README.md 文件的内容(如果包含任何 README.md 文件)
该页面还提供指向存储库的提交、分支和拉取请求的链接,以及打开、查看和编辑单个文件的快速方法。
注意
您无法在 CodeCatalyst 控制台中查看链接的存储库的相关信息。要查看链接的存储库的相关信息,请在存储库列表中选择链接,在托管该存储库的服务中打开该存储库。
导航到项目的源存储库
-
导航到您的项目,然后执行下列操作之一:
在项目的摘要页面上,从列表中选择所需的存储库,然后选择查看存储库。
-
在导航窗格中,选择代码,然后选择源存储库。在源存储库中,从列表中选择存储库的名称。您可以通过在筛选栏中键入部分存储库名称,筛选存储库列表。
-
在存储库主页上,查看存储库的内容以及有关关联资源的信息,例如拉取请求和工作流的数量。默认情况下,会显示默认分支的内容。您可通过选择此下拉列表中的其他分支来更改视图。
提示
您还可以通过在项目摘要页面中选择查看项目代码来快速导航到项目的存储库。
步骤 4:创建开发环境并更改代码
在此步骤中,创建一个开发环境并对代码进行更改,然后将这些更改合并到主分支中。本教程将引导您完成一个简单的 AWS PDK 项目,您也可以按照 AWS PDK GitHub repository
使用新分支创建开发环境
-
在 monorepo 项目的导航窗格中,执行下列操作之一:
选择概述,然后导航到我的开发环境部分。
选择代码,然后选择开发环境。
选择代码,再选择源存储库,然后选择要为其创建开发环境的 monorepo 存储库。
-
从下拉菜单中选择受支持的 IDE。请参阅开发环境支持的集成式开发环境了解更多信息。
-
选择克隆存储库。
-
选择要克隆的存储库,选择在新分支中工作,在分支名称字段中输入分支名称,然后从创建分支自下拉菜单中选择要从中创建新分支的分支。
注意
如果您从源存储库页面或从特定的源存储库创建开发环境,则无需选择存储库。这将从您在源存储库页面中选择的源存储库创建开发环境。
-
(可选)在别名 – 可选中,输入开发环境的别名。
-
(可选)选择开发环境配置编辑按钮,编辑开发环境的计算、存储或超时配置。
-
(可选)在 Amazon Virtual Private Cloud (Amazon VPC) - 可选中,从下拉菜单中选择要与开发环境关联的 VPC 连接。
如果为您的空间设置了默认 VPC,则开发环境将连接到该 VPC。您可以通过关联其他 VPC 连接来覆盖此设置。另请注意,与 VPC 连接的开发环境不支持 AWS Toolkit。
注意
在创建具有 VPC 连接的开发环境时,会在 VPC 中创建一个新的网络接口。CodeCatalyst 使用关联的 VPC 角色与该接口进行交互。此外,请确保您的 IPv4 CIDR 块未配置为
172.16.0.0/12
IP 地址范围。 -
选择创建。在创建开发环境时,开发环境状态列将显示正在启动,开发环境创建完成后,状态列将显示正在运行。
在开发环境运行后,您可以在 CodeCatalyst 中使用生成的示例应用程序,具体方式是使用拉取请求对代码进行更改,在合并拉取请求时会自动构建这些更改并部署到所连接的 AWS 账户中的资源。monorepo 提供了一个 devfile,因此所有必需的全局依赖项和运行时都会自动出现。
更改项目中的代码
-
在开发环境的工作终端中,导航到您的 monorepo 项目,然后通过运行以下命令来安装项目依赖项:
npx projen install
-
导航到
packages/apis/
,其中定义了 API 操作示例。在本教程中,您将构建一个将两个数字相加的简单mypdkapi
/model/src/main/smithy/operations/say-hello.smithyCalculate
操作。更改代码以定义此操作,包括其输入和输出。示例:
$version: "2" namespace com.aws @http(method: "
POST
", uri: "/calculate
") @handler(language: "typescript") operationCalculate
{ input := {@required numberA: Integer @required numberB: Integer
} output := {@required result: Integer
} }@handler
特性告知 Type Safe API,您将以用 TypeScript 编写的 AWS Lambda 处理程序的形式实施此操作。Type Safe API 将为此操作生成一个存根,以供您在 TypeScript 中实施。这将添加@required
特性,这意味着它将在运行时由部署的 API 网关强制执行。有关更多信息,请参阅 Smithy documentation。 -
使用与您的代码更改一致的文件名来重命名
/say-hello.smithy
(例如,calculate.smithy
)。 -
导航到
packages/apis/
,然后对代码进行更改以挂接操作。您可以通过在此文件的mypdkapi
/model/src/main/smithy/main.smithyoperations
字段中列出/calculate.smithy
中定义的Calculate
操作来公开该操作。示例:
$version: "2" namespace com.aws use aws.protocols#restJson1 /// A sample smithy api @restJson1 service MyPDKApi { version: "1.0" operations: [
Calculate
] errors: [ BadRequestError NotAuthorizedError InternalFailureError ] } -
通过运行以下命令构建更改:
npx projen build
注意
(可选)您可以传入
--parallel X
标志,它将在X
核心之间分配构建。由于添加了
@handler
特性,因此在构建完成后将生成以下文件:-
/packages/apis/
mypdkapi
/handlers/typescript/src/calculate.ts
-
/packages/apis/
mypdkapi
/handlers/typescript/test/calculate.test.ts
-
-
浏览找到
packages/apis/
,然后对代码进行更改。此文件是为 API 调用的服务器处理程序。mypdkapi
/handlers/typescript/src/calculate.ts
import { calculateHandler, CalculateChainedHandlerFunction, INTERCEPTORS, Response, LoggingInterceptor, } from 'mypdkapi-typescript-runtime'; /** * Type-safe handler for the Calculate operation */ export const calculate: CalculateChainedHandlerFunction = async (request) => { LoggingInterceptor.getLogger(request).info('Start Calculate Operation'); const { input } = request; return
Response.success
({result: input.body.numberA + input.body.numberB,
}); }; /** * Entry point for the AWS Lambda handler for the Calculate operation. * The calculateHandler method wraps the type-safe handler and manages marshalling inputs and outputs */ export const handler = calculateHandler(...INTERCEPTORS, calculate); -
浏览找到
/packages/apis/
文件,然后对代码进行更改以更新单元测试。mypdkapi
/handlers/typescript/test/calculate.test.ts
示例:
import { CalculateChainedRequestInput,
CalculateResponseContent,
} from 'mypdkapi-typescript-runtime'; import { calculate, } from '../src/calculate'; // Common request arguments const requestArguments = { chain: undefined as never, event: {} as any, context: {} as any, interceptorContext: { logger: { info: jest.fn(), }, }, } satisfies Omit<CalculateChainedRequestInput, 'input'>; describe('Calculate', () => { it('should return correct sum
', async () => { const response = await calculate({ ...requestArguments, input: { requestParameters: {}, body: {numberA: 1, numberB: 2
} }, }); expect(response.statusCode).toBe(200
); expect((response.body asCalculateResponseContent
).result
).toEqual(3
); }); }); -
浏览找到
/packages/infra/main/src/constructs/apis/
文件,然后对代码进行更改,以便在 CDK 基础设施中为mypdkapi.ts
Calculate
操作添加集成。API 构造具有集成属性,可在其中传入之前添加的实施。由于您将 Smithy 模型中的@handler
特性用于Calculate
操作,因此您可以使用生成的CalculateFunction
CDK 构造(已预先配置)来指向处理程序实施。示例:
import { UserIdentity } from "@aws/pdk/identity"; import { Authorizers,
Integrations
} from "@aws/pdk/type-safe-api"; import { Stack } from "aws-cdk-lib"; import { Cors } from "aws-cdk-lib/aws-apigateway"; import { AccountPrincipal, AnyPrincipal, Effect, PolicyDocument, PolicyStatement, } from "aws-cdk-lib/aws-iam"; import { Construct } from "constructs"; import { Api,CalculateFunction
} from "calculateapi-typescript-infra"; /** * Api construct props. */ export interface CalculateApiProps { /** * Instance of the UserIdentity. */ readonly userIdentity: UserIdentity; } /** * Infrastructure construct to deploy a Type Safe API. */ export class CalculateApi extends Construct { /** * API instance */ public readonly api: Api; constructor(scope: Construct, id: string, props?: CalculateApiProps) { super(scope, id); this.api = new Api(this, id, { defaultAuthorizer: Authorizers.iam(), corsOptions: { allowOrigins: Cors.ALL_ORIGINS, allowMethods: Cors.ALL_METHODS, }, integrations:{ calculate: { integration: Integrations.lambda(new CalculateFunction(this, "CalculateFunction")) }
}, policy: new PolicyDocument({ statements: [ // Here we grant any AWS credentials from the account that the prototype is deployed in to call the api. // Machine to machine fine-grained access can be defined here using more specific principals (eg roles or // users) and resources (ie which api paths may be invoked by which principal) if required. // If doing so, the cognito identity pool authenticated role must still be granted access for cognito users to // still be granted access to the API. new PolicyStatement({ effect: Effect.ALLOW, principals: [new AccountPrincipal(Stack.of(this).account)], actions: ["execute-api:Invoke"], resources: ["execute-api:/*"], }), // Open up OPTIONS to allow browsers to make unauthenticated preflight requests new PolicyStatement({ effect: Effect.ALLOW, principals: [new AnyPrincipal()], actions: ["execute-api:Invoke"], resources: ["execute-api:/*/OPTIONS/*"], }), ], }), }); // Grant authenticated users access to invoke the api props?.userIdentity.identityPool.authenticatedRole.addToPrincipalPolicy( new PolicyStatement({ effect: Effect.ALLOW, actions: ["execute-api:Invoke"], resources: [this.api.api.arnForExecuteApi("*", "/*", "*")], }), ); } } -
通过运行以下命令构建更改:
npx projen build
在项目完成构建后,您可以查看更新后的生成图表,可在 /packages/infra/main/cdk.out/cdkgraph/diagram.png
中找到该图表。该图表说明了如何添加该函数并将其挂接到创建的 API。在修改 CDK 代码时,也将更新该图表。
现在,您可以通过将更改推送并合并到存储库的主分支来部署它们。
步骤 5:推送并合并代码更改
提交并推送代码更改,然后可以将其合并到源存储库的主分支中。
将更改推送到特征分支
-
通过运行以下命令提交更改并将其推送到特征分支:
git add .
git commit -m "
my commit message
"git push
推送更改将触发特征分支的新工作流运行,您可以在 CodeCatalyst 控制台中进行查看。之后,您可以创建拉取请求以将更改合并至源存储库的主分支。将特征分支合并到主分支会触发发布工作流。您也可以将拉取请求链接到您的事务。
创建拉取请求并将其链接到事务
-
在 monorepo 项目中,执行下列操作之一:
-
在导航窗格中,依次选择代码、拉取请求和创建拉取请求。
-
在存储库主页上,选择更多,然后选择创建拉取请求。
-
在项目页面上,选择创建拉取请求。
-
-
在源代码库中,确保指定的源存储库是包含所提交代码的存储库。只有在您未从存储库的主页创建拉取请求时,才会显示此选项。
-
在目标分支中,在审查代码后,选择要将代码合并到的主分支。
-
在源分支中,选择包含所提交代码的特征分支。
-
在拉取请求标题中,输入一个标题,帮助其他用户了解需要审查的内容及其原因。
-
(可选)在拉取请求描述中,提供诸如事务链接或所做更改的描述之类的信息。
提示
您可以选择为我编写描述,让 CodeCatalyst 自动生成拉取请求中包含的更改的描述。您可以在将自动生成的描述添加到拉取请求后,对描述进行更改。
此功能要求为空间启用生成式人工智能功能。有关更多信息,请参阅在 Amazon CodeCatalyst 中管理生成式人工智能功能。
-
在事务中,选择链接事务,然后选择您在步骤 2:创建要协作处理并跟踪工作的事务中创建的事务。要取消链接事务,请选择“取消链接”图标。
-
(可选)在必需的审阅者中,选择“添加必需审阅者”。从项目成员列表中进行选择,添加审阅者。必需的审阅者必须批准更改,才能将拉取请求合并到目标分支。
注意
您不能将审阅者同时添加为必需的审阅者和可选的审阅者。您不能将自己添加为审阅者。
-
(可选)在可选的审阅者中,选择添加可选审阅者。从项目成员列表中进行选择,添加审阅者。可选的审阅者不必批准更改,这并不是将拉取请求合并到目标分支之前的必备要求。
-
您的拉取请求必须由审阅者或您自己审阅并合并到主分支中。有关更多信息,请参阅合并拉取请求。
当您的更改合并到源存储库的主分支中时,会自动触发新的工作流。
-
合并完成后,您可以将事务移至完成。
-
在导航窗格中,选择事务。
-
选择在步骤 2:创建要协作处理并跟踪工作的事务中创建的事务,再选择状态下拉列表,然后选择完成。
-
发布工作流将在成功运行后部署您的应用程序,以便您能够查看更改。
确认发布工作流并查看您的网站
-
在 monorepo 项目的导航窗格中,选择 CI/CD,然后选择工作流。
-
对于发布工作流,请选择最新的工作流运行以查看详细信息。有关更多信息,请参阅查看单个运行的状态和详细信息。
-
在工作流运行成功完成后,选择工作流中的最后一个操作(Deploy-Beta-ap-souteast-2),然后选择变量。
-
通过将
MyPDKApi
websiteDistributionDomainNameXXXXX 行中的链接复制并粘贴到新的浏览器窗口中来查看已部署的网站。 -
输入您在步骤 6:确认发布工作流并查看您的网站中创建的用户名和密码,然后选择登录。
-
(可选)测试应用程序中的更改。
-
选择 POST 下拉菜单。
-
为
numberA
和number B
输入两个值,然后选择执行。 -
确认响应正文中的结果。
-
随着时间的推移,PDK 蓝图的目录版本可能会发生变化。您可以将项目的蓝图更改为目录版本以便及时了解最新更改。在更改项目的蓝图版本之前,您可以查看代码更改和受影响的环境。有关更多信息,请参阅更改项目中的蓝图版本。