作者:Julian Wood 2024年1月16日 发表在 , , ,
分享
这是由 AWS 应用构建器的前端工程师 Anna Spysz 撰写的文章。
AWS 应用构建器允许用户通过在虚拟画布上拖放卡片创建 IaC 模板。这些卡片代表 CloudFormation资源,可以将它们进行连接以创建权限和引用。现在支持超过1100种 CloudFormation 资源,包括从 到 的所有内容。
以前,标准 CloudFormation 资源仅提供基本配置。例如,添加一个 将默认产生如下配置:
yaml MyAmplifyApp: Type: AWS::Amplify::App Properties: Name: <String>
在控制台上,您可以看到 AWS 应用构建器的界面:
现在,IDE 中的应用构建器利用生成性 AI 生成特定资源的配置,并通过 CloudFormation 模式进行验证,以确保输入有效。
在 VS Code 中处理 CloudFormation 或 (AWS SAM) 模板时,您可以使用您的
登录,并在应用构建器中生成多个建议配置。以下是为 AWS::Amplify::App 类型生成的 AI配置示例:
这些建议是特定于资源类型的,并经过校验以确保有效的值和有用的占位符。然后,您可以选择、使用和修改这些建议,以符合您的需求。
虽然您已了解如何生成一个资源的基本示例,但让我们看看如何借助 AI 生成的建议构建完整应用。本示例将重建一款无服务器应用,该应用来源于 的教程:“”。
如果您尚未安装 扩展,请在 VS Code 的 扩展 选项卡中找到并安装或更新至至少版本 2.1.0,以便出现 和应用构建器的界面:
接下来,您需要使用 Builder ID 启用 来提供生成性 AI的代码建议。最简单的方法是打开 Amazon Q 聊天,选择身份验证。在下一个屏幕上,选择 Builder ID 选项,然后使用您的 Builder ID登录。
登录后,您的连接将会出现在 VS Code 工具包面板中:
安装并用 Builder ID 连接完毕后,您可以开始构建。
template.yaml 文件。原始架构图如下:
首先,添加图中的服务,以草绘应用程序架构,同时创建可部署的 CloudFormation 模板:
增强组件 列表中,拖入一个 Lambda 函数和一个 Lambda 层。LexGenAIBotLambda。src/LexGenAIBotLambda,并将运行时更改为 Python。TextGeneration.lambda_handler,然后选择 保存 。Boto3Layer,并将其构建方法更改为 Python。将其源路径更改为 src/Boto3PillowPyshorteners.zip。template.yaml 文件现在已更新以包含这些资源。在源目录中,您可以看到一些生成的函数文件,以后将用教程中的函数和层替换这些文件。
在第一步中,您添加了一些资源,应用构建器生成的 IaC 包括最佳实践的默认设置。接下来,您将使用标准 CloudFormation 组件。
首先使用搜索框搜索并添加应用所需的多个标准组件。
AWS::Lambda::Permission 添加到画布中。AWS::IAM::Policy。AWS::IAM::Role 的资源。您的应用现在看起来如下:
有些标准资源已经具有您需要的所有默认值。例如,当您添加 AWS::Lambda::Permission 资源时,可以用以下内容替换占位符值:
yaml FunctionName: !Ref LexGenAIBotLambda Action: lambda:InvokeFunctionPrincipal: lexv2.amazonaws.com
其他资源,例如 IAM 角色和 IAM 策略,则有一个基础配置。这时您可以利用 AI 助手。选择一个 IAM 角色资源,然后选择 生成建议 以查看生成
AI 所建议的内容。
由于这些建议是由 (LLM) 生成的,因此它们每次生成的结果可能会有所不同。这些建议通过 CloudFormation 模式进行了验证,以确保有效性,并提供适合您需求的多种配置。
生成不同的配置使您了解资源的策略应该是什么样的,通常还会提供一些您可以用所需值填充的键。使用以下设置为每个资源替换生成的值(适用时)。
LexGenAIBotLambdaInvoke,并用以下内容替换其资源配置,然后选择 保存 :yaml Action: lambda:InvokeFunction FunctionName: !GetAttLexGenAIBotLambda.Arn Principal: lexv2.amazonaws.com
CfnLexGenAIDemoRole,并用以下内容替换其资源配置,然后选择 保存 :yaml AssumeRolePolicyDocument: Statement: - Action: sts:AssumeRole Effect: Allow Principal: Service: lexv2.amazonaws.com Version: '2012-10-17' ManagedPolicyArns: - !Join - '' - - 'arn:' - !Ref AWS::Partition - ':iam::aws:policy/AWSLambdaExecute'
LexGenAIBotLambdaServiceRole,并用以下内容替换其资源配置,然后选择 保存 :yaml AssumeRolePolicyDocument: Statement: - Action: sts:AssumeRole Effect: Allow Principal: Service: lambda.amazonaws.com Version: '2012-10-17' ManagedPolicyArns: - !Join - '' - - 'arn:' - !Ref AWS::Partition - ':iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'
LexGenAIBotLambdaServiceRoleDefaultPolicy,并用以下内容替换其资源配置,然后选择 保存 :`yaml PolicyDocument: Statement: - Action: - lex:* - logs:* - s3:DeleteObject
更新完每个资源的属性后,您可以看到它们之间的连接和分组自动生成:
要添加 机器人:
LexGenAIBot,并更新其配置如下:LexGenAIBot RoleArn: !GetAtt CfnLexGenAIDemoRole.Arn AutoBuildBotLocales: trueBotLocales: \- Intents: \- InitialResponseSetting: CodeHook:
EnableCodeHookInvocation: true IsActive: true PostCodeHookSpecification: {}
IntentClosingSetting: ClosingResponse: MessageGroupsList: \- Message:
PlainTextMessage: Value: Hi there, I'm 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: trueIsActive: true PostFulfillmentStatusSpecification: {} InitialResponseSetting:
CodeHook: EnableCodeHookInvocation: true IsActive: truePostCodeHookSpecification: {} 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: truePostFulfillmentStatusSpecification: {} InitialResponseSetting: CodeHook:
EnableCodeHookInvocation
Leave a Reply