本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用AWS SDK for .NET的简单跨平台应用程序
本教程将AWS SDK for .NET与 .NET Core 一起用于跨平台开发。本教程向您展示如何使用开发工具包列出您拥有的 Amazon S3 桶,并且可以选择创建新桶。
您将使用跨平台工具(例如 .NET 命令行界面 (CLI))完成本教程。有关配置开发环境的其它方法,请参阅安装和配置工具链。
对于 Windows、Linux 或 macOS 上的跨平台 .NET 开发,需要:
-
Microsoft .NET Core 开发工具包
,版本 2.1、3.1 或更高版本,其中包括 .NET 命令行界面 (CLI) ( dotnet
) 和 .NET Core 运行时。
-
适合您的操作系统和要求的代码编辑器或集成式开发环境(IDE)。这通常为 .NET Core 提供一些支持。
示例包括 Microsoft Visual Studio Code(VS 代码)
、JetBrains Rider 和 Microsoft Visual Studio 。
注意
在使用这些教程之前,必须先安装工具链并配置开发工具包身份验证。
步骤
创建项目
-
打开命令提示符或终端。查找或创建可以在其中创建 .NET 项目的操作系统文件夹。
-
在该文件夹中,运行以下命令以创建 .NET 项目。
dotnet new console --name S3CreateAndList
-
转到新创建的
S3CreateAndList
文件夹并运行以下命令。dotnet add package AWSSDK.S3 dotnet add package AWSSDK.SecurityToken dotnet add package AWSSDK.SSO dotnet add package AWSSDK.SSOOIDC
前面的命令从 NuGet Package Manager
中安装 NuGet 程序包。由于我们确切地知道在本教程中所需的 NuGet 程序包,因此现在可以执行这一步。在开发过程中,知道所需的程序包也很常见。出现这种情况时,可以运行类似的命令。
创建代码
-
在
S3CreateAndList
文件夹中,查找并在代码编辑器中打开Program.cs
。 -
用以下代码替换内容并保存文件。
using System; using System.Threading.Tasks; // NuGet packages: AWSSDK.S3, AWSSDK.SecurityToken, AWSSDK.SSO, AWSSDK.SSOOIDC using Amazon.Runtime; using Amazon.Runtime.CredentialManagement; using Amazon.S3; using Amazon.S3.Model; using Amazon.SecurityToken; using Amazon.SecurityToken.Model; namespace S3CreateAndList { class Program { // This code is part of the quick tour in the developer guide. // See https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/quick-start.html // for complete steps. // Requirements: // - An SSO profile in the SSO user's shared config file with sufficient privileges for // STS and S3 buckets. // - An active SSO Token. // If an active SSO token isn't available, the SSO user should do the following: // In a terminal, the SSO user must call "aws sso login". // Class members. static async Task Main(string[] args) { // Get SSO credentials from the information in the shared config file. // For this tutorial, the information is in the [default] profile. var ssoCreds = LoadSsoCredentials("default"); // Display the caller's identity. var ssoProfileClient = new AmazonSecurityTokenServiceClient(ssoCreds); Console.WriteLine($"\nSSO Profile:\n {await ssoProfileClient.GetCallerIdentityArn()}"); // Create the S3 client is by using the SSO credentials obtained earlier. var s3Client = new AmazonS3Client(ssoCreds); // Parse the command line arguments for the bucket name. if (GetBucketName(args, out String bucketName)) { // If a bucket name was supplied, create the bucket. // Call the API method directly try { Console.WriteLine($"\nCreating bucket {bucketName}..."); var createResponse = await s3Client.PutBucketAsync(bucketName); Console.WriteLine($"Result: {createResponse.HttpStatusCode.ToString()}"); } catch (Exception e) { Console.WriteLine("Caught exception when creating a bucket:"); Console.WriteLine(e.Message); } } // Display a list of the account's S3 buckets. Console.WriteLine("\nGetting a list of your buckets..."); var listResponse = await s3Client.ListBucketsAsync(); Console.WriteLine($"Number of buckets: {listResponse.Buckets.Count}"); foreach (S3Bucket b in listResponse.Buckets) { Console.WriteLine(b.BucketName); } Console.WriteLine(); } // // Method to parse the command line. private static Boolean GetBucketName(string[] args, out String bucketName) { Boolean retval = false; bucketName = String.Empty; if (args.Length == 0) { Console.WriteLine("\nNo arguments specified. Will simply list your Amazon S3 buckets." + "\nIf you wish to create a bucket, supply a valid, globally unique bucket name."); bucketName = String.Empty; retval = false; } else if (args.Length == 1) { bucketName = args[0]; retval = true; } else { Console.WriteLine("\nToo many arguments specified." + "\n\ndotnet_tutorials - A utility to list your Amazon S3 buckets and optionally create a new one." + "\n\nUsage: S3CreateAndList [bucket_name]" + "\n - bucket_name: A valid, globally unique bucket name." + "\n - If bucket_name isn't supplied, this utility simply lists your buckets."); Environment.Exit(1); } return retval; } // // Method to get SSO credentials from the information in the shared config file. static AWSCredentials LoadSsoCredentials(string profile) { var chain = new CredentialProfileStoreChain(); if (!chain.TryGetAWSCredentials(profile, out var credentials)) throw new Exception($"Failed to find the {profile} profile"); return credentials; } } // Class to read the caller's identity. public static class Extensions { public static async Task<string> GetCallerIdentityArn(this IAmazonSecurityTokenService stsClient) { var response = await stsClient.GetCallerIdentityAsync(new GetCallerIdentityRequest()); return response.Arn; } } }
运行应用程序
-
运行以下命令。
dotnet run
-
检查输出以查看您拥有的 Amazon S3 桶数(如果有)及其名称。
-
为新 Amazon S3 桶选择名称。以“dotnet-quicktour-s3-1-cross-”为基础,并添加独特的内容,如 GUID 或您的名字等。请务必遵守存储桶命名规则,如 Amazon S3 用户指南中的存储桶命名规则中所述。
-
运行以下命令,将
BUCKET-NAME
替换为您选择的存储桶的名称。dotnet run
BUCKET-NAME
-
检查输出以查看创建的新存储桶。
清理
执行本教程时,您创建了一些可选择在此时清理的资源。
-
如果您不想保留应用程序在之前步骤中创建的桶,可以使用位于 https://console.aws.amazon.com/s3/
的 Amazon S3 桶将其删除。 -
如果您不想保留您的 .NET 项目,请从开发环境中删除
S3CreateAndList
文件夹。