使用生成基础设施作为代码与应用程序构建器 计算博客

更新时间: 2026-01-27 13:09:14 浏览:31

应用构建器中的基础设施即代码生成

作者:Julian Wood 2024年1月16日 发表在 Amazon CodeWhisperer AWS Amplify AWS应用构建器 无服务器架构永久链接 分享

这是由 AWS 应用构建器的前端工程师 Anna Spysz 撰写的文章。

重点总结

AWS 应用构建器自推出以来,今已扩展至 VS Code IDE,加入生成性 AI 伙伴,助力基础设施即代码IaC开发。该平台支持超过1100种 AWS CloudFormation 资源,可以通过拖放操作轻松构建应用架构。工作流中集成生成性 AI ,可以生成特定资源的配置,并被 CloudFormation 模式校验。

概述

AWS 应用构建器允许用户通过在虚拟画布上拖放卡片创建 IaC 模板。这些卡片代表 CloudFormation 资源,可以将它们进行连接以创建权限和引用。现在支持超过1100种 CloudFormation 资源,包括从 AWS Amplify 到 AWS XRay 的所有内容。

以前,标准 CloudFormation 资源仅提供基本配置。例如,添加一个 Amplify 应用资源 将默认产生如下配置:

yamlMyAmplifyApp Type AWSAmplifyApp Properties Name ltStringgt

在控制台上,您可以看到 AWS 应用构建器的界面:

现在,IDE 中的应用构建器利用生成性 AI 生成特定资源的配置,并通过 CloudFormation 模式进行验证,以确保输入有效。

在 VS Code 中处理 CloudFormation 或 AWS 无服务器应用模型 (AWS SAM) 模板时,您可以使用您的 Builder ID 登录,并在应用构建器中生成多个建议配置。以下是为 AWSAmplifyApp 类型生成的 AI 配置示例:

这些建议是特定于资源类型的,并经过校验以确保有效的值和有用的占位符。然后,您可以选择、使用和修改这些建议,以符合您的需求。

虽然您已了解如何生成一个资源的基本示例,但让我们看看如何借助 AI 生成的建议构建完整应用。本示例将重建一款无服务器应用,该应用来源于 Serverless Land 的教程:“利用 GenAI 能力构建聊天机器人”。

在 VS Code 中开始使用 AWS 工具包

如果您尚未安装 AWS 工具包 扩展,请在 VS Code 的 扩展 选项卡中找到并安装或更新至至少版本 210,以便出现 Amazon Q 和应用构建器的界面:

蘑菇加速器免费

接下来,您需要使用 Builder ID 启用 Amazon CodeWhisperer 来提供生成性 AI 的代码建议。最简单的方法是打开 Amazon Q 聊天,选择身份验证。在下一个屏幕上,选择 Builder ID 选项,然后使用您的 Builder ID 登录。

登录后,您的连接将会出现在 VS Code 工具包面板中:

使用应用构建器构建

安装并用 Builder ID 连接完毕后,您可以开始构建。

在新工作区中,创建一个应用程序文件夹和一个空白的 templateyaml 文件。打开该文件,通过选择右上角的图标启动应用构建器。

原始架构图如下:

首先,添加图中的服务,以草绘应用程序架构,同时创建可部署的 CloudFormation 模板:

从 增强组件 列表中,拖入一个 Lambda 函数和一个 Lambda 层。双击函数资源以编辑其属性。将 Lambda 函数的逻辑ID重命名为 LexGenAIBotLambda。将 源 路径更改为 src/LexGenAIBotLambda,并将运行时更改为 Python。将 处理器 值更改为 TextGenerationlambdahandler,然后选择 保存。双击层资源以编辑其属性。将层重命名为 Boto3Layer,并将其构建方法更改为 Python。将其源路径更改为 src/Boto3PillowPyshortenerszip。最后,将层与函数连接起来,以在它们之间添加引用。您的画布看起来如下:

templateyaml 文件现在已更新以包含这些资源。在源目录中,您可以看到一些生成的函数文件,以后将用教程中的函数和层替换这些文件。

在第一步中,您添加了一些资源,应用构建器生成的 IaC 包括最佳实践的默认设置。接下来,您将使用标准 CloudFormation 组件。

使用 AI 进行标准组件

首先使用搜索框搜索并添加应用所需的多个标准组件。

在资源搜索框中输入“lambda”,并将资源类型 AWSLambdaPermission 添加到画布中。在搜索框中输入“iam”,并添加类型 AWSIAMPolicy。添加两个类型为 AWSIAMRole 的资源。

您的应用现在看起来如下:

有些标准资源已经具有您需要的所有默认值。例如,当您添加 AWSLambdaPermission 资源时,可以用以下内容替换占位符值:

yamlFunctionName !Ref LexGenAIBotLambdaAction lambdaInvokeFunctionPrincipal lexv2amazonawscom

其他资源,例如 IAM 角色和 IAM 策略,则有一个基础配置。这时您可以利用 AI 助手。选择一个 IAM 角色资源,然后选择 生成建议 以查看生成 AI 所建议的内容。

由于这些建议是由 大语言模型 (LLM) 生成的,因此它们每次生成的结果可能会有所不同。这些建议通过 CloudFormation 模式进行了验证,以确保有效性,并提供适合您需求的多种配置。

生成不同的配置使您了解资源的策略应该是什么样的,通常还会提供一些您可以用所需值填充的键。使用以下设置为每个资源替换生成的值适用时。

双击“权限”资源以编辑设置。将逻辑ID更改为 LexGenAIBotLambdaInvoke,并用以下内容替换其资源配置,然后选择 保存:

yamlAction lambdaInvokeFunctionFunctionName !GetAtt LexGenAIBotLambdaArnPrincipal lexv2amazonawscom

双击“角色”资源以编辑设置。将逻辑ID更改为 CfnLexGenAIDemoRole,并用以下内容替换其资源配置,然后选择 保存:

yamlAssumeRolePolicyDocument Statement Action stsAssumeRole Effect Allow Principal Service lexv2amazonawscom Version 20121017ManagedPolicyArns !Join arn !Ref AWSPartition iamawspolicy/AWSLambdaExecute

双击“Role2”资源以编辑设置。将逻辑ID更改为 LexGenAIBotLambdaServiceRole,并用以下内容替换其资源配置,然后选择 保存:

yamlAssumeRolePolicyDocument Statement Action stsAssumeRole Effect Allow Principal Service lambdaamazonawscom Version 20121017ManagedPolicyArns !Join arn !Ref AWSPartition iamawspolicy/servicerole/AWSLambdaBasicExecutionRole

双击“策略”资源以编辑设置,将逻辑ID更改为 LexGenAIBotLambdaServiceRoleDefaultPolicy,并用以下内容替换其资源配置,然后选择 保存:

yamlPolicyDocument Statement Action lex logs s3DeleteObject s3GetObject s3ListBucket s3PutObject Effect Allow Resource Action bedrockInvokeModel Effect Allow Resource !Join arnawsbedrock !Ref AWSRegion foundationmodel/anthropicclaudev2Version 20121017PolicyName LexGenAIBotLambdaServiceRoleDefaultPolicyRoles !Ref LexGenAIBotLambdaServiceRole

更新完每个资源的属性后,您可以看到它们之间的连接和分组自动生成:

要添加 Amazon Lex 机器人:

在资源选择器中,搜索并添加类型 AWSLexBot。这是另一个检查 AI 建议配置的机会。将 Amazon Lex 机器人的逻辑 ID 更改为 LexGenAIBot,并更新其配置如下:

yamlDataPrivacy ChildDirected falseIdleSessionTTLInSeconds 300Name LexGenAIBotRoleArn !GetAtt CfnLexGenAIDemoRoleArnAutoBuildBotLocales trueBotLocales Intents InitialResponseSetting CodeHook EnableCodeHookInvocation true IsActive true PostCodeHookSpecification {} IntentClosingSetting ClosingResponse MessageGroupsList Message PlainTextMessage Value Hi there Im a GenAI Bot How can I help you Name WelcomeIntent SampleUtterances Utterance Hi Utterance Hey there Utterance Hello Utterance I need some help Utterance Help needed Utterance Can I get some help FulfillmentCodeHook Enabled true IsActive true PostFulfillmentStatusSpecification {} InitialResponseSetting CodeHook EnableCodeHookInvocation true IsActive true PostCodeHookSpecification {} Name GenerateTextIntent SampleUtterances Utterance Generate content for Utterance Create text Utterance Create a response for Utterance Text to be generated for FulfillmentCodeHook Enabled true IsActive true PostFulfillmentStatusSpecification {} InitialResponseSetting CodeHook EnableCodeHookInvocation

使用生成基础设施作为代码与应用程序构建器 计算博客