使用Amazon SDK for .NET的简单跨平台应用程序 - Amazon SDK for .NET
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用Amazon SDK for .NET的简单跨平台应用程序

本教程将Amazon 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 运行时。

注意

在使用这些教程之前,必须先安装工具链配置开发工具包身份验证

步骤

创建项目

  1. 打开命令提示符或终端。查找或创建可以在其中创建 .NET 项目的操作系统文件夹。

  2. 在该文件夹中,运行以下命令以创建 .NET 项目。

    dotnet new console --name S3CreateAndList
  3. 转到新创建的 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 程序包,因此现在可以执行这一步。在开发过程中,知道所需的程序包也很常见。出现这种情况时,可以运行类似的命令。

创建代码

  1. S3CreateAndList 文件夹中,查找并在代码编辑器中打开 Program.cs

  2. 用以下代码替换内容并保存文件。

    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; } } }

运行应用程序

  1. 运行以下命令。

    dotnet run
  2. 检查输出以查看您拥有的 Amazon S3 桶数(如果有)及其名称。

  3. 为新 Amazon S3 桶选择名称。以“dotnet-quicktour-s3-1-cross-”为基础,并添加独特的内容,如 GUID 或您的名字等。请务必遵守存储桶命名规则,如 Amazon S3 用户指南中的存储桶命名规则中所述。

  4. 运行以下命令,将 BUCKET-NAME 替换为您选择的存储桶的名称。

    dotnet run BUCKET-NAME
  5. 检查输出以查看创建的新存储桶。

清理

执行本教程时,您创建了一些可选择在此时清理的资源。

  • 如果您不想保留应用程序在之前步骤中创建的桶,可以使用位于 https://console.aws.amazon.com/s3/ 的 Amazon S3 桶将其删除。

  • 如果您不想保留您的 .NET 项目,请从开发环境中删除 S3CreateAndList 文件夹。

后续工作

返回快速指南菜单或直接转到此快速指南的末尾