

のバージョン 4 (V4) AWS SDK for .NET がリリースされました。

重要な変更とアプリケーションの移行については、[「移行トピック](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html)」を参照してください。

 [https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html)

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# の開始方法 AWS SDK for .NET
<a name="net-dg-config"></a>

をインストール、セットアップ、使用する方法について説明します AWS SDK for .NET。ツールチェーンをインストールし、アプリケーションが AWS サービスにアクセスするために必要ないくつかの重要な事項を設定する必要があります。具体的には次のとおりです。
+ 適切なユーザーアカウントまたはロール
+ そのユーザーアカウントの、またはそのロールを引き受けるための認証情報

プロジェクトやその他の重要な部分を設定する方法については、「」を参照してください[の設定 AWS SDK for .NET](configuring-the-sdk.md)。

**Topics**
+ [ツールチェーンのインストールと設定](net-dg-dev-env.md)
+ [による認証 AWS](creds-idc.md)
+ [シンプルなアプリケーションの作成](quick-start.md)

# 用のツールチェーンのインストールと設定 AWS SDK for .NET
<a name="net-dg-dev-env"></a>

を使用するには AWS SDK for .NET、特定の開発ツールがインストールされている必要があります。

## クロスプラットフォーム開発
<a name="net-dg-dev-env-cross"></a>

Windows、Linux、または macOS でのクロスプラットフォームの .NET 開発では以下が必要です。
+ Microsoft [.NET Core SDK](https://learn.microsoft.com/en-us/dotnet/fundamentals/)、バージョン 2.1、3.1 以降。.NET コマンドラインインターフェイス (CLI) (**`dotnet`**) および .NET Core ランタイムを含むものとします。
+ 使用しているオペレーティングシステムと要件に適したコードエディタまたは統合開発環境 (IDE)。これは通常、.NET Core のサポートを含むものです。

  例として、[Microsoft Visual Studio Code (VS Code)](https://code.visualstudio.com/)、[JetBrains Rider](https://www.jetbrains.com/rider/)、[Microsoft Visual Studio](https://visualstudio.microsoft.com/vs/) があります。
+ （オプション) 選択したエディタとオペレーティングシステムで AWS 使用可能なツールキット。

  例として [AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/welcome.html)、[AWS Toolkit for JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/welcome.html)、[AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/welcome.html) があります。

## Visual Studio と .NET Core を使用する Windows 環境
<a name="net-dg-dev-env-winvs"></a>

Visual Studio および .NET Core を使用した Windows での開発では以下が必要です。
+ [Microsoft Visual Studio](https://visualstudio.microsoft.com/vs/)
+ Microsoft .NET Core 2.1, 3.1 以降

  これは通常、Visual Studio の最新バージョンをインストールするとデフォルトで追加されます。
+ （オプション) は AWS Toolkit for Visual Studio、Visual Studio から AWS リソースとローカルプロファイルを管理するためのユーザーインターフェイスを提供するプラグインです。ツールキットをインストールするには、「[AWS Toolkit for Visual Studioのセットアップ](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/getting-set-up.html)」を参照してください。

  詳細については、「[AWS Toolkit for Visual Studio ユーザーガイド](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/)」を参照してください。

## 次のステップ
<a name="net-dg-dev-env-next"></a>

[AWS SDK for .NET を使用した の認証 AWS](creds-idc.md)

# AWS SDK for .NET を使用した の認証 AWS
<a name="creds-idc"></a>

開発 AWS 時にコードが で認証される方法を確立する必要があります AWS のサービス。環境と利用可能なアクセスに応じて、 AWS リソースへのプログラムによる AWS アクセスを設定する方法はさまざまです。

SDK のさまざまな認証方法を確認するには、「*AWS SDK およびツール リファレンス ガイド*」の「[認証とアクセス](https://docs.aws.amazon.com/sdkref/latest/guide/access.html)」を参照してください。

このトピックでは、新しいユーザーがローカルで開発中であり、雇用主から認証方法が与えられておらず、 AWS IAM アイデンティティセンター を使用して一時的な認証情報を取得することを前提としています。ご使用の環境がこれらの前提条件に当てはまらない場合、このトピックの情報の一部はお客様に該当しない場合や、既に提供されている可能性があります。

 この環境を構成するにはいくつかのステップが必要で、その概要は以下のとおりです。

1. [コンソール認証情報を使用してログインする](#login-con-creds)

1. [IAM Identity Center の有効化と設定](#idc-config-sso)

1. [IAM Identity Center を使用するように SDK を構成します。](#idc-config-sdk)

1. [AWS アクセスポータルセッションを開始する](#idc-start-portal)

## コンソール認証情報を使用してログインする
<a name="login-con-creds"></a>

既存の AWS マネジメントコンソールのサインイン認証情報を使用して、 AWS サービスにプログラムでアクセスできます。ブラウザベースの認証フローの後、 は CLI AWS Tools for PowerShell や AWS SDK for AWS .NET v4 などのローカル開発ツールで動作する一時的な認証情報 AWS を生成します。

このプロセスでは、最初のアカウント設定時に作成されたルート認証情報、IAM ユーザー、または ID プロバイダーからのフェデレーティッド ID を使用して認証でき、CLI AWS または AWS Tools for PowerShell が自動的に一時的な認証情報を管理します。このアプローチにより、長期的な認証情報をローカルに保存する必要がなくなるため、セキュリティが強化されます。コマンド`Invoke-AWSLogin `レットを から AWS Tools for PowerShell 実行するか、CLI AWS から `aws login` コマンドを実行すると、アクティブなコンソールセッションから選択するか、ブラウザベースの認証フローを使用してサインインできます。これにより、一時的な認証情報が自動的に生成されます。一時的な認証情報トークンは 15 分で期限切れになりますが、 AWS SDK for .NET v4 はリクエスト中に必要に応じてトークンを自動的に更新します。

**重要**  
認証にコンソール認証情報を使用している場合、 AWS サインイン解決が機能するように、アプリケーションは次の NuGet パッケージを参照する必要があります。  
**AWSSDK.Signin**
これらのパッケージを参照しないと、ランタイム 例外が発生します。
+ [AWS Tools for PowerShell login creds デベロッパーガイド。](https://docs.aws.amazon.com/powershell/v5/userguide/creds-idc.html#login-con-creds)
+ [CLI を使用してコンソール認証情報を使用して AWS ローカル開発にログイン AWS します。](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sign-in.html)

 AWS Tools for PowerShell または AWS CLI の上記の手順に従ってログインすると、`config`ファイルは次のようになります。

```
[default]
login_session = arn:aws:iam::0123456789012:user/username
region = us-east-1

[my-dev-profile]
login_session = arn:aws:iam::0123456789012:user/username
region = us-east-1
```

## IAM Identity Center の有効化と設定
<a name="idc-config-sso"></a>

IAM Identity Center を使用するには、まず IAM Identity Center を有効にして構成する必要があります。SDK でこれを行う方法の詳細については、「*AWS SDK およびツール リファレンス ガイド*」の [IAM Identity Center 認証](https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html)に関するトピックの**ステップ 1**を参照してください。具体的には、「**IAM Identity Center 経由のアクセスを確立していません**」にある必要な指示に従ってください。

## IAM Identity Center を使用するように SDK を構成します。
<a name="idc-config-sdk"></a>

IAM Identity Center を使用するように SDK を設定する方法に関する情報は、「*AWS SDK およびツールリファレンスガイド*」の [IAM Identity Center 認証](https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html)に関するトピックのステップ **2** に記載されています。この設定を完了すると、システムには以下の要素が含まれるようになります。
+ アプリケーションを実行する前に AWS アクセスポータルセッションを開始 AWS CLIするために使用する 。
+ SDK から参照できる設定値のセットを持つ[`[default]`プロファイル](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html#file-format-profile)を含む共有 AWS `config`ファイル。このファイルの場所を確認するには、「*AWS SDK とツールのリファレンスガイド*」の「[共有ファイルの場所](https://docs.aws.amazon.com/sdkref/latest/guide/file-location.html)」を参照してください。 AWS SDK for .NET は、リクエストを送信する前に、プロファイルの SSO トークンプロバイダーを使用して認証情報を取得します AWS。IAM Identity Center 許可セットに接続された IAM ロールである `sso_role_name` 値により、アプリケーションで使用されている AWS のサービス にアクセスできます。

  次のサンプル `config` ファイルは、SSO トークンプロバイダーで設定されたデフォルトプロファイルを示しています。プロファイルの `sso_session` 設定は、指定された `sso-session` セクションを参照します。`sso-session` セクションには、 AWS アクセスポータルセッションを開始するための設定が含まれています。

  ```
  [default]
  sso_session = my-sso
  sso_account_id = 111122223333
  sso_role_name = SampleRole
  region = us-east-1
  output = json
  
  [sso-session my-sso]
  sso_region = us-east-1
  sso_start_url = https://provided-domain.awsapps.com/start
  sso_registration_scopes = sso:account:access
  ```

**重要**  
認証 AWS IAM アイデンティティセンター に を使用している場合、アプリケーションは SSO 解決が機能するように、次の NuGet パッケージを参照する必要があります。  
`AWSSDK.SSO`
`AWSSDK.SSOOIDC`
これらのパッケージを参照しないと、*ランタイム* 例外が発生します。

## AWS アクセスポータルセッションを開始する
<a name="idc-start-portal"></a>

アクセスするアプリケーションを実行する前に AWS のサービス、SDK が IAM Identity Center 認証を使用して認証情報を解決するためのアクティブな AWS アクセスポータルセッションが必要です。設定したセッションの長さによっては、アクセスが最終的に期限切れになり、SDK で認証エラーが発生します。 AWS アクセスポータルにサインインするには、 で次のコマンドを実行します AWS CLI。

```
aws sso login
```

デフォルトのプロファイルを設定している場合は、`--profile` オプションを指定してコマンドを呼び出す必要はありません。SSO トークンプロバイダー設定で名前付きプロファイルを使用している場合、コマンドは `aws sso login --profile named-profile` です。

アクティブなセッションが既にあるかどうかをテストするには、次の AWS CLI コマンドを実行します。

```
aws sts get-caller-identity
```

このコマンドへの応答により、共有 `config` ファイルに設定されている IAM Identity Center アカウントとアクセス許可のセットが報告されます。

**注記**  
既にアクティブな AWS アクセスポータルセッションがあり、 を実行している場合は`aws sso login`、認証情報を指定する必要はありません。  
サインインプロセスにより、データ AWS CLI へのアクセスを許可するように求められる場合があります。 AWS CLI は SDK for Python 上に構築されているため、アクセス許可メッセージには`botocore`名前のバリエーションが含まれている可能性があります。

## 追加情報
<a name="idc-additional-info"></a>
+ 開発環境での IAM Identity Center と SSO の使用に関する追加情報については、[高度な認証](advanced-auth.md)セクションの[シングルサインオン](sso.md)を参照してください。この情報には、代替方法やより高度な方法、そしてこれらの方法の使い方を紹介するチュートリアルが含まれています。
+ プロファイルや環境変数の使用など、SDK の認証に関するその他のオプションについては、「*AWS SDK およびツールリファレンスガイド*」の[設定](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html)に関する章を参照してください。
+ ベストプラクティスの詳細については、*IAM ユーザーガイド*の「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。
+ 短期 AWS 認証情報を作成するには、*IAM ユーザーガイド*の[「一時的なセキュリティ認証情報](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)」を参照してください。
+ その他の認証情報プロバイダーについては、「*AWS SDK とツールのリファレンスガイド*」の「[標準化された認証情報プロバイダー](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html)」を参照してください。

# を使用したシンプルなアプリケーションの作成 AWS SDK for .NET
<a name="quick-start"></a>

このセクションでは、 AWS SDK for .NETを初めて使用する開発者向けの基本的なチュートリアルを提供します。

**注記**  
これらのチュートリアルを使用する前に、まず[ツールチェーンをインストール](net-dg-dev-env.md)し、[SDK 認証を設定](creds-idc.md)しておく必要があります。

特定の AWS サービス用のソフトウェアの開発とコード例については、「」を参照してください[ AWS サービスの呼び出し](working-with-aws-services.md)。その他のコード例については、「[SDK for .NET (v4) コード例](csharp_code_examples.md)」を参照してください。

**Topics**
+ [シンプルなクロスプラットフォームアプリ](quick-start-s3-1-cross.md)
+ [シンプルな Windows ベースのアプリ](quick-start-s3-1-winvs.md)
+ [次のステップ](quick-start-next-steps.md)

# を使用したシンプルなクロスプラットフォームアプリケーション AWS SDK for .NET
<a name="quick-start-s3-1-cross"></a>

このチュートリアルでは、クロスプラットフォーム開発に AWS SDK for .NET と .NET Core を使用します。また、SDK を使用して、所有する [ Amazon S3 バケット](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)を一覧表示し、必要に応じてバケットを作成する方法を説明します。

このチュートリアルは、.NET コマンドラインインターフェイス (CLI) などのクロスプラットフォームツールを使用して実行します。開発環境を設定するその他の方法については、「[用のツールチェーンのインストールと設定 AWS SDK for .NET](net-dg-dev-env.md)」を参照してください。

**Windows、Linux、または macOS でのクロスプラットフォームの .NET 開発では必須:**
+ Microsoft [.NET Core SDK](https://learn.microsoft.com/en-us/dotnet/fundamentals/)、バージョン 2.1、3.1 以降。.NET コマンドラインインターフェイス (CLI) (**`dotnet`**) および .NET Core ランタイムを含むものとします。
+ 使用しているオペレーティングシステムと要件に適したコードエディタまたは統合開発環境 (IDE)。これは通常、.NET Core のサポートを含むものです。

  例として、[Microsoft Visual Studio Code (VS Code)](https://code.visualstudio.com/)、[JetBrains Rider](https://www.jetbrains.com/rider/)、[Microsoft Visual Studio](https://visualstudio.microsoft.com/vs/) があります。

**注記**  
これらのチュートリアルを使用する前に、まず[ツールチェーンをインストール](net-dg-dev-env.md)し、[SDK 認証を設定しておく](creds-idc.md)必要があります。

## ステップ
<a name="s3-1-cross-steps"></a>
+ [プロジェクトの作成](#s3-1-cross-create-project)
+ [コードの作成](#s3-1-cross-code)
+ [アプリケーションを実行する](#s3-1-cross-run)
+ [クリーンアップ](#s3-1-cross-clean-up)

## プロジェクトの作成
<a name="s3-1-cross-create-project"></a>

1. コマンドプロントまたはターミナルを開きます。.NET プロジェクトを作成できるオペレーティングシステムフォルダを検索するか作成します。

1. そのフォルダで、次のコマンドを実行して .NET プロジェクトを作成します。

   ```
   dotnet new console --name S3CreateAndList
   ```

1. 新しく作成した `S3CreateAndList` フォルダに移動し、次のコマンドを実行します。

   ```
   dotnet add package AWSSDK.S3
   dotnet add package AWSSDK.SecurityToken
   dotnet add package AWSSDK.SSO
   dotnet add package AWSSDK.SSOOIDC
   ```

   上記のコマンドは、[NuGet パッケージ マネージャー](https://www.nuget.org/profiles/awsdotnet)から NuGet パッケージをインストールします。このチュートリアルに必要な NuGet パッケージは正確にわかっているため、ここでこのステップを実行できます。また、開発中に必要なパッケージが判明することは一般的なことです。その場合は、その時点で同様のコマンドを実行できます。

## コードの作成
<a name="s3-1-cross-code"></a>

1. `S3CreateAndList` フォルダで、`Program.cs` を見つけてコードエディタで開きます。

1. 内容を次のコードに置き換えて、ファイルを保存します。

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

## アプリケーションを実行する
<a name="s3-1-cross-run"></a>

1. 以下のコマンドを実行してください。

   ```
   dotnet run
   ```

1. 出力を調べ、所有している Amazon S3 バケットの数 (存在する場合) とその名前を確認します。

1. 新しい Amazon S3 バケットの名前を選択します。「dotnet-quicktour-s3-1-cross-」をベースとして使用し、GUID や名前などのような一意のものを追加します。「[Amazon S3 ユーザーガイド](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)」の「[バケット命名規則](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html#bucketnamingrules)」で説明されているように、バケット名のルールに従ってください。

1. 次のコマンドを実行し、*amzn-s3-demo-bucket* を選択したバケットの名前に置き換えます。

   ```
   dotnet run amzn-s3-demo-bucket
   ```

1. 出力を調べて、作成された新しいバケットを確認します。

## クリーンアップ
<a name="s3-1-cross-clean-up"></a>

このチュートリアルでは、この時点でクリーンアップを選択できるいくつかのリソースを作成しました。
+ 前のステップでアプリケーションが作成したバケットを保持しない場合は、[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) の Amazon S3 コンソールを使用してバケットを削除します。
+ .NET プロジェクトを保持しない場合は、開発環境から `S3CreateAndList` フォルダを削除します。

## 次の段階
<a name="s3-1-cross-next"></a>

[クイックツアーメニュー](quick-start.md)に戻るか、[このクイックツアーの最後](quick-start-next-steps.md)までスキップします。

# を使用したシンプルな Windows ベースのアプリケーション AWS SDK for .NET
<a name="quick-start-s3-1-winvs"></a>

このチュートリアルでは、Visual Studio と .NET Core を備えた Windows AWS SDK for .NET 上の を使用します。また、SDK を使用して、所有する [ Amazon S3 バケット](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)を一覧表示し、必要に応じてバケットを作成する方法を説明します。

このチュートリアルは、Visual Studio と .NET Core を使用して Windows で実行します。開発環境を設定するその他の方法については、「[用のツールチェーンのインストールと設定 AWS SDK for .NET](net-dg-dev-env.md)」を参照してください。

**Visual Studio および .NET Core を使用した Windows での開発では必須:**
+ [Microsoft Visual Studio](https://visualstudio.microsoft.com/vs/)
+ Microsoft .NET Core 2.1, 3.1 以降

  これは通常、Visual Studio の最新バージョンをインストールするとデフォルトで追加されます。

**注記**  
これらのチュートリアルを使用する前に、まず[ツールチェーンをインストール](net-dg-dev-env.md)し、[SDK 認証を設定](creds-idc.md)しておく必要があります。

## ステップ
<a name="s3-1-winvs-steps"></a>
+ [プロジェクトの作成](#s3-1-winvs-create-project)
+ [コードの作成](#s3-1-winvs-code)
+ [アプリケーションを実行する](#s3-1-winvs-run)
+ [クリーンアップ](#s3-1-winvs-clean-up)

## プロジェクトの作成
<a name="s3-1-winvs-create-project"></a>

1. Visual Studio を開き、**コンソールアプリ**テンプレートの C\$1 バージョンを使用する新しいプロジェクトを作成します。つまり、「....NET で実行できるコマンドラインアプリケーションを作成するためのもの」と記述します。プロジェクトに `S3CreateAndList` という名前を付けます。
**注記**  
コンソールアプリケーションテンプレートの .NET Framework バージョンを選択しないでください。選択する場合は、.NET Framework 4.7.2 以降を使用してください。

1. 新しく作成したプロジェクトを読み込んだら、[**ツール**]、[**NuGet パッケージマネージャー**]、[**ソリューションの NuGet パッケージの管理**] の順に選択します。

1. 次の NuGet パッケージをブラウズし、プロジェクト `AWSSDK.S3`、`AWSSDK.SecurityToken`、`AWSSDK.SSO`、`AWSSDK.SSOOIDC` にインストールします。

   このプロセスでは、[NuGet パッケージ マネージャー](https://www.nuget.org/profiles/awsdotnet)から NuGet パッケージをインストールします。このチュートリアルに必要な NuGet パッケージは正確にわかっているため、ここでこのステップを実行できます。また、開発中に必要なパッケージが判明することは一般的なことです。その場合は、その時点で同様の手順に従ってインストールしてください。

1. コマンドプロンプトからアプリケーションを実行する場合は、ここでコマンドプロンプトを開き、ビルド出力を含むフォルダに移動します。通常は `S3CreateAndList\S3CreateAndList\bin\Debug\net6.0` のようになりますが、環境によって異なります。

## コードの作成
<a name="s3-1-winvs-code"></a>

1. `S3CreateAndList` プロジェクトで、`Program.cs` を探して IDE で開きます。

1. 内容を次のコードに置き換えて、ファイルを保存します。

   ```
   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. アプリケーションをビルドします。
**注記**  
古いバージョンの Visual Studio を使用している場合は、次のようなビルドエラーが発生することがあります。  
"Feature 'async main' is not available in C\$1 7.0. Please use language version 7.1 or greater." (C\$1 7.0 では async main 機能を使用できません。言語バージョン 7.1 以降を使用してください。)  
このエラーが発生した場合は、新しいバージョンの言語を使用するようにプロジェクトをセットアップします。これは通常、プロジェクトのプロパティ (**Build**、**Advanced**) で実行します。

## アプリケーションを実行する
<a name="s3-1-winvs-run"></a>

1. コマンドライン引数なしでアプリケーションを実行します。これは、コマンドプロンプト (すでに開いている場合) または IDE から行います。

1. 出力を調べ、所有している Amazon S3 バケットの数 (存在する場合) とその名前を確認します。

1. 新しい Amazon S3 バケットの名前を選択します。「dotnet-quicktour-s3-1-winvs-」をベースとして使用し、GUID や名前などのような一意のものを追加します。「[Amazon S3 ユーザーガイド](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)」の「[バケット命名規則](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html#bucketnamingrules)」で説明されているように、バケット名のルールに従ってください。

1. アプリケーションを再度実行します。今回はバケット名を指定します。

   コマンドラインで、次のコマンドの *amzn-s3-demo-bucket* を、選択したバケットの名前に置き換えます。

   ```
   S3CreateAndList amzn-s3-demo-bucket
   ```

   または、IDE でアプリケーションを実行している場合は、[**プロジェクト**]、[**S3CreateAndList プロパティ**]、[**デバッグ**] の順に選択し、そこにバケット名を入力します。

1. 出力を調べて、作成された新しいバケットを確認します。

## クリーンアップ
<a name="s3-1-winvs-clean-up"></a>

このチュートリアルでは、この時点でクリーンアップを選択できるいくつかのリソースを作成しました。
+ 前のステップでアプリケーションが作成したバケットを保持しない場合は、[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) の Amazon S3 コンソールを使用してバケットを削除します。
+ .NET プロジェクトを保持しない場合は、開発環境から `S3CreateAndList` フォルダを削除します。

## 次の段階
<a name="s3-1-winvs-next"></a>

[クイックツアーメニュー](quick-start.md)に戻るか、[このクイックツアーの最後](quick-start-next-steps.md)までスキップします。

# 次のステップ
<a name="quick-start-next-steps"></a>

これらのチュートリアルの実行中に作成した残りのリソースは必ずすべてクリーンアップしてください。これらは、ファイルやフォルダなどの開発環境の AWS リソースまたはリソースである場合があります。

を学習したので AWS SDK for .NET、[プロジェクトを開始できます](net-dg-start-new-project.md)。