亚马逊云科技于今日推出一项全新功能,可将 [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 体验与 [Amazon Lambda](https://aws.amazon.com/cn/lambda/?trk=cndc-detail) 控制台代码编辑器集成使用。
[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 是一项由[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)(ML)驱动的服务,根据用自然语言编写的代码注释结合代码而生成代码建议,因此有助于提高开发人员的工作效率。
CodeWhisperer 作为面向 [JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/index.html?trk=cndc-detail)、[Visual Studio Code](https://aws.amazon.com/cn/visualstudiocode/?trk=cndc-detail) 和 [Amazon Cloud9](https://aws.amazon.com/cn/cloud9/?trk=cndc-detail) 等主要集成开发环境(IDE)的Amazon工具包扩展的组成部分而提供,目前支持 Python、Java 和 JavaScript。在 Lambda 控制台中,CodeWhisperer 可作为本地代码建议功能使用,这也是本文介绍的重点。
CodeWhisperer 目前提供预览版,允许申请加入等候名单。本文阐述了如何申请访问以及激活 Lambda 控制台的 CodeWhisperer。激活之后,CodeWhisperer 可以在您开发函数时在 Lambda 代码编辑器中按需提供代码建议。预览版期间,开发者可以免费使用 CodeWhisperer。
![文章 3 插图1.jpg](https://dev-media.amazoncloud.cn/9f69db2291af49c1ae9f5b256adfde43_%E6%96%87%E7%AB%A0%203%20%E6%8F%92%E5%9B%BE1.jpg "文章 3 插图1.jpg")
[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail)
Lambda 是一项[无服务器计算](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)服务,可运行代码来响应事件并为您自动管理底层计算资源。您可以从 200 多个 亚马逊云科技服务和软件即服务 (SaaS) 应用程序中触发 Lambda,且只需按您的使用量付费。
借助 Lambda,您可以直接在[亚马逊云科技管理控制台](https://aws.amazon.com/cn/console/?trk=cndc-detail)中构建您的函数,充分利用 CodeWhisperer 的集成优势。Lambda 控制台中的 CodeWhisperer 目前支持使用 Python和Node.js 运行时的函数。
在控制台中编写 Amazon Lambda 函数时,CodeWhisperer 会分析代码和注释,确定哪些云服务和公共库最适合特定任务,并直接在源代码编辑器中推荐代码片段。CodeWhisperer 提供的代码建议是基于在各种数据源(包括 Amazon 和开源代码)上训练的[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)模型。开发人员可以接受建议,或者干脆继续编写自己的代码。
### 申请访问 CodeWhisperer
CodeWhisperer 与 Lambda 的集成目前仅在弗吉尼亚州北部(us-east-1)地区提供预览版本。要在Lambda 控制台中使用 CodeWhisperer,您必须先在[这里](https://aws.amazon.com/cn/contact-us/?trk=cndc-detail)注册才可访问该服务的预览版,或直接从Lambda 控制台中申请访问。
在 Amazon Lambda 控制台中,选择 Code(代码) 选项卡下的 Code source(代码源) 编辑器,然后选择 Tools(工具) 菜单中的 Request [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) Access(请求访问 [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) )。
![文章 3 插图2.jpg](https://dev-media.amazoncloud.cn/b9c9eefbc6d74e9bbfec4ba7ec583f11_%E6%96%87%E7%AB%A0%203%20%E6%8F%92%E5%9B%BE2.jpg "文章 3 插图2.jpg")
在 Lambda 控制台中请求访问 CodeWhisperer
您还可以通过 **Preferences**(**参数**)子窗口发起访问申请。
![文章 3 插图3.jpg](https://dev-media.amazoncloud.cn/902c15889568421ba048d37c16d9c9f4_%E6%96%87%E7%AB%A0%203%20%E6%8F%92%E5%9B%BE3.jpg "文章 3 插图3.jpg")
在 Lambda 控制台的参数子窗口中请求访问 CodeWhisperer
选择任一选项,打开注册表格。
![文章 3 插图4.jpg](https://dev-media.amazoncloud.cn/0324b21288f14988bdf86341e0ae0087_%E6%96%87%E7%AB%A0%203%20%E6%8F%92%E5%9B%BE4.jpg "文章 3 插图4.jpg")
CodeWhisperer 注册[表格](https://aws.amazon.com/cn/contact-us/)
输入您的联系信息,包括您的亚马逊云科技帐户 ID,必需完成这一步骤才能启用 Amazon Lambda 控制台集成。一旦 CodeWhisperer 团队批准了您的请求,您将收到一封欢迎邮件。
### 在 Lambda 控制台中激活 Amazon CodeWhisperer
亚马逊云科技批准您访问预览版之后,您必须在 Lambda 控制台打开 CodeWhisperer 集成,并配置所需的权限。
在 **Tools(工具)** 菜单中,启用 **[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) Code Suggestions([Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 代码建议)。**
![文章 3 插图5.jpg](https://dev-media.amazoncloud.cn/a58090eb04ae45d9b260d3722276dbc2_%E6%96%87%E7%AB%A0%203%20%E6%8F%92%E5%9B%BE5.jpg "文章 3 插图5.jpg")
启用 CodeWhisperer 代码建议
您还可以通过 **Preferences(参数)** 子窗口启动代码建议:
![文章 3 插图6.jpg](https://dev-media.amazoncloud.cn/cd8eebb15b7f40058bac46fb81b2b4b1_%E6%96%87%E7%AB%A0%203%20%E6%8F%92%E5%9B%BE6.jpg "文章 3 插图6.jpg")
通过 Preferences(参数) 子窗口启动 CodeWhisperer 代码建议
首次激活 CodeWhisperer 时,您会看到一个弹出窗口,显示了使用这项服务的条款和条件。
![文章 3 插图7.png](https://dev-media.amazoncloud.cn/938d97bff699402c952b0eac77357a3f_%E6%96%87%E7%AB%A0%203%20%20%E6%8F%92%E5%9B%BE7.png "文章 3 插图7.png")
CodeWhisperer 预览版条款
阅读条款和条件,选择 **Accept(接受)** 继续。
### Amazon 身份和访问管理(IAM) 权限
您必须首先为您的 IAM 用户或角色启用恰当的[亚马逊云科技身份和访问管理 (IAM)](https://aws.amazon.com/cn/iam/?trk=cndc-detail) 权限,CodeWhisperer 才能在 Lambda 控制台中提供建议。除了 Lambda 控制台编辑器权限外,您还必须添加codewhisperer:GenerateRecommendations 权限。
下面是一个 IAM 策略示例,授予用户 Lambda 控制台和 CodeWhisperer 权限:
<!--StartFragment-->
```json
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "LambdaConsolePermissions",
"Effect": "Allow",
"Action": [
"lambda:AddPermission",
"lambda:CreateEventSourceMapping",
"lambda:CreateFunction",
"lambda:DeleteEventSourceMapping",
"lambda:GetAccountSettings",
"lambda:GetEventSourceMapping",
"lambda:GetFunction",
"lambda:GetFunctionCodeSigningConfig",
"lambda:GetFunctionConcurrency",
"lambda:GetFunctionConfiguration",
"lambda:InvokeFunction",
"lambda:ListEventSourceMappings",
"lambda:ListFunctions",
"lambda:ListTags",
"lambda:PutFunctionConcurrency",
"lambda:UpdateEventSourceMapping",
"iam:AttachRolePolicy",
"iam:CreatePolicy",
"iam:CreateRole",
"iam:GetRole",
"iam:GetRolePolicy",
"iam:ListAttachedRolePolicies",
"iam:ListRolePolicies",
"iam:ListRoles",
"iam:PassRole",
"iam:SimulatePrincipalPolicy"
],
"Resource": "*"
},
{
"Sid": "CodeWhispererPermissions",
"Effect": "Allow",
"Action": ["codewhisperer:GenerateRecommendations"],
"Resource": "*"
}
]
}
```
该示例仅供说明之用。最好的办法是使用 IAM 策略向IAM主体授予限制性权限,以满足[最低权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege?trk=cndc-detail)标准。
### 演示
使用以下键盘快捷键激活并使用代码建议:\
• 手动获取代码建议: Option+C (macOS), Alt+C (Windows)\
• 接受代码建议: Tab\
• 拒绝代码建议: ESC、Backspace、随意滑动、或继续输入,代码建议就会自动消失。
目前,IDE 扩展提供系统自动生成的建议,并且可显示多条建议。Lambda 控制台集成需要手动获取,而且仅显示一条建议。
以下是编写 Lambda 函数时使用 CodeWhisperer 的一些常见方法。
### 完成单行代码
输入单行代码时,CodeWhisperer 会给出如何完成这行代码的建议。
![文章 3 插图8.png](https://dev-media.amazoncloud.cn/64019373b8dd4499b5b760a0f94ff7de_%E6%96%87%E7%AB%A0%203%20%20%E6%8F%92%E5%9B%BE8.png "文章 3 插图8.png")
使用CodeWhisperer完成单行代码
### 生成完整函数
CodeWhisperer 可以根据您的函数签名或代码注释来生成整个函数。在下面的例子中,开发者编写了一个从 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) 读取文件的函数签名。CodeWhisperer 据此推荐使用 read_from_s3 方法来完成全部实现过程。
![文章 3 插图9.jpg](https://dev-media.amazoncloud.cn/d75ec6aa54bd4a1fa29f2d3c3eac3760_%E6%96%87%E7%AB%A0%203%20%E6%8F%92%E5%9B%BE9.jpg "文章 3 插图9.jpg")
使用 CodeWhisperer 生成完整函数
CodeWhisperer 的建议中可能包括导入语句,如上例所示。为了提高性能,最好的做法是手动将这些导入语句移到函数句柄之外。
### 通过注释生成代码
CodeWhisperer 也可以从注释中生成代码。下面的例子显示了CodeWhisperer如何生成代码来使用AWS APIs吧把文件上传到[ Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail)。编写一个描述预期函数的注释,并在下面一行激活CodeWhisperer建议。根据注释的上下文,CodeWhisperer会首先建议使用函数签名代码。
![文章 3 插图10.jpg](https://dev-media.amazoncloud.cn/24d3f0333d684f7bbb8b33c95573449c_%E6%96%87%E7%AB%A0%203%20%E6%8F%92%E5%9B%BE10.jpg "文章 3 插图10.jpg")
CodeWhisperer 通过注释生成函数签名代码
您接受函数签名之后,CodeWhisperer 会对其余的函数代码提出建议。
![文章 3 插图11.jpg](https://dev-media.amazoncloud.cn/56a4d9c854e640a28ed24a98535558be_%E6%96%87%E7%AB%A0%203%20%E6%8F%92%E5%9B%BE11.jpg "文章 3 插图11.jpg")
CodeWhisperer 通过注释生成函数代码
您接受建议之后,CodeWhisperer即完成了全部代码块。
![文章 3 插图12.jpg](https://dev-media.amazoncloud.cn/1b8a05d4f6114908b5bdf02e5a5fd2e2_%E6%96%87%E7%AB%A0%203%20%E6%8F%92%E5%9B%BE12.jpg "文章 3 插图12.jpg")
CodeWhisperer 生成代码,写入S3。
CodeWhisperer 可以帮助编写访问许多其他 Amazon 服务的代码。在下面的示例中,代码注释表明函数正在使用 [Amazon Simple Notification Service (SNS)](https://aws.amazon.com/cn/sns/?trk=cndc-detail) 发送通知。基于该注释,CodeWhisperer 建议使用函数签名。
![文章 3 插图13.png](https://dev-media.amazoncloud.cn/09b310e3b42d4d079499e351c4d7d250_%E6%96%87%E7%AB%A0%203%20%20%E6%8F%92%E5%9B%BE13.png "文章 3 插图13.png")
CodeWhisperer 为 SNS 建议建议函数签名
如果您接受建议的函数签名,CodeWhisperer 就会给出实现 send_notification 函数的完整建议。
![文章 3 插图14.png](https://dev-media.amazoncloud.cn/7779d42be13441fbb4e22655e228c0fc_%E6%96%87%E7%AB%A0%203%20%20%E6%8F%92%E5%9B%BE14.png "文章 3 插图14.png")
CodeWhisperer 为 SNS 生成发送通知函数
同样的程序也适用于 [Amazon DynamoDB](https://aws.amazon.com/cn/dynamodb/?trk=cndc-detail)。在编写指示函数从DynamoDB表中获取某个项目的代码注释时,CodeWhisperer建议使用函数签名。
![文章 3 插图15.png](https://dev-media.amazoncloud.cn/c8c1e9d17c674085a0bcdd17ef5026de_%E6%96%87%E7%AB%A0%203%20%20%E6%8F%92%E5%9B%BE15.png "文章 3 插图15.png")
CodeWhisperer建议的DynamoDB 函数签名
接受建议后,CodeWhisperer 会提出一个完整的代码片段来完成实施。
![文章 3 插图16.png](https://dev-media.amazoncloud.cn/adc3607b479747ccb21c6bae9882ea83_%E6%96%87%E7%AB%A0%203%20%20%E6%8F%92%E5%9B%BE16.png "文章 3 插图16.png")
CodeWhisperer DynamoDB代码片段
检查建议时,本例中常见的重构步骤是手动将对 DynamoDB 资源和表的引用移到 get_item 函数之外。
CodeWhisperer还可以推荐复杂的算法实现,例如 Insertion sort(插入排序)。
![文章 3 插图17.png](https://dev-media.amazoncloud.cn/4e5e3ac309bb4126941e67434299070d_%E6%96%87%E7%AB%A0%203%20%20%E6%8F%92%E5%9B%BE17.png "文章 3 插图17.png")
CodeWhisperer 插入排序。
最好的做法是始终检验代码建议的完整性和正确性。
CodeWhisperer 不仅在与 Amazon API 集成时提供建议的代码片段,而且可以帮助您实现正确处理错误等常见的编程风格。
### 结语
CodeWhisperer 是一个由[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)驱动的通用代码生成器,可以实时为您提供代码建议。在Lambda控制台中激活后,CodeWhisperer 会根据现有的代码和注释生成建议,从而帮助您加快在亚马逊云科技上开发应用程序。
访问 https://aws.amazon.com/codewhisperer/?trk=cndc-detail, 立即开始使用。欢迎向我们分享您的反馈意见,您可发送邮件至 codewhisperer@amazon.com。
获取更多关于[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)学习的资源,请访问[ Serverless Land](https://serverlessland.com/?trk=cndc-detail)。
##### 作者介绍
Mark Richman 亚马逊云科技高级解决方案架构师