AWS Cloud9 不再向新客户提供。 AWS Cloud9 的现有客户可以继续正常使用该服务。了解更多
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
本教程使你能够在 AWS Cloud9 开发环境中运行一些.NET 代码。
按照本教程并创建此示例可能会导致您的 AWS 账户被扣款。其中包括亚马逊 EC2 和Amazon S3等服务可能产生的费用。有关更多信息,请参阅 Amazon EC2 定价
主题
先决条件
在使用此示例之前,请确保您的设置满足以下要求:
-
您必须拥有现有的 AWS Cloud9 EC2 开发环境。此示例假设您的 EC2 环境已连接到运行 Amazon Linux 的亚马逊 EC2 实例,或者 Ubuntu 服务器。如果您有不同类型的环境或操作系统,可能需要按照本示例的说明来设置相关的工具。有关更多信息,请参阅 在中创建环境 AWS Cloud9。
-
您已经打开了现有环境的 AWS Cloud9 IDE。打开环境时,会在 Web 浏览器中 AWS Cloud9 打开该环境的 IDE。有关更多信息,请参阅 在中打开环境 AWS Cloud9。
步骤 1:安装所需工具
在此步骤中,将运行此示例需要的 .NET 开发工具包安装到环境中。
-
确认环境中是否已安装 .NET 开发工具包的最新版本。为此,请在 AWS Cloud9 IDE 的终端会话中运行带有
--version
选项的.NET Core 命令行接口 (CLI)。dotnet --version
如果显示 .NET 命令行工具版本并且版本为 2.0 或更高版本,请向前跳至 步骤 3:创建 .NET 控制台应用程序项目。如果版本低于 2.0 或显示
bash: dotnet: command not found
等错误,请继续安装 .NET 开发工具包。 -
对于 Amazon Linux,在 AWS Cloud9 IDE 的终端会话中,运行以下命令以帮助确保安装了最新的安全更新和错误修复,并安装.NET SDK 所需的
libunwind
软件包。(要开始新的终端会话,请在菜单栏上依次选择 Window (窗口)、New Terminal (新建终端)。)sudo yum -y update sudo yum -y install libunwind
对于 Ubuntu Server,在 AWS Cloud9 IDE 的终端会话中,运行以下命令以帮助确保安装了最新的安全更新和错误修复。(要开始新的终端会话,请在菜单栏上依次选择 Window (窗口)、New Terminal (新建终端)。)
sudo apt -y update
-
通过运行以下命令,将 .NET 开发工具包安装程序脚本下载到环境中。
wget https://dot.net/v1/dotnet-install.sh
-
通过运行以下命令,使安装程序脚本可由当前用户执行。
sudo chmod u=rx dotnet-install.sh
-
通过运行以下命令,运行安装程序脚本,该脚本将下载并安装 .NET 开发工具包。
./dotnet-install.sh -c Current
-
将 .NET 开发工具包添加到
PATH
。为此,在环境的 shell 配置文件(例如,.bashrc
文件)中,将$HOME/.dotnet
子目录添加到环境的PATH
变量,如下所示。-
使用
.bashrc
vi
命令打开 文件以供编辑。vi ~/.bashrc
-
对于 Amazon Linux,使用向下键或
j
键,移至以export PATH
开头的行。对于 Ubuntu Server,通过键入
G
移动至文件最后一行。 -
使用向右键或
$
键移至行尾。 -
通过按
i
键切换到插入模式。(-- INSERT ---
将出现在显示内容的末尾。) -
对于 Amazon Linux,通过键入
:$HOME/.dotnet
将$HOME/.dotnet
子目录添加至PATH
变量。请务必包含冒号字符 (:
)。现在,行应类似于以下内容。export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$HOME/.dotnet
对于 Ubuntu Server,请按向右箭头键,然后按
Enter
两次,然后在文件末尾单独输入以下代码行。export PATH=$HOME/.dotnet:$PATH
-
保存该文件。要执行此操作,请按
Esc
键(-- INSERT ---
将从显示内容的末尾消失),键入:wq
(以写入然后退出文件),然后按Enter
。
-
-
通过提供
.bashrc
文件源来加载 .NET 开发工具包。. ~/.bashrc
-
通过运行带
--help
选项的 .NET CLI 确认已加载 .NET 开发工具包。dotnet --help
如果成功,则显示 .NET 开发工具包版本号,以及附加的使用信息。
-
如果不想再在环境中保留 .NET 开发工具包安装程序脚本,则可按如下所述将其删除。
rm dotnet-install.sh
步骤 2(可选):为 Lambda 函数安装 .NET CLI 扩展
尽管本教程不是必需的,但如果您还安装了Amazon.Lambda.Tools
软件包,则可以使用.NET CLI 部署 AWS Lambda 函数和 AWS Serverless Application Model 应用程序。
-
要安装此程序包,请运行以下命令:
dotnet tool install -g Amazon.Lambda.Tools
-
现在设置
PATH
和DOTNET_ROOT
环境变量,以指向已安装的 Lambda 工具。在.bashrc
文件,查找export PATH
部分,然后对其进行编辑,使其类似于以下内容(有关编辑此文件的详细信息,请参阅步骤 1):export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$HOME/.dotnet:$HOME/.dotnet/tools export DOTNET_ROOT=$HOME/.dotnet
步骤 3:创建 .NET 控制台应用程序项目
在此步骤中,将使用 .NET 创建一个名为 hello
的项目。此项目包含 .NET 在 IDE 中从终端运行简单应用程序所需的全部文件。该应用程序的代码是用 C# 编写的。
创建 .NET 控制台应用程序项目。要执行此操作,请用 new
命令运行 .NET CLI,并指定要使用的控制台应用程序项目模板类型和编程语言(在本示例中为 C#)。
-n
选项表示将项目输出到新目录,hello
。然后,导航到该目录。
dotnet new console -lang C
# -n hello
cd hello
前面的命令会将一个名为 obj
且包含几个文件的子目录以及一些附加的独立文件添加至 hello
目录。您应注意以下两个关键文件:
-
hello/hello.csproj
文件包含有关控制台应用程序项目的信息。 -
hello/Program.cs
文件包含要运行的应用程序代码。
步骤 4:添加代码
在此步骤中,您将向应用程序中添加一些代码。
在 AWS Cloud9 IDE 的 “环境” 窗口中,打开该hello/Program.cs
文件。
在编辑器中,将该文件的当前内容替换为以下代码,然后保存 Program.cs
文件。
using System;
namespace hello
{
class Program
{
static void Main(string[] args)
{
if (args.Length < 2) {
Console.WriteLine("Please provide 2 numbers");
return;
}
Console.WriteLine("Hello, World!");
Console.WriteLine("The sum of 2 and 3 is 5.");
int sum = Int32.Parse(args[0]) + Int32.Parse(args[1]);
Console.WriteLine("The sum of {0} and {1} is {2}.",
args[0], args[1], sum);
}
}
}
步骤 5:生成并运行代码
在此步骤中,您会将该项目及其依赖项生成为一组二进制文件,包括一个可运行的应用程序文件。然后运行该应用程序。
-
在 IDE 中,为 .NET 创建一个生成器,如下所示。
-
在菜单栏中,依次选择 Run (运行)、Build System (生成系统) 和 New Build System (新建生成系统)。
-
在 My Builder.build (我的 Builder.build) 选项卡上,将选项卡的内容替换为以下代码。
{ "cmd" : ["dotnet", "build"], "info" : "Building..." }
-
依次选择 File(文件)、Save As(另存为)。
-
对于 Filename (文件名),键入
.NET.build
。 -
对于 Folder (文件夹),键入
/.c9/builders
。 -
选择保存。
-
-
编辑器中显示
Program.cs
文件的内容后,依次选择 运行、生成系统和 .NET 。然后依次选择 Run (运行)、Build (生成)。此生成器将向
hello/obj
子目录中添加一个名为bin
的子目录和一个名为Debug
的子目录。请注意以下三个关键文件。-
hello/bin/Debug/netcoreapp3.1/hello.dll
文件是可运行的应用程序文件。 -
hello/bin/Debug/netcoreapp3.1/hello.deps.json
文件列出了应用程序的依赖项。 -
hello/bin/Debug/netcoreapp3.1/hello.runtimeconfig.json
文件为应用程序指定共享的运行时及其版本。
注意
文件夹名称
netcoreapp3.1
,反映了本示例中使用的 .NET 开发工具包的版本。根据您安装的版本,您可能会在文件夹名称中看到不同的编号。 -
-
为 .NET 创建一个运行程序,如下所示。
-
在菜单栏上,依次选择 Run (运行)、Run With (运行方式) 和 New Runner (新建运行程序)。
-
在 My Runner.run (我的 Runner.run) 选项卡上,将该选项卡的内容替换为以下代码。
{ "cmd" : ["dotnet", "run", "$args"], "working_dir": "$file_path", "info" : "Running..." }
-
依次选择 File(文件)、Save As(另存为)。
-
对于 Filename (文件名),键入
.NET.run
。 -
对于 Folder (文件夹),键入
/.c9/runners
。 -
选择保存。
-
-
运行应用程序,将两个整数相加(例如,
5
和9
),如下所示。-
当编辑器中显示
Program.cs
文件的内容时,依次选择 Run (运行)、Run Configurations (运行配置) 和 New Run Configuration (新建运行配置)。 -
在 [新建] - 空闲 选项卡中,选择运行程序: 自动,然后选择 .NET 。
-
在 Command (命令) 框中,键入
hello 5 9
。 -
选择运行。
默认情况下,此运行程序将指示 .NET 运行
hello.dll
目录中的hello/bin/Debug/netcoreapp3.1
文件。将输出与以下内容进行比较。
Hello, World! The sum of 2 and 3 is 5. The sum of 5 and 9 is 14.
-
步骤 6:创建和设置使用.NET 控制台应用程序项目 适用于 .NET 的 AWS SDK
您可以增强此示例,使用创建 Amazon S3 存储桶,列出您的可用存储桶,然后删除您刚刚创建的存储桶。 适用于 .NET 的 AWS SDK
在此新项目中,您将添加对 适用于 .NET 的 AWS SDK的引用。 适用于 .NET 的 AWS SDK 提供了一种通过.NET 代码与 Amazon S3 等 AWS 服务进行交互的便捷方式。然后,您可以在自己的环境中设置 AWS 凭证管理。 适用于 .NET 的 AWS SDK 需要这些凭据才能与 AWS 服务进行交互。
创建 项目
-
创建 .NET 控制台应用程序项目。要执行此操作,请用
new
命令运行 .NET CLI,并指定要使用的控制台应用程序项目模板类型和编程语言。-n
选项表示将项目输出到新目录,s3
。然后,导航到该目录。dotnet new console -lang C
# -n s3
cd s3 -
在 适用于 .NET 的 AWS SDK中添加对 Amazon S3 程序包的项目引用。为此,请使用
add package
命令运行.NET CLI,并在中指定 Amazon S3 软件包的名称 NuGet。 (NuGet定义如何创建、托管和使用.NET 软件包,并为每个角色提供工具。)dotnet add package AWSSDK.S3
向 Amazon S3 包添加项目引用时, NuGet 还会向其余部分添加项目引用 适用于 .NET 的 AWS SDK。
注意
有关中其他 AWS 相关软件包的名称和版本 NuGet,请参阅网站上标有 aws-sdk 的NuGet NuGet 软件包
。
设置 AWS 凭据管理
每次使用调 适用于 .NET 的 AWS SDK 用 AWS 服务时,都必须为呼叫提供一组 AWS 凭据。这些证书决定了是否 适用于 .NET 的 AWS SDK 具有进行该呼叫的相应权限。如果凭证没有包括合适的权限,调用将失败。
要在环境中存储凭证,请按照 AWS 服务 从中的环境中呼叫 AWS Cloud9 中的说明进行操作,然后返回到该主题。
有关更多信息,请参阅《适用于 .NET 的 AWS SDK 开发人员指南》中的配置 AWS 凭证。
第 7 步:添加 AWS SDK 代码
在此步骤中,您添加用于与 Amazon S3 交互的代码,以用于创建存储桶、删除刚刚创建的存储桶,然后列出可用的存储桶。
在 AWS Cloud9 IDE 的 “环境” 窗口中,打开该s3/Program.cs
文件。在编辑器中,将该文件的当前内容替换为以下代码,然后保存 Program.cs
文件。
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.S3.Util;
using System;
using System.Threading.Tasks;
namespace s3
{
class Program
{
async static Task Main(string[] args)
{
if (args.Length < 2) {
Console.WriteLine("Usage: <the bucket name> <the AWS Region to use>");
Console.WriteLine("Example: my-test-bucket us-east-2");
return;
}
if (args[1] != "us-east-2") {
Console.WriteLine("Cannot continue. The only supported AWS Region ID is " +
"'us-east-2'.");
return;
}
var bucketRegion = RegionEndpoint.USEast2;
// Note: You could add more valid AWS Regions above as needed.
using (var s3Client = new AmazonS3Client(bucketRegion)) {
var bucketName = args[0];
// Create the bucket.
try
{
if (await AmazonS3Util.DoesS3BucketExistV2Async(s3Client, bucketName))
{
Console.WriteLine("Cannot continue. Cannot create bucket. \n" +
"A bucket named '{0}' already exists.", bucketName);
return;
} else {
Console.WriteLine("\nCreating the bucket named '{0}'...", bucketName);
await s3Client.PutBucketAsync(bucketName);
}
}
catch (AmazonS3Exception e)
{
Console.WriteLine("Cannot continue. {0}", e.Message);
}
catch (Exception e)
{
Console.WriteLine("Cannot continue. {0}", e.Message);
}
// Confirm that the bucket was created.
if (await AmazonS3Util.DoesS3BucketExistV2Async(s3Client, bucketName))
{
Console.WriteLine("Created the bucket named '{0}'.", bucketName);
} else {
Console.WriteLine("Did not create the bucket named '{0}'.", bucketName);
}
// Delete the bucket.
Console.WriteLine("\nDeleting the bucket named '{0}'...", bucketName);
await s3Client.DeleteBucketAsync(bucketName);
// Confirm that the bucket was deleted.
if (await AmazonS3Util.DoesS3BucketExistV2Async(s3Client, bucketName))
{
Console.WriteLine("Did not delete the bucket named '{0}'.", bucketName);
} else {
Console.WriteLine("Deleted the bucket named '{0}'.", bucketName);
};
// List current buckets.
Console.WriteLine("\nMy buckets now are:");
var response = await s3Client.ListBucketsAsync();
foreach (var bucket in response.Buckets)
{
Console.WriteLine(bucket.BucketName);
}
}
}
}
}
第 8 步:生成并运行 S AWS DK 代码
在此步骤中,您会将该项目及其依赖项生成为一组二进制文件,包括一个可运行的应用程序文件。然后运行该应用程序。
-
构建 项目。要执行此操作,在编辑器中显示
s3/Program.cs
文件的内容后,请在菜单栏上依次选择 Run (运行)、Build (生成)。 -
用要创建的 Amazon S3 存储桶的名称和要在其中创建存储桶的 AWS 区域的 ID(例如,
my-test-bucket
和us-east-2
)运行应用程序,如下所示。-
当编辑器中仍显示
s3/Program.cs
文件的内容时,依次选择 Run (运行)、Run Configurations (运行配置)、New Run Configuration (新建运行配置)。 -
在 [新建] - 空闲 选项卡中,选择运行程序: 自动,然后选择 .NET 。
-
在命令框中,键入应用程序的名称、要创建的 Amazon S3 存储桶的名称以及要在其中创建存储桶的 AWS 区域 ID(例如
s3 my-test-bucket us-east-2
)。 -
选择运行。
默认情况下,此运行程序将指示 .NET 运行
s3.dll
目录中的s3/bin/Debug/netcoreapp3.1
文件。将结果与以下输出进行比较。
Creating a new bucket named 'my-test-bucket'... Created the bucket named 'my-test-bucket'. Deleting the bucket named 'my-test-bucket'... Deleted the bucket named 'my-test-bucket'. My buckets now are:
-
步骤 9:清除
为了防止在您使用完此示例后继续向您的 AWS 账户收费,您应该删除该环境。有关说明,请参阅 删除中的环境 AWS Cloud9。