AWS Lambda 上的 .NET 工作负载

模块 2

模块 2:.NET 开发工具

 学习模块

AWS 提供了多种工具来帮助您开发适用于 .NET 的 Lambda 函数。所有这些工具均免费,可以直接安装到您所选的 IDE 或命令行。如果您的计算机已设置 AWS 账户,则无需配置这些工具。

适用于 AWS Lambda 的 .NET 工具可用于 Visual Studio(仅限 Windows)、Visual Studio Code 和 Rider。命令行工具可用于 Windows、Linux 和 Mac。IDE 与操作系统之间的支持级别各不相同。本模块提供了可用工具的摘要以及相关下载的链接。

 所需时间

60 分钟 

AWS Toolkit for Visual Studio

截至 2022 年 5 月,AWS Toolkit for Visual Studio 仅适用于 Windows。安装之后,该工具包将帮助您对其进行配置,以访问您的 AWS 账户。

通过熟悉的用户界面,该工具包允许您通过 Visual Studio 中的图形界面开发、调试、部署、更新和测试您的 Lambda 函数。该工具包现在提供下载,适用于 Visual Studio 2022/2019/2017。

安装

在 Visual Studio 中,转到“扩展”菜单,然后选择“管理扩展”。在右侧的搜索框中,键入“AWS Toolkit”。在结果窗格中,选择“AWS Toolkit for Visual Studio”扩展程序,然后单击下载。按照提示安装扩展程序,您可能需要重新启动 Visual Studio。

如果您愿意,您可以直接下载 AWS Toolkit,访问适用于 AWS Toolkit for Visual Studio 的文档。

概览和主要功能

关于 Lambda 服务,该工具包提供了两组关键功能、Lambda 函数的项目模板,以及用于协助部署、管理和测试/调用 Lambda 函数的工具。除此之外,该工具包还允许您管理其他 AWS 资源并将应用程序部署到其他类型的 AWS 基础设施,例如 AWS Fargate、AWS App Runner 和 AWS Elastic Beanstalk(本课程不涉及这些内容)。

该工具包添加了许多 Lambda 项目模板,旨在帮助您创建各种 Lambda 函数。

最简单的模板采用一个字符串,并返回该字符串的大写版本。这是个不错的入门模板,因为它简单、易于部署和测试。只需几分钟,您就可以在 AWS 上运行 .NET Lambda 函数,向其发送请求并获得响应。

更复杂的是,有一个模板提供完整的 .NET 6 Web 应用程序(带网页和 API 控制器)。部署该模板之后,还将为您部署和配置所需的基础设施,以便通过 Web 进行访问。

如果您愿意,有容器项目模板可用。请注意,您必须在计算机上安装 Docker 才能使用这些模板。要了解您为什么选择带 Lambda 函数的容器映像,请参阅模块 4 中的“选择适合您的运行时系统”部分。

单元测试您的 Lambda 函数与测试任何其他代码一样重要。大多数项目模板包含测试项目,该项目使用 xUnit 测试源代码项目中的代码。这样的话,您可以轻松开始使用单元测试。

正如上面所述,在 Visual Studio 中,您还可以将您的函数发布到 AWS Lambda 服务。发布功能负责构建软件包、上传到 Lambda 服务、应用权限、创建 API Gateway 端点,以及让代码运行并可供调用的任何其他必要步骤。您只需编写代码即可。

该工具包的另一项功能是 AWS 各区服务浏览器,它允许您查看和管理许多 AWS 资源,例如 DynamoDB、S3、SNS、SQS 队列、EC2,当然还有 Lambda 函数。

要打开 AWS 各区服务浏览器,请转到查看菜单并选择 AWS 各区服务浏览器

关于 Lambda 函数,AWS 各区服务浏览器允许您:

  • 选择一个区域。
  • 查看和管理您的 Lambda 函数。
  • 在 AWS 上调用 Lambda 函数,传递任何必要的参数,然后查看响应。该工具提供示例输入,用于模拟来自各种其他 AWS 服务的调用。当您构建由其他服务的事件(例如在 S3 上创建的文件)触发的 Lambda 函数时,这非常有用。
  • 调试 Lambda 函数的本地运行版本。
  • 配置可触发 Lambda 函数的服务。
  • 查看由 Lambda 函数生成的日志。

要从该工具包中调用 Lambda 函数,请打开 AWS 各区服务浏览器,展开 Lambda 部分,右键单击要执行的 Lambda 函数,然后选择查看函数

在此处,您可以从下拉列表中选择一个示例请求。 这些示例允许您模拟来自其他 AWS 服务(例如 API Gateway、S3、SNS 等)的调用。这样的话,您可以直接轻松地测试由其他服务的事件调用的 Lambda 函数。

或者,您可以使用自己的请求。

除上述内容外,您可以通过终端使用所有与 Lambda 相关的命令行工具。

如果您刚刚接触 AWS,那么 Toolkit for Visual Studio 是最好的入门方式。它具有所有可用工具包的大多数功能,并且容易调试和执行部署。AWS Toolkit for Visual Studio 还可与免费提供的 Visual Studio 社区版配合使用。对于刚接触 AWS 的开发人员来说,该工具包与 AWS 上的免费套餐是不错的组合。

AWS Toolkit for Visual Studio Code

AWS Toolkit for Visual Studio Code(VS Code)适用于运行 VS Code 的所有操作系统(Windows、Linux 和 Mac)。该工具包在所有三个操作系统上提供一致的体验。

虽然 AWS Toolkit for Visual Studio Code 在功能方面不如 AWS Toolkit for Visual Studio 全面,但它允许您浏览 AWS 上的资源并与之交互。

您可以浏览 S3 桶(并编辑文件!),调用 API Gateway 端点,从 Amazon Elastic Container Registry(ECR)部署,在 AWS 上调用 Lambda 函数,并且在本地调试它们(需要 dotnet 工具,请见下文)。有关其功能的完整列表,请参阅 AWS Toolkit for Visual Studio Code 文档。

您还可以将所有可用的 AWS 命令行工具与 VS Code 配合使用。这很可能是您通过 VS Code 与 AWS 进行交互的方式。借助命令行工具,您可以灵活地管理每项 AWS 服务。

安装

在主边栏中,单击“扩展程序”图标。在打开的搜索栏中,键入“aws toolkit”,您应该会在列表顶部或附近看到 AWS Toolkit。单击安装。您可能需要重新启动 VS Code。

概览和主要功能

您可以通过 VS Code 扩展程序市场添加 AWS Toolkit for VS Code,也可以直接从 Visual Studio 市场上的 AWS Toolkit 页面中下载。

如果您已经在计算机上配置 AWS 账户,则工具包将自动使用该账户连接到 AWS。

AWS 图标将在 VS Code 窗口的主边栏中显示。在此处,您可以看到工具包可以访问的所有服务。

该工具包不包括 Visual Studio Toolkit 之类的 Lambda 项目模板。相反,您可以通过命令行使用 dotnet new ... 命令创建新的 Lambda 函数。丰富的模板可供使用。这些模板将帮助您非常快速地开始使用 AWS Lambda 函数。dotnet CLI 模板的安装说明如下。

关于 Lambda 函数,AWS 各区服务浏览器允许您:

  • 在 AWS 上调用 Lambda 函数,传递任何必要的参数,然后查看响应。该工具提供示例输入,用于模拟来自触发 Lambda 的各种其他 AWS 服务的调用。
  • 使用 AWS .NET Mock Lambda Test Tool 在本地调试 Lambda 函数。
  • 上传已构建的 .NET Lambda 函数的 Zip 存档。
  • 查看 Lambda 函数生成的日志(通过 CloudWatch Logs)。

要从工具包中调用 Lambda 函数,请打开 AWS 各区服务浏览器,展开 Lambda 部分,右键单击要执行的 Lambda 函数,然后选择“在 AWS 上调用”。

这样会打开一个新窗口,在其中您可以选择用于调用函数的请求负载。

或者,您可以编写自己的请求负载。VS Code 输出选项卡会显示响应负载。

除上述内容外,您可以通过终端将所有与 Lambda 相关的命令行工具与 VS Code 结合使用。特别是,在 VS Code 中使用 Lambda 函数时,dotnet lambda 命令尤为有用。关于详细信息和安装说明,请参阅下面的“适用于 .NET CLI 的 AWS 扩展程序(dotnet lambda ...)”部分。

AWS Toolkit for Rider

AWS Toolkit for Rider 是一款适用于 Rider 的插件,可帮助您构建、查看和管理 AWS 资源。它在功能方面与 AWS Toolkit for VS Code 类似,但它包含各种适用于 .NET 的项目模板,这些模板可帮助您快速开始开发 Lambda 函数。

安装

要安装 AWS Toolkit for Rider,请打开“文件”菜单,然后单击“设置”和“插件”。搜索 AWS Toolkit 并安装。

如果您已经在计算机上配置 AWS 账户,则工具包将自动连接到 AWS。

安装之后,您将有一系列新的 AWS Lambda 函数模板可使用。

概览和主要功能

要打开 AWS 各区服务浏览器,请依次转到“查看”菜单和“工具窗口”,然后选择“AWS 各区服务浏览器”。

在 AWS 各区服务浏览器中,您可以对 Lambda 函数执行以下操作:

  • 在 AWS 上调用 Lambda 函数,传递任何必要的参数,然后查看响应。该工具提供示例输入,用于模拟来自触发 Lambda 的各种其他 AWS 服务的调用。
  • 使用 AWS .NET Mock Lambda Test Tool 在本地调试 Lambda 函数。
  • 上传已构建的 .NET Lambda 函数的 Zip 存档。
  • 查看 Lambda 函数生成的日志(通过 CloudWatch Logs)。

要调用 Lambda 函数,请先打开 AWS 各区服务浏览器。要执行此操作,请依次转到“查看”菜单和“工具窗口”,然后选择“AWS 各区服务浏览器”。

在 AWS 各区服务浏览器中,展开 Lambda 部分,右键单击要调用的 Lambda。单击“运行 '[Remote] …'”

这样会打开一个新窗口,在其中您可以选择模板来调用请求。

或者,键入您自己的请求。

单击“运行”。然后,输出将显示。

除上述内容外,您可以通过终端将所有 Lambda 命令行工具与 Rider 结合使用。

命令行工具

在 Windows、Linux 和 Mac 上,所有可用的命令行工具可以与任何 Shell/终端/命令提示符结合使用。

但是,为了在所有三个操作系统上获得一致的体验,我们建议您使用 PowerShell Core。不同终端的 JSON 编码存在差异,因此很难提供处处适合的示例,但在使用 PowerShell Core 时,该问题就不存在。因此,本课程中的所有示例都使用 PowerShell Core 进行了测试。

AWS 命令行界面(CLI)

AWS 命令行界面(CLI)是一个开源工具,允许您通过命令行管理所有 AWS 资源。您可以手动执行这些操作,也可以使用您选择的脚本语言自动运行它们。该工具可用于 Windows、Linux 和 Mac。

在大多数情况下,您应该安装版本 2 的 AWS CLI,因为它支持 AWS 的所有最新功能。除非您有具体原因要使用版本 1 的 AWS CLI,否则您应该坚持使用版本 2。

当 AWS 服务添加新功能时,AWS CLI 工具将更新,以便您管理这些功能。AWS CLI 工具经常更新,因此您应该留意更新的版本。

安装

AWS CLI 可用于 Windows、Linux 和 Mac。您的安装方法将因操作系统而异。有关完整说明,请参阅 AWS 页面 – 安装或更新最新版本的 AWS CLI。 AWS 不建议使用任何软件包管理软件安装 AWS CLI。而是使用上面提供的链接。

请记住,您必须不时更新 AWS CLI 才能获得最新功能。

要检查您的 AWS CLI 版本,请运行以下命令:

aws --version

您将看到类似如下的响应:

aws-cli/2.5.4 Python/3.9.11 Windows/10 exe/AMD64 prompt/off

这说明我已经安装版本 2.5.4 的 AWS CLI。

要查看 AWS CLI 的最新版本是什么,请访问 https://github.com/aws/aws-cli/blob/v2/CHANGELOG.rst,“CHANGELOG”下面就是最新发布的版本。我在写本文时,版本是 2.7.2,因此我需要更新我的 AWS CLI!

概览和主要功能

借助 AWS CLI,您可以管理您的所有 AWS 资源。AWS CLI 包括强大的查询和筛选功能,可以帮助您找到所需的资源。如您所愿,AWS CLI 允许您列出、查看、管理和调用 Lambda 函数。

AWS CLI 命令参考提供大量包含示例的文档。

适用于 .NET Core 的 AWS Lambda – 模板

借助 AWS CLI,您可以管理您的所有 AWS 资源。AWS CLI 包括强大的查询和筛选功能,可以帮助您找到所需的资源。如您所愿,AWS CLI 允许您列出、查看、管理和调用 Lambda 函数。

AWS CLI 命令参考提供大量包含示例的文档。

适用于 .NET Core 的 AWS Lambda – 模板

在使用 Visual Studio 和 Rider 时,AWS Toolkit 为您提供一系列 C#(和 F#)项目模板,帮助您开始使用 AWS Lambda 函数。

这些模板开始最简单 – Lambda 函数,它采用一个字符串,将其转换为大写字母并返回一个字符串。该模板本身非常简单,但这是最好的入门点。借此,您可以轻松编写代码,并在几分钟内部署 AWS Lambda。

还有更复杂的模板可用,它们可以设置完整的 .NET Web 应用程序或 API 应用程序,并为您构建所有必要的基础设施,包括角色、权限、桶、API Gateway 等。

大多数项目模板附带 src 和 test 目录,可立即为您提供单元测试功能。您可以随着应用程序的增长扩展这些功能。测试项目将帮助您了解 Lambda 函数的工作原理,并允许您轻松调试您的代码。

安装

要安装模板,请运行以下命令:

dotnet new -i "Amazon.Lambda.Templates::*"

概览和主要功能

安装完成后,您将使用 dotnet new 命令来创建新的 Lambda 函数项目。

要查看可用项目模板的列表,请运行以下命令:

dotnet new lambda --list

您将看到类似如下的输出(请注意,可用模板会定期更改):

您可能注意到,一些模板的短名称以“serverless.”开头,还有一些以“lambda.”开头。

以“serverless.”开头的模板使用 AWS Serverless Application Model(SAM)部署 Lambda 函数,并构建 Lambda 函数使用的必要基础设施。AWS SAM 是一个开源框架,允许您在 AWS 上构建无服务器应用程序。除定义 Lambda 函数外,您还可以使用 AWS SAM 定义其他资源,例如 API Gateway、数据库、事件源。

如果您导航到 projectname/src/projectname 目录,您会看到一个名为 serverless.template 的文件。该文件定义了所需的基础设施及其如何连接到 Lambda 函数。在上面列出的所有“serverless.”模板中,API Gateway 用于将 HTTP 请求路由到 Lambda 函数。

以“lambda.”开头的模板不使用 Serverless Application Model,也不设置其他基础设施。如果需要其他基础设施,您需要自己设置。例如,lambda.Kinesis 项目模板向您展示如何处理传入的 Kinesis 事件,但它不会为您创建 Kinesis 流,也不会添加 Kinesis 在触发 Lambda 函数时所需的相关权限。

要基于 lambda.EmptyFunction 模板创建新项目,请运行:

dotnet new lambda.EmptyFunction

该工具是开源的,可以在 GitHub 上查看,

https://github.com/aws/aws-lambda-dotnet#dotnet-cli-templates。

与其他命令行工具一样,您应该密切关注相关的 GitHub 页面,看看新版本何时发布。

AWS Extensions for .NET CLI(dotnet lambda ...)

虽然 AWS CLI 工具允许您管理所有 AWS 资源,但 AWS Extensions for .NET CLI 专门针对 Lambda 函数,作为 .NET 工具(即 dotnet lambda)调用。

安装

要安装 AWS Extensions for .NET CLI,请运行以下命令:

dotnet tool install -g Amazon.Lambda.Tools

要验证其安装是否正确,请运行:

dotnet lambda

这将输出您可以使用的命令摘要和版本号。

概览和主要功能

该工具适用于任何 Shell,从 Visual Studio Code 和 Rider 内的终端使用时尤为有用。它允许您执行与 Lambda 函数相关的常见任务。

例如,要列出所有 Lambda 函数,您可以使用:

dotnet lambda list-functions

或者,要调用 Lambda 函数,请运行:

dotnet lambda invoke-function functionName 

它还可以部署 Lambda 函数。在使用 dotnet Lambda 模板(见上文)创建 Lambda 函数后,您可以使用以下方法将该函数部署到 AWS:

dotnet lambda deploy-function

这将启动构建和引导式部署流程。该工具将要求您提供 Lambda 函数名称、要分配给该函数的角色(或创建新函数)。如果您创建新角色,该工具将要求您为新角色选择权限策略。然后,该工具会将函数部署到 AWS,几秒钟之内您就可以调用它了!

要查看所有可用的命令行选项,请使用:

dotnet lambda deploy-function --help

请记住,每个命令背后可能有很多功能,因此了解每个命令行都支持多个选项,这点很重要。例如,update-function-config 是您启用和配置 Lambda 函数 URL 的地方。该功能不适用于 deploy-function 命令。及时了解 Lambda 服务的最新版本文档和功能,这点非常重要,因为这样将帮助您了解和使用最新功能。

虽然在开发代码和了解 AWS 时,该工具可非常方便地管理 Lambda 函数且功能强大,但我们强烈建议您在应用程序达到一定成熟度时,使用强大的 CI/CD 流程将其部署到应用程序。AWS 支持所有主要的 CI/CD 工具。

AWS Tools for PowerShell

AWS Tools for PowerShell 通过一组 PowerShell 模块公开适用于 .NET 的 AWS SDK。对于熟悉 PowerShell 脚本的人来说,这使它们成为用于编写部署和维护脚本的强大工具。

AWS Tools for PowerShell 可以在 Windows、Mac 和 Linux 上安装,在所有三个平台上提供一组相同的功能。

这些工具以单个模块提供,或者以模块化版本提供,在其中您可以根据需要下载所需的模块。

建议在生产环境中使用模块化版本。

查看此处,您可以找到更多关于在这些版本中做出选择的信息。

安装

要在 Windows 上安装,请参阅在 Windows 上安装 AWS Tools for PowerShell 指南。

要在 Linux 或 Mac 上安装,请参阅在 Linux 或 macOS 上安装 AWS Tools for PowerShell 指南。

概览和主要功能

可以由 AWS Tools for PowerShell 执行的模块数量以及命令的数量非常多。关于 AWS Lambda,您可以使用这些工具列出、查看、部署、管理和调用函数。

要查看所有可用命令,请运行:

Get-Command -Module AWS.Tools.Lambda

你可以在适用于 AWS Tools for PowerShell Cmdlet 参考中找到所有命令的完整文档,请导航到左栏中的 Lambda 部分。

要列出所有 Lambda 函数,请运行:

Get-LMFunctionList

要调用 Lambda 函数,请运行:

$Response=Invoke-LMFunction -FunctionName StringToUpperCase -Payload '"hello world"'

[System.IO.StreamReader]::new($Response.Payload).ReadToEnd() 

Docker for .NET 7 Native AOT 函数

2022 年 11 月,微软发布了 .NET 7。尽管此版本的 .NET 没有 Lambda 托管的运行时系统,但您可以将其用作 支持原生的前期(AOT)编译的自定义运行时系统。

 这种方法的主要好处是可以大大加快 .NET 7 函数的冷启动速度。经过测试对比运行支持托管运行时系统的 .NET 6 的函数和运行使用 AOT 编译的.NET 7 的函数,.NET 7 函数的启动速度最多快 86%。

要了解有关 AWS 上无服务器 .NET 应用程序的更多信息,请参阅这篇文章: 使用 .NET 7 在 AWS Lambda 上构建无服务器 .NET 应用程序。

要使用带 .NET 7 Lambda 函数的编译功能,您需要安装并运行 Docker。
您可以从 Docker 安装概览中下载 Docker。

精选工具的比较

知识测验

现在,您已经完成了模块 2:“使用 AWS Lambda 的 .NET 开发工具”。以下测试可让您检查到目前为止学到的内容。

1.哪个适用于 IDE 的 AWS 工具包的功能最多?(单选)

a.Visual Studio Code

b.Visual Studio

c.Rider

d.它们都有相同的功能

2.哪个操作系统支持 AWS Extensions for .NET CLI?

a.Mac

b.Linux

c.Windows

d.以上都是

a.Homebrew

b.Pip

c.Chocolatey

d.直接从 AWS 下载

答案:1-b,2-d,3-d

结论

在本模块中,您学习了用于开发 .NET Lambda 函数的重要热门工具。现在,您知道哪些工具可用、如何安装、一些基础使用知识,并且知道详情链接。

但是,与许多类似的事情一样,最好的学习方法是开始体验。在下一个模块中,您将学习如何在 Lambda 服务中使用 .NET。

此页内容对您是否有帮助?

AWS LAMBDA 上的 .NET