

 AWS SDK for .NET V3 がメンテナンスモードになりました。

[AWS SDK for .NET V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html) に移行することをお勧めします。移行方法の詳細と情報については、[メンテナンスモードのお知らせ](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/)を参照してください。

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

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

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

このセクションのいくつかのトピックでは、これらの重要な項目の設定方法について説明します。

このセクションの他のトピックおよび他のセクションでは、プロジェクトを設定するさらに高度な方法について説明します。

**Topics**
+ [ツールチェーンのインストールと設定](net-dg-dev-env.md)
+ [SDK 認証の設定](creds-idc.md)
+ [クイックツアーに参加する](quick-start.md)
+ [新しいプロジェクトを開始する](net-dg-start-new-project.md)
+ [AWS リージョンを設定する](net-dg-region-selection.md)
+ [NuGet を使用して AWSSDK パッケージをインストールする](net-dg-install-assemblies.md)
+ [NuGet を使用せずに AWSSDK アセンブリをインストールする](net-dg-install-without-nuget.md)
+ [認証情報とプロファイルの解決](creds-assign.md)
+ [ユーザーとロール](net-dg-users-roles.md)
+ [高度な設定](net-dg-advanced-config.md)
+ [レガシー認証情報の使用](net-dg-legacy-creds.md)

# ツールチェーンのインストールと設定
<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>

[を使用して SDK 認証を設定する AWS](creds-idc.md)

# を使用して SDK 認証を設定する 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 v3 などのローカル開発ツールで動作する一時的な認証情報 AWS を生成します。

このプロセスでは、最初のアカウント設定時に作成されたルート認証情報、IAM ユーザー、または ID プロバイダーからのフェデレーティッド ID を使用して認証でき、CLI AWS または AWS Tools for PowerShell が自動的に一時的な認証情報を管理します。このアプローチにより、長期的な認証情報をローカルに保存する必要がなくなるため、セキュリティが強化されます。

 AWS CLI から `aws login` コマンドを実行すると、アクティブなコンソールセッションから選択することも、ブラウザベースの認証フローを通じてサインインすることもできます。これにより、一時的な認証情報が自動的に生成されます。一時的な認証情報トークンは 15 分で期限切れになりますが、 AWS SDK for .NET v3 はリクエスト中に必要に応じてトークンを自動的に更新します。

**警告**  
この機能は .NET Framework ターゲットではサポートされていません。

**重要**  
認証にコンソール認証情報を使用している場合、 AWS サインイン解決が機能するように、アプリケーションは次の NuGet パッケージを参照する必要があります。  
**AWSSDK.Signin**
これらのパッケージを参照しないと、ランタイム 例外が発生します。
+ [CLI AWS を使用してコンソール認証情報を使用してログインします。](https://docs.aws.amazon.com/sdkref/latest/guide/access-login.html)

 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 コード例](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) などのクロスプラットフォームツールを使用して実行します。開発環境を設定するその他の方法については、「[ツールチェーンのインストールと設定](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)までスキップします。

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

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

このチュートリアルは、Visual Studio と .NET Core を使用して Windows で実行します。開発環境を設定するその他の方法については、「[ツールチェーンのインストールと設定](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 バージョンの **Console App** テンプレート（説明文に「…for creating a command-line application that can run on .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)とお考えかもしれません。

# 新しいプロジェクトを開始する
<a name="net-dg-start-new-project"></a>

新しいプロジェクトを開始して AWS のサービスにアクセスするには、いくつかのテクニックを使用できます。これらのテクニックの一部を次に示します。
+ AWS で.NET 開発を初めて行う場合や、AWS SDK for .NET を初めて使用する場合は、[クイックツアーに参加する](quick-start.md)で完全な例をご確認ください。SDK についてわかりやすく説明しています。
+ 基本的なプロジェクトは、.NET CLI を使用して開始できます。この例を表示するには、コマンドプロンプトまたはターミナルを開き、フォルダまたはディレクトリを作成してそこに移動し、次のように入力します。

  ```
  dotnet new console --name [SOME-NAME]
  ```

  空のプロジェクトが作成されます。これにコードと NuGet パッケージを追加できます。詳細については、[.NET Core ガイド](https://learn.microsoft.com/en-us/dotnet/fundamentals/)を参照してください。

  プロジェクトテンプレートのリストを表示するには、以下を使用します。`dotnet new --list`
+ AWS Toolkit for Visual Studio には、さまざまな AWS サービスの C\$1 プロジェクトテンプレートが含まれています。Visual Studio で[ツールキットをインストール](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/setup.html)すると、これらのテンプレートにアクセスして新しいプロジェクトを作成できます。

  これを確認する方法については、[AWS Toolkit for Visual Studio ユーザーガイド](https://docs.aws.amazon.com/AWSToolkitVS/latest/UserGuide/)の「[AWS サービスでの作業](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/working-with-services.html)」を参照してください。このセクションに、新しいプロジェクトの作成例がいくつか含まれています。
+ AWS Toolkit for Visual Studio を使用せずに Visual Studio を使用して Windows で開発する場合、一般的なテクニックを使用して新しいプロジェクトを作成します。

  例を確認するには、Visual Studio を開き、[**File**] (ファイル)、[**New**] (新規作成)、[**Project**] (プロジェクト) の順に選択します。「.net core」を検索し、**コンソールアプリ (.NET Core)** または **WPF アプリ (.NET Core)** テンプレートを選択します。空のプロジェクトが作成されます。これにコードと NuGet パッケージを追加できます。

AWS での作業方法の例については、「[ガイダンス付きのコード例高レベルライブラリとフレームワーク](tutorials-examples.md)」を参照してください。

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

# AWS リージョンを設定する
<a name="net-dg-region-selection"></a>

AWS リージョンにより、特定の地理的リージョンに物理的に存在する AWS サービスにアクセスすることができます。これは、冗長性と、ユーザーがアクセスする場所の近くでのデータとアプリケーションの実行を維持するために有効です。

各 AWS サービスでサポートされているすべてのリージョンとエンドポイントの現在のリストを表示するには、*AWS 全般のリファレンス*の「[DD のサービス エンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)」を参照してください。既存のリージョンエンドポイントのリストを表示するには、[AWSサービスエンドポイント](https://docs.aws.amazon.com/general/latest/gr/rande.html)を参照してください。リージョンの詳細については、「[アカウントで使用できる AWS リージョンを指定する](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-regions.html)」を参照してください。

[特定のリージョン](#per-client)にアクセスする AWS サービスクライアントを作成できます。また、[すべての AWS サービスクライアント](#globally)に使用されるリージョンを使用してアプリケーションを設定することもできます。次に、この 2 つのケースについて説明します。

## 特定のリージョンを使用してサービスクライアントを作成する
<a name="per-client"></a>

アプリケーションのいずれかの AWS サービスクライアント用にリージョンを指定できます。この方法でのリージョンの設定は、特定のサービスクライアントのグローバル設定よりも優先されます。

### 既存のリージョン
<a name="w2aab9c21c11b5"></a>

この例では、既存のリージョンで [Amazon EC2 クライアント](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TEC2Client.html)をインスタンス化する方法を示します。ここでは、定義済み [RegionEndpoint](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TRegionEndpoint.html) フィールドを使用します。

```
using (AmazonEC2Client ec2Client = new AmazonEC2Client(RegionEndpoint.USWest2))
{
  // Make a request to EC2 in the us-west-2 Region using ec2Client
}
```

### RegionEndpoint クラスを使用した新しいリージョン
<a name="w2aab9c21c11b7"></a>

この例では、[RegionEndpoint.GetBySystemName](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/MRegionEndpointGetBySystemNameString.html) を使用して新しいリージョンエンドポイントを作成する方法を示しています。

```
var newRegion = RegionEndpoint.GetBySystemName("us-west-new");
using (var ec2Client = new AmazonEC2Client(newRegion))
{
  // Make a request to EC2 in the new Region using ec2Client
}
```

### サービスクライアント設定クラスを使用した新しいリージョン
<a name="w2aab9c21c11b9"></a>

この例では、サービスクライアント設定クラスの `ServiceURL` プロパティを使用してリージョンを指定する方法を示しています (この例では、[Amazonec2Config](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TEC2Config.html) クラスを使用)。

この手法は、エンドポイントリージョンが通常のエンドポイントパターンに従っていない場合でも有効です。

```
var ec2ClientConfig = new AmazonEC2Config
{
    // Specify the endpoint explicitly
    ServiceURL = "https://ec2.us-west-new.amazonaws.com"
};

using (var ec2Client = new AmazonEC2Client(ec2ClientConfig))
{
  // Make a request to EC2 in the new Region using ec2Client
}
```

## すべてのサービスクライアント用にリージョンを指定する
<a name="globally"></a>

アプリケーションによって作成されるすべての AWS サービスクライアント用にリージョンを指定する方法は複数あります。このリージョンは、特定のリージョンを使用して作成されていないサービスクライアントに使用されます。

AWS SDK for .NET は、以下の順序でリージョン値を検索します。

### プロファイル
<a name="w2aab9c21c15b7"></a>

アプリケーションまたは SDK によってロードされたプロファイルを設定します。詳細については、「[認証情報とプロファイルの解決](creds-assign.md)」を参照してください。

### 環境変数
<a name="w2aab9c21c15b9"></a>

以下のように `AWS_REGION` 環境変数を設定します。

Linux または macOS の場合:

```
export AWS_REGION='us-west-2'
```

Windows の場合:

```
set AWS_REGION=us-west-2
```

**注記**  
この環境変数をシステム全体に設定すると (`export` または `setx` を使用)、AWS SDK for .NET だけではなく、すべての SDK とツールキットが影響を受けます。

### AWSConfigs クラス
<a name="w2aab9c21c15c11"></a>

以下のように [AWSConfigs.AWSRegion](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) プロパティとして設定します。

```
AWSConfigs.AWSRegion = "us-west-2";
using (var ec2Client = new AmazonEC2Client())
{
  // Make request to Amazon EC2 in us-west-2 Region using ec2Client
}
```

## リージョン解像度
<a name="net-dg-region-resolution"></a>

AWS リージョン の指定に上記のいずれの方法も使用されない場合、AWS SDK for .NET は AWS サービス クライアントが動作するリージョンを見つけようとします。

**リージョン解像度オーダー**

1. `app.config`や`web.config`などのアプリケーション設定ファイル。

1. 環境変数（`AWS_REGION`および`AWS_DEFAULT_REGION`） 

1. `AWSConfigs.AWSProfileName` の値で指定された名前のプロファイル。

1. `AWS_PROFILE` 環境変数で指定された名前を持つプロファイル。

1. `[default]` のプロファイル。

1. Amazon EC2 インスタンスのメタデータ (EC2 インスタンスで実行されている場合)。

リージョンが見つからない場合、SDKは、 AWS サービスクライアントにリージョンが設定されていないことを示す例外を投げます。

## 中国 (北京) リージョンに関する特別な情報
<a name="net-dg-region-cn-north-1"></a>

中国 (北京) リージョンでサービスを使用するには、中国 (北京) リージョン固有のアカウントと認証情報が必要です。他の AWS リージョンのアカウントと認証情報は、中国 (北京) リージョンでは使用できません。同様に、中国 (北京) リージョンのアカウントと認証情報は他の AWS リージョンでは使用できません。中国 (北京) リージョンで利用可能なエンドポイントとプロトコルの詳細については、「[北京リージョンのエンドポイント](https://docs.amazonaws.cn/en_us/aws/latest/userguide/endpoints-Beijing.html)」を参照してください。

## 新しい AWS サービスに関する新しい特別な情報
<a name="net-dg-region-new-services"></a>

新しい AWS のサービスは、最初にいくつかのリージョンで開始された後で、他のリージョンでサポートされます。このような場合、そのサービス用の新しいリージョンにアクセスするために最新の SDK をインストールする必要はありません。新しく追加されたリージョンは、前述したように、クライアントごと、またはグローバルに指定できます。

# NuGet を使用して AWSSDK パッケージをインストールする
<a name="net-dg-install-assemblies"></a>

[NuGet](https://www.nuget.org/) は .NET プラットフォームのパッケージ管理システムです。NuGet を使用すると、[AWSSDK パッケージ](https://www.nuget.org/profiles/awsdotnet)とその他のいくつかの拡張機能をプロジェクトにインストールできます。詳細については、GitHub ウェブサイトの [aws/dotnet](https://github.com/aws/dotnet) リポジトリを参照してください。

NuGet には常に AWSSDK パッケージの最新バージョンと以前のバージョンが含まれています。NuGet はパッケージ間の依存関係を認識し、必要なすべてのパッケージを自動的にインストールします。

**警告**  
NuGet パッケージのリストには、単に「AWSSDK」という名前の (識別子が付加されていない) パッケージが含まれていることがあります。この NuGet パッケージはインストールしないでください。これはレガシーであるため、新しいプロジェクトには使用できません。

NuGet を使用してインストールしたパッケージは、一元的な場所ではなく、プロジェクトと一緒の場所に保存されます。これにより、その他のアプリケーションの互換性問題を発生させることなく、特定のアプリケーションに固有のアセンブリバージョンをインストールすることができます。NuGet の詳細については、[NuGet のドキュメント](https://learn.microsoft.com/en-us/nuget/)を参照してください。

**注記**  
プロジェクトベースで NuGet パッケージをダウンロードしてインストールできない、または許可されていない場合は、AWSSDK アセンブリを入手して、ローカル (またはオンプレミス) に保存できます。  
これが該当し、AWSSDK アセンブリをまだ入手していない場合は、「[AWSSDK アセンブリを入手する](net-dg-obtain-assemblies.md)」を参照してください。ローカルに保存されたアセンブリの使用方法については、「[NuGet を使用せずに AWSSDK アセンブリをインストールする](net-dg-install-without-nuget.md)」を参照してください。

## コマンドプロンプトまたはターミナルからの NuGet の使用
<a name="package-install-nuget"></a>

1. [NuGet の AWSSDK パッケージ](https://www.nuget.org/profiles/awsdotnet)に移動し、プロジェクトに必要なパッケージ (**[AWSSDK.S3](https://www.nuget.org/packages/AWSSDK.S3/)**など) を決定します。

1. そのパッケージのウェブページから.NET CLI コマンドをコピーします。以下に例を示します。

   **`dotnet add package AWSSDK.S3 --version 3.3.110.19`**

1. プロジェクトのディレクトリで、その .NET CLI コマンドを実行します。NuGet は、[AWSSDK.Core](https://www.nuget.org/packages/AWSSDK.Core) などの依存関係があるものもすべてインストールします。

**注記**  
最新バージョンの NuGet パッケージのみが必要な場合は、以下の例に示すように、コマンドからバージョン情報を除外できます。  
**`dotnet add package AWSSDK.S3`**

## Visual Studio ソリューションエクスプローラーからの NuGet の使用
<a name="package-install-gui"></a>

1. **ソリューションエクスプローラー**で、プロジェクトを右クリックして、コンテキストメニューの [**NuGet パッケージの管理**] を選択します。

1. **NuGet パッケージマネージャー**の左側のペインで、[**参照**] を選択します。検索ボックスを使用して、インストールするパッケージを検索できます。NuGet は、[AWSSDK.Core](https://www.nuget.org/packages/AWSSDK.Core) などの依存関係があるものもすべてインストールします。

   次の図は、**AWSSDK.S3** パッケージのインストールを示しています。  
![\[NuGet パッケージマネージャーに表示された AWSSDK.S3 パッケージ。\]](http://docs.aws.amazon.com/ja_jp/sdk-for-net/v3/developer-guide/images/nuget-install-vs-dlg.png)

## パッケージマネージャーコンソールからの NuGet の使用
<a name="package-install-cmd"></a>

Visual Studio で [**Tools**] (ツール) メニューから、[**Package Manager Console**] (NuGet パッケージマネージャー)、[**Package Manager Console**] (パッケージマネージャーコンソール) を選択します。

パッケージマネージャーコンソールで **`Install-Package`** コマンドを使用して、必要な AWSSDK パッケージをインストールできます。たとえば、[AWSSDK.S3](https://www.nuget.org/packages/AWSSDK.S3) をインストールするには、次のコマンドを使用します。

```
PM> Install-Package AWSSDK.S3
```

NuGet は、[AWSSDK.Core](https://www.nuget.org/packages/AWSSDK.Core) などの依存関係があるものもすべてインストールします。

以前のバージョンのパッケージをインストールする必要がある場合は、`-Version` オプションを使用して希望するパッケージのバージョンを指定します。以下に例を示します。

```
PM> Install-Package AWSSDK.S3 -Version 3.3.106.6
```

Package Manager コンソールのコマンドの詳細については、Microsoft の[NuGet のドキュメント](https://learn.microsoft.com/en-us/nuget/)の「[PowerShell リファレンス](https://learn.microsoft.com/en-us/nuget/reference/powershell-reference)」を参照してください。

# NuGet を使用せずに AWSSDK アセンブリをインストールする
<a name="net-dg-install-without-nuget"></a>

このトピックでは、「[AWSSDK アセンブリを入手する](net-dg-obtain-assemblies.md)」の説明に従って入手し、ローカル (またはオンプレミス) に保存した AWSSDK アセンブリの使用方法について説明します。この方法は、SDK リファレンスの処理には推奨されませんが、一部の環境では必須です。****

**注記**  
SDK リファレンスを処理するには、各プロジェクトで必要とされる NuGet パッケージのみをダウンロードしてインストールする方法が推奨されます。その方法については、「[NuGet を使用して AWSSDK パッケージをインストールする](net-dg-install-assemblies.md)」を参照してください。

**AWSSDK アセンブリをインストールするには**

1. 必要な AWSSDK アセンブリのプロジェクト領域にフォルダを作成します。この例では、フォルダに `AwsAssemblies` と名前を付けます。

1. AWSSDK アセンブリをまだ入手していない場合は、[AWSSDK アセンブリを入手します](net-dg-obtain-assemblies.md)。アセンブリは、ローカルのダウンロードフォルダまたはインストールフォルダに保存されます。必要なアセンブリの DLL ファイルを、そのダウンロードフォルダからプロジェクト (この例の場合、`AwsAssemblies` フォルダ) にコピーします。

   必ず依存関係もコピーします。依存関係については、[GitHub](https://github.com/aws/aws-sdk-net/blob/aws-sdk-net-v3.7/generator/ServiceModels/_sdk-versions.json) ウェブサイトを参照してください。

1. 次のように、必要なアセンブリを参照します。

------
#### [ Cross-platform development ]

   1. プロジェクトの `.csproj` ファイルを開き、`<ItemGroup>` 要素を追加します。

   1. `<ItemGroup>` 要素では、必要なアセンブリごとに `Include` 属性を持つ `<Reference>` 要素を追加します。

      たとえば、Amazon S3 の場合は、次の行をプロジェクトの `.csproj` ファイルに追加します。

      **Linux および macOS の場合:**

      ```
      <ItemGroup>
        <Reference Include="./AwsAssemblies/AWSSDK.Core.dll" />
        <Reference Include="./AwsAssemblies/AWSSDK.S3.dll" />
      </ItemGroup>
      ```

      **Windows の場合:**

      ```
      <ItemGroup>
        <Reference Include="AwsAssemblies\AWSSDK.Core.dll" />
        <Reference Include="AwsAssemblies\AWSSDK.S3.dll" />
      </ItemGroup>
      ```

   1. プロジェクトの `.csproj` ファイルを保存します。

------
#### [ Windows with Visual Studio and .NET Core ]

   1. Visual Studio で、プロジェクトをロードして、**プロジェクト**を開き、**リファレンスを追加します**。

   1. ダイアログボックスの下部にある [**Browse**] (参照) ボタンをクリックします。プロジェクトのフォルダと必要な DLL ファイルをコピーしたサブフォルダ (`AwsAssemblies` など) に移動します。

   1. すべての DLL ファイルを選択し、[**Add**] (追加)、[**OK**] の順に選択します。

   1. プロジェクトを保存します。

------

# 認証情報とプロファイルの解決
<a name="creds-assign"></a>

AWS SDK for .NET は定められた順序で認証情報を検索し、最初に利用できるセットを現在のアプリケーションで使用します。

**認証情報の検索順序**

1. [アプリケーションでの認証情報とプロファイルへのアクセス](creds-locate.md) での記載に従い、AWS サービスクライアントで明示的に設定されている認証情報。
**注記**  
このトピックは推奨される認証情報の指定方法ではないため、[特別な考慮事項](special-considerations.md) セクションに記載されています。

1. [AWSConfigs.AWSProfileName](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html#properties) の値で指定された名前を持つ認証情報プロファイル。

1. `AWS_PROFILE` 環境変数で指定された名前を持つ認証情報プロファイル。

1. `[default]` 認証情報プロファイル。

1. `AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY` および `AWS_SESSION_TOKEN` 環境変数がすべて空でない場合に変数を使用して生成される [SessionAWSCredentials](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TSessionAWSCredentials.html)。

1.  `AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY` 環境変数が両方とも空でない場合に変数を使用して作成される [BasicAWSCredentials](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TBasicAWSCredentials.html)。

1. [コンテナ認証情報プロバイダー](https://docs.aws.amazon.com/sdkref/latest/guide/feature-container-credentials.html)。

1. Amazon EC2 インスタンスメタデータ。

アプリケーションが本番環境などの Amazon EC2 インスタンスで実行されている場合は、「[IAM ロールを使用したアクセス権の付与](net-dg-hosm.md)」の説明に従って IAM ロールを使用します。それ以外の場合 (プレリリーステストなど) は、ウェブアプリケーションがサーバー上でアクセス可能な、AWS 認証情報ファイル形式を使用したファイルに認証情報を保存します。

## プロファイルの解決
<a name="net-dg-config-creds-profile-resolution"></a>

2 つの異なる認証情報ストレージメカニズムがあるため、それを使用するように AWS SDK for .NET を設定する方法を理解することが重要です。[AWSConfigs.AWSProfilesLocation](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) プロパティは、AWS SDK for .NET が認証情報プロファイルを検索する方法を制御します。


****  

| AWSProfilesLocation | プロファイルの解決動作 | 
| --- | --- | 
|  null (未設定) または空  |  プラットフォームでサポートされていれば SDK ストアを検索し、次に[デフォルトの場所](creds-file.md)にある共有 AWS 認証情報ファイルを検索します。プロファイルがいずれの場所にもない場合は、`~/.aws/config` (Linux または macOS) または `%USERPROFILE%\.aws\config` (Windows) を検索します。  | 
|  AWS 認証情報ファイル形式のファイルへのパス  |  指定されたファイル*のみ*を対象に、指定された名前のプロファイルを検索します。  | 

## フェデレーティッドユーザーアカウントの認証情報の使用
<a name="net-dg-config-creds-saml"></a>

AWS SDK for .NET ([AWSSDK.Core](https://www.nuget.org/packages/AWSSDK.Core/) バージョン 3.1.6.0 以降) を使用するアプリケーションでは、Active Directory Federation Services (AD FS) を通じてフェデレーティッドユーザーアカウントを使用し、Security Assertion Markup Language (SAML) を使用することによって AWS サービスにアクセスできます。

フェデレーティッドアクセスサポートでは、ユーザーは Active Directory を使用して認証できます。一時的な認証情報は、自動的にユーザーに許可されます。これらの一時的な認証情報は 1 時間有効であり、アプリケーションで AWS サービスを呼び出す際に使用されます。一時的な認証情報の管理は SDK によって処理します。ドメイン結合されたユーザーアカウントでは、アプリケーションが呼び出しを行ったときに資格情報の有効期限が切れている場合に、そのユーザーは自動的に再認証され、新しい認証情報が付与されます (ドメイン結合されていないアカウントでは、ユーザーは再認証の前に認証情報の入力を求められます)。

このサポートを .NET アプリケーションで使用するには、まず PowerShell コマンドレットを使用してロールプロファイルをセットアップする必要があります。方法については、[AWS Tools for Windows PowerShell のドキュメント](https://docs.aws.amazon.com/powershell/latest/userguide/saml-pst.html)を参照してください。

ロールプロファイルを設定したら、アプリケーションでプロファイルを参照します。そのための方法はいくつかありますが、その 1 つとして [AWSConfigs.AWSProfileName](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) プロパティを他の認証情報プロファイルと同じように設定する方法があります。

*AWS Security Token Service* アセンブリ ([AWSSDK.SecurityToken](https://www.nuget.org/packages/AWSSDK.SecurityToken/)) は、AWS 認証情報を取得するための SAML サポートを提供します。フェデレーティッドユーザーアカウントの認証情報を使用するには、アプリケーションでこのアセンブリが使用できることを確認してください。

## ロールまたは一時認証情報の指定
<a name="net-dg-config-creds-assign-role"></a>

Amazon EC2 インスタンスで実行されるアプリケーションの場合、認証情報を管理する最も安全な方法は、「[IAM ロールを使用したアクセス権の付与](net-dg-hosm.md)」での説明に従って IAM ロールを使用することです。

組織外部のユーザーに対してソフトウェア実行可能ファイルが利用可能になるアプリケーションシナリオでは、*一時的なセキュリティ認証情報*を使用するようにソフトウェアを設計することをお勧めします。これらの認証情報は、AWS リソースへの制限されたアクセスの提供に加えて、指定された期間後に失効するという利点があります。一時的なセキュリティ認証情報の使用方法の詳細については、以下を参照してください。
+  [一時的な認証情報](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) 
+  [Amazon Cognito アイデンティティプール](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html)

## プロキシ認証情報の使用
<a name="net-dg-config-creds-proxy"></a>

ソフトウェアがプロキシを介して AWS と通信する場合、サービスの `Config` クラスの `ProxyCredentials` プロパティを使用して、プロキシの認証情報を指定できます。サービスの `Config` クラスは通常、サービスのプライマリ名前空間の一部です。例として、[Amazon.CloudDirectory](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudDirectory/NCloudDirectory.html) 名前空間の [AmazonCloudDirectoryConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudDirectory/TCloudDirectoryConfig.html) や [Amazon.GameLift](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/GameLift/NGameLift.html) 名前空間の [AmazonGameLiftConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/GameLift/TGameLiftConfig.html) などがあります。

たとえば、[Amazon S3](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/TS3Config.html) の場合は、次のようなコードを使用できます。`SecurelyStoredUserName` と `SecurelyStoredPassword` は、[NetworkCredential](https://learn.microsoft.com/en-us/dotnet/api/system.net.networkcredential) オブジェクトで指定されたプロキシ ユーザー名とパスワードです。

```
AmazonS3Config config = new AmazonS3Config();
config.ProxyCredentials = new NetworkCredential(SecurelyStoredUserName, SecurelyStoredPassword);
```

**注記**  
SDK の以前のバージョンでは `ProxyUsername` および `ProxyPassword` が使用されていましたが、これらのプロパティは非推奨になりました。

# ユーザーとロールに関する追加情報
<a name="net-dg-users-roles"></a>

AWS で.NET 開発を行ったり、AWS で NET アプリケーションを実行したりするには、これらのタスクに適したユーザー、アクセス許可セットとサービスロールの組み合わせが必要です。

作成する特定のユーザー、権限セット、サービス ロール、それらの使用方法は、アプリケーションの要件によって異なります。それらが使用される理由とその作成方法について、以下でさらに説明します。

## ユーザーとアクセス許可セット
<a name="net-dg-users-roles-user"></a>

長期的な認証情報を持つ IAM ユーザーアカウントを使用して AWS のサービスにアクセスすることは可能ですが、これはもはやベストプラクティスではなく、避ける必要があります。開発中であっても、AWS IAM アイデンティティセンター でユーザーとアクセス許可セットを作成し、ID ソースから提供される一時的な認証情報を使用するのがベストプラクティスです。

開発には、自分で作成したユーザー、または [SDK 認証の設定](creds-idc.md) で付与されたユーザーを使用できます。適切な AWS マネジメントコンソール アクセス許可があれば、そのユーザー用の最小特権のアクセス許可で別のアクセス許可セットを作成するか、開発プロジェクト専用の新しいユーザーを作成して、最小特権のアクセス許可セットを提供できます。選択する行動方針 (ある場合) は、状況によって異なります。

これらのユーザーとアクセス許可セット、および作成方法の詳細については、「*AWS SDK とツールリファレンスガイド*」の「[認証とアクセス](https://docs.aws.amazon.com/sdkref/latest/guide/access.html)」と、「*AWS IAM アイデンティティセンターユーザーガイド*」の「[はじめに](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html)」を参照してください。

## サービスロール
<a name="net-dg-users-roles-service-role"></a>

AWS サービスロールを作成すると、ユーザーに代わって AWS サービスにアクセスできます。このタイプのアクセスは、複数のユーザーがアプリケーションをリモートで実行する場合 (たとえば、この目的のために作成した Amazon EC2 インスタンス上で実行する場合など) に適しています。

サービスロールを作成するプロセスは状況によって異なりますが、基本的に次のプロセスを実行します。

1. AWS マネジメントコンソール にサインインして、IAM コンソール [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) を開きます。

1. [**ロール**]、[**ロールの作成**] の順に選択します。

1. **[AWS サービス]** を選択して、**[EC2]** (この例の場合) を選択し、**[EC2]** ユースケース (この例の場合) を選択します。

1. [**Next: Permissions**] (次へ: アクセス権限) を選択し、アプリケーションが使用する AWS サービスに[適切なポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)を選択します。
**警告**  
**AdministratorAccess** ポリシーは選択****しないでください**。このポリシーを選択すると、お使いのアカウント内のほぼすべての情報の読み取りと書き込みのアクセス許可が有効になります。

1. [**Next: Tags**] (次へ: タグ) を選択して、必要なタグをすべて入力します。

   タグに関する情報については、[IAM ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/)の「[AWS リソースタグ使用したアクセスコントロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)」を参照してください。

1. [**Next: Review**] (次の手順: 確認) を選択し、**ロール名**と**ロールの説明**を入力します。次に、**[Create role（ロールの作成）]** を選択します。

IAM ロールに関する概要については、[IAM ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/)の「[ID ((ユーザー、グループ、ロール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)」を参照してください。ロールの詳細については、同ガイドの「[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)」トピックを参照してください。

**ロールに関する追加情報**
+ Amazon Elastic Container Service (Amazon ECS) タスクで、[タスク用の IAM ロール](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)を使用します。
+ Amazon EC2 インスタンスで実行中のアプリケーションに対して、[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)を使用します。

# AWS SDK for .NET プロジェクトの高度な設定
<a name="net-dg-advanced-config"></a>

このセクションのトピックでは、お客様が関心を持つ可能性のある追加の設定タスクやメソッドについて説明します。

**Topics**
+ [AWSSDK.Extensions.NETCore.Setup および IConfiguration](net-dg-config-netcore.md)
+ [他のアプリケーションパラメータの設定](net-dg-config-other.md)
+ [AWS SDK for .NET の設定ファイルリファレンス](net-dg-config-ref.md)

# AWSSDK.Extensions.NETCore.Setup および IConfiguration インターフェイスの使用
<a name="net-dg-config-netcore"></a>

(このトピックは、以前は「.NET Core AWS SDK for .NET で を設定する」というタイトルでした)

.NET Core における最も大きな変更の 1 つは、`ConfigurationManager` と標準の `app.config` および `web.config` ファイルが削除されたことです。これらは .NET Framework および ASP.NET アプリケーションで使用されていました。

.NET Core での設定は、設定プロバイダーによって定められたキーと値のペアに基づいて行われます。設定プロバイダーは、コマンドライン引数、ディレクトリファイル、環境変数、設定ファイルなど、さまざまな設定ソースから設定データをキーと値のペアに読み込みます。

**注記**  
詳細については、「[ASP.NET Core の構成](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration)」を参照してください。

.NET Core AWS SDK for .NET で を簡単に使用するために、[AWSSDK.Extensions.NETCore.Setup](https://www.nuget.org/packages/AWSSDK.Extensions.NETCore.Setup/) NuGet パッケージを使用できます。多くの .NET Core ライブラリと同様に、インターフェイスに拡張機能メソッドを追加して、 AWS 設定をシームレスに`IConfiguration`します。

このパッケージのソースコードは GitHub の [https://github.com/aws/aws-sdk-net/tree/aws-sdk-net-v3.7/extensions/src/AWSSDK.Extensions.NETCore.Setup](https://github.com/aws/aws-sdk-net/tree/aws-sdk-net-v3.7/extensions/src/AWSSDK.Extensions.NETCore.Setup) にあります。

## AWSSDK.Extensions.NETCore.Setup の使用
<a name="net-core-configuration-builder"></a>

ASP.NET コアモデル-ビューコントローラー (MVC) アプリケーションを作成するとします。このアプリケーションは、Visual Studio で **ASP.NET Core ウェブアプリケーション**テンプレートを使用するか、または .NET Core CLI で `dotnet new mvc ...` を実行することにより作成できます。アプリケーションを作成すると、`Startup.cs` のコンストラクタは `appsettings.json` などの設定プロバイダーからさまざまな入力ソースを読み取ることによって設定を処理します。

```
public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}
```

`Configuration` オブジェクトを使用して *AWS* のオプションを取得するには、まず `AWSSDK.Extensions.NETCore.Setup` NuGet パッケージを追加します。次に、以下の記載に従って設定ファイルにオプションを追加します。

プロジェクトに追加されたファイルの 1 つに、`appsettings.Development.json` があります。このファイルは、`EnvironmentName` が **Development** に設定された場合に対応します。開発時にこのファイルに設定を入力すると、ローカルテスト中にのみ読み取られます。を **Production** に`EnvironmentName`設定した Amazon EC2 インスタンスをデプロイすると、このファイルは無視され、 は Amazon EC2 インスタンス用に設定された IAM 認証情報とリージョンに AWS SDK for .NET フォールバックされます。

次の設定は、`appsettings.Development.json` 設定を指定するためにプロジェクトの AWS ファイルに追加できる値の例を示しています。

```
{
  "AWS": {
    "Profile": "local-test-profile",
    "Region": "us-west-2"
  },
  "SupportEmail": "TechSupport@example.com"
}
```

*CSHTML* ファイルの設定にアクセスするには、`Configuration` ディレクティブを使用します。

```
@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration

<h1>Contact</h1>

<p>
    <strong>Support:</strong> <a href='mailto:@Configuration["SupportEmail"]'>@Configuration["SupportEmail"]</a><br />
</p>
```

コードから ファイルで設定された AWS オプションにアクセスするには、 に追加された`GetAWSOptions`拡張メソッドを呼び出します`IConfiguration`。

これらのオプションからサービスクライアントを構築するには、`CreateServiceClient` を呼び出します。次の例は、Amazon S3 サービスクライアントを作成する方法を示しています。(必ず [AWSSDK.S3](https://www.nuget.org/packages/AWSSDK.S3) NuGet パッケージをプロジェクトに追加してください)

```
var options = Configuration.GetAWSOptions();
IAmazonS3 client = options.CreateServiceClient<IAmazonS3>();
```

`appsettings.Development.json` ファイルで複数のエントリを使用して、互換性のない設定を持つ複数のサービスクライアントを作成することもできます。次の例に示すように、`service1` の設定には `us-west-2` リージョンが含まれ、`service2` の設定には特殊なエンドポイント *URL* が含まれています。

```
{
  "service1": {
    "Profile": "default",
    "Region": "us-west-2"
  },
  "service2": {
    "Profile": "default",
    "ServiceURL": "URL"
  }
}
```

その後、JSON ファイルのエントリを使用することで、特定のサービスのオプションを取得できます。例えば、`service1` の設定を取得するには以下を使用します。

```
var options = Configuration.GetAWSOptions("service1");
```

### appsettings ファイルで指定できる値
<a name="net-core-appsettings-values"></a>

`appsettings.Development.json` ファイルには次のアプリケーション設定値を設定できます。フィールド名は、記載された大文字小文字を区別して使用する必要があります。これらの設定の詳細については、「`[AWS.Runtime.ClientConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TClientConfig.html)`」クラスを参照してください。
+ Region
+ Profile
+ ProfilesLocation
+ SignatureVersion
+ RegionEndpoint
+ UseHttp
+ ServiceURL
+ AuthenticationRegion
+ AuthenticationServiceName
+ MaxErrorRetry
+ LogResponse
+ BufferSize
+ ProgressUpdateInterval
+ ResignRetries
+ AllowAutoRedirect
+ LogMetrics
+ DisableLogging
+ UseDualstackEndpoint

## ASP.NET Core の依存関係インジェクション
<a name="net-core-dependency-injection"></a>

*AWSSDK.Extensions.NETCore.Setup* NuGet パッケージには、ASP.NET Core の新しい依存関係インジェクションシステムも組み込まれています。アプリケーションの `Startup` クラスの `ConfigureServices` メソッドは、MVC サービスが追加される場所です。アプリケーションが Entity Framework を使用している場合は、これが初期化される場所でもあります。

```
public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddMvc();
}
```

**注記**  
.NET Core の依存関係インジェクションの背景については、[.NET Core のドキュメントサイト](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection)を参照してください。

`AWSSDK.Extensions.NETCore.Setup` NuGet パッケージは、依存関係インジェクションに AWS サービスを追加するために`IServiceCollection`使用できる新しい拡張機能メソッドを に追加します。次のコードは、読み取り元の AWS オプションを追加してAmazon S3と DynamoDB をサービスのリスト`IConfiguration`に追加する方法を示しています。(必ず [AWSSDK.S3](https://www.nuget.org/packages/AWSSDK.S3) および [AWSSDK.DynamoDBv2](https://www.nuget.org/packages/AWSSDK.DynamoDBv2) NuGet パッケージをプロジェクトに追加してください)

```
public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddMvc();

    services.AddDefaultAWSOptions(Configuration.GetAWSOptions());
    services.AddAWSService<IAmazonS3>();
    services.AddAWSService<IAmazonDynamoDB>();
}
```

ここで、MVC コントローラーがコンストラクタで `IAmazonS3` または `IAmazonDynamoDB` のいずれかをパラメータとして使用している場合、依存関係インジェクションシステムはこれらのサービスを渡します。

```
public class HomeController : Controller
{
    IAmazonS3 S3Client { get; set; }

    public HomeController(IAmazonS3 s3Client)
    {
        this.S3Client = s3Client;
    }

    ...

}
```

# 他のアプリケーションパラメータの設定
<a name="net-dg-config-other"></a>

**注記**  
このトピックの情報は、.NET Framework に基づくプロジェクトに固有のものです。.NET Core に基づくプロジェクトでは、デフォルトでは `App.config` および `Web.config` ファイルは存在しません。

## 開いて .NET Framework のコンテンツを表示する
<a name="w2aab9c31b9b5b1"></a>

設定可能なアプリケーションパラメータは多数あります。
+  `AWSLogging` 
+  `AWSLogMetrics` 
+  `AWSRegion` 
+  `AWSResponseLogging` 
+  `AWS.DynamoDBContext.TableNamePrefix` 
+  `AWS.S3.UseSignatureVersion4` 
+  `AWSEndpointDefinition` 
+  [AWS サービス生成エンドポイント](#config-setting-service-generated-awsendpointdefinition) 

これらのパラメータは、アプリケーションの `App.config` ファイルまたは `Web.config` ファイルで設定できます。 AWS SDK for .NET API を使用してこれらを設定することもできますが、アプリケーションの `.config` ファイルを使用することをお勧めします。ここでは、両方のアプローチについて説明します。

このトピックで後ほど説明する `<aws>` エレメントの使用方法の詳細については、「[AWS SDK for .NETの設定ファイルリファレンス](net-dg-config-ref.md)」を参照してください。

### AWSLogging
<a name="config-setting-awslogging"></a>

SDK でイベントを記録する方法を設定します。例えば、推奨される方法としては `<aws>` 要素の子要素である `<logging>` 要素の使用があります。

```
<aws>
  <logging logTo="Log4Net"/>
</aws>
```

または:

```
<add key="AWSLogging" value="log4net"/>
```

指定できる値は以下のとおりです。

** `None` **  
 イベントのログ記録を無効にします。これがデフォルトです。

** `log4net` **  
log4net を使用してログを記録します。

** `SystemDiagnostics` **  
`System.Diagnostics` クラスを使用してログを記録します。

コンマで区切ることで、`logTo` 属性に複数の値を設定できます。次の例では、`.config` ファイルを使用して `log4net` ログと `System.Diagnostics` ログの両方を設定します。

```
<logging logTo="Log4Net, SystemDiagnostics"/>
```

または:

```
<add key="AWSLogging" value="log4net, SystemDiagnostics"/>
```

または、 AWS SDK for .NET API を使用して、[LoggingOptions](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TLoggingOptions.html) 列挙の値を組み合わせて、[AWSConfigs.Logging](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) プロパティを設定します。

```
AWSConfigs.Logging = LoggingOptions.Log4Net | LoggingOptions.SystemDiagnostics;
```

この設定の変更は、新しい AWS クライアントインスタンスに対してのみ有効になります。

### AWSLogMetrics
<a name="config-setting-awslogmetrics"></a>

SDK でパフォーマンスメトリクスを記録するかどうかを指定します。`.config` ファイルでメトリクスのログを設定するには、`<logging>` 要素の `logMetrics` 属性値を設定します。これは、`<aws>` 要素の子要素です。

```
<aws>
  <logging logMetrics="true"/>
</aws>
```

または、`<appSettings>` セクションで `AWSLogMetrics` キーを設定します。

```
<add key="AWSLogMetrics" value="true">
```

または、 AWS SDK for .NET API でメトリクスのログ記録を設定するには、[AWSConfigs.LogMetrics](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) プロパティを設定します。

```
AWSConfigs.LogMetrics = true;
```

この設定では、すべてのクライアント/設定のデフォルトの `LogMetrics` プロパティを設定します。この設定の変更は、新しい AWS クライアントインスタンスに対してのみ有効になります。

### AWSRegion
<a name="config-setting-awsregion"></a>

 AWS リージョンを明示的に指定していないクライアントのデフォルトリージョンを設定します。`.config` ファイルでリージョンを設定する推奨される方法は、`aws` 要素の `region` 属性値を設定することです。

```
<aws region="us-west-2"/>
```

または、`<appSettings>` セクションで *AWSRegion* キーを設定します。

```
<add key="AWSRegion" value="us-west-2"/>
```

または、 AWS SDK for .NET API を使用してリージョンを設定するには、[AWSConfigs.AWSRegion](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) プロパティを設定します。

```
AWSConfigs.AWSRegion = "us-west-2";
```

特定のリージョンの AWS クライアントの作成の詳細については、[AWS 「リージョンの選択](net-dg-region-selection.md)」を参照してください。この設定の変更は、新しい AWS クライアントインスタンスに対してのみ有効になります。

### AWSResponseLogging
<a name="config-setting-awsresponselogging"></a>

SDK がサービス応答を記録するタイミングを設定します。指定できる値は以下のとおりです。

** `Never` **  
サービス応答を記録しません。これがデフォルトです。

** `Always` **  
常にサービス応答を記録します。

** `OnError` **  
エラーが発生したときのみサービス応答を記録します。

`.config` ファイルでサービス ログを設定する推奨される方法は、`<logging>` 要素の `logResponses` 属性値を設定することです。これは、`<aws>` 要素の子要素です。

```
<aws>
  <logging logResponses="OnError"/>
</aws>
```

または、`<appSettings>` セクションで *AWSResponseLogging* キーを設定します。

```
<add key="AWSResponseLogging" value="OnError"/>
```

または、 AWS SDK for .NET API でサービスログ記録を設定するには、[AWSConfigs.ResponseLogging](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) プロパティを [ResponseLoggingOption](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TResponseLoggingOption.html) 列挙のいずれかの値に設定します。

```
AWSConfigs.ResponseLogging = ResponseLoggingOption.OnError;
```

この設定に対する変更はすぐに反映されます。

### `AWS.DynamoDBContext.TableNamePrefix`
<a name="config-setting-aws-dynamodbcontext-tablenameprefix"></a>

手動で設定しなかった場合に `DynamoDBContext` で使用されるデフォルトの `TableNamePrefix` を設定します。

`.config` ファイルでテーブル名プレフィックスを設定する際の推奨される方法は、`<dynamoDBContext>` 要素の `tableNamePrefix` 属性値を設定することです。この要素は `<dynamoDB>` 要素の子要素であり、これ自体は `<aws>` 要素の子要素です。

```
<dynamoDBContext tableNamePrefix="Test-"/>
```

または、`<appSettings>` セクションで `AWS.DynamoDBContext.TableNamePrefix` キーを設定します。

```
<add key="AWS.DynamoDBContext.TableNamePrefix" value="Test-"/>
```

または、 AWS SDK for .NET API でテーブル名のプレフィックスを設定するには、[AWSConfigs.DynamoDBContextTableNamePrefix](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) プロパティを設定します。

```
AWSConfigs.DynamoDBContextTableNamePrefix = "Test-";
```

この設定への変更は、`DynamoDBContextConfig` および `DynamoDBContext` の新しく構築されたインスタンスのみに有効です。

### `AWS.S3.UseSignatureVersion4`
<a name="config-setting-aws-s3-usesignatureversion4"></a>

Amazon S3 クライアントがリクエストへの署名で署名バージョン 4 を使用するかどうかを設定します。

Amazon S3 の署名バージョン 4 での署名を `.config` ファイルで設定する際に推奨される方法は、`<s3>` 要素の `useSignatureVersion4` 属性を設定することです。これは、`<aws>` 要素の子要素です。

```
<aws>
  <s3 useSignatureVersion4="true"/>
</aws>
```

または、`AWS.S3.UseSignatureVersion4` セクションで `true` キーを `<appSettings>` に設定します。

```
<add key="AWS.S3.UseSignatureVersion4" value="true"/>
```

または、 AWS SDK for .NET API で署名バージョン 4 の署名を設定するには、[AWSConfigs.S3UseSignatureVersion4](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) プロパティを に設定します`true`。

```
AWSConfigs.S3UseSignatureVersion4 = true;
```

デフォルトでは、この設定は `false` ですが、一部のケースまたは一部のリージョンではデフォルトで署名バージョン 4 が使用される場合があります。設定が `true` の場合、すべてのリクエストに署名バージョン 4 が使用されます。この設定の変更は新しい Amazon S3 クライアントインスタンスに対してのみ有効です。

### AWSEndpointDefinition
<a name="config-setting-awsendpointdefinition"></a>

SDK がリージョンとエンドポイントを定義するカスタム設定ファイルを使用するかどうかを設定します。

`.config` ファイルでエンドポイント定義ファイルを設定するには、`<aws>` 要素の `endpointDefinition` 属性値を設定することをお勧めします。

```
<aws endpointDefinition="c:\config\endpoints.json"/>
```

または、`<appSettings>` セクションで *AWSEndpointDefinition* キーを設定できます。

```
<add key="AWSEndpointDefinition" value="c:\config\endpoints.json"/>
```

または、 AWS SDK for .NET API を使用してエンドポイント定義ファイルを設定するには、[AWSConfigs.EndpointDefinition](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) プロパティを設定します。

```
AWSConfigs.EndpointDefinition = @"c:\config\endpoints.json";
```

ファイル名が指定されていない場合、カスタム設定ファイルは使用されません。この設定の変更は、新しい AWS クライアントインスタンスに対してのみ有効になります。endpoint.json ファイルは、[https://github.com/aws/aws-sdk-net/blob/aws-sdk-net-v3.7/sdk/src/Core/endpoints.json](https://github.com/aws/aws-sdk-net/blob/aws-sdk-net-v3.7/sdk/src/Core/endpoints.json) から入手できます。

### AWS サービス生成エンドポイント
<a name="config-setting-service-generated-awsendpointdefinition"></a>

一部の AWS サービスは、リージョンエンドポイントを使用する代わりに独自のエンドポイントを生成します。これらのサービスのクライアントは、そのサービスおよびリソースに固有のサービス URL を使用します。これらのサービスの 2 つの例は、Amazon CloudSearch と です AWS IoT。次の例は、これらのサービスのエンドポイントを取得する方法を示しています。

#### Amazon CloudSearch エンドポイントの例
<a name="cs-endpoints-example"></a>

Amazon CloudSearch クライアントは、Amazon CloudSearch 設定サービスにアクセスするために使用されます。Amazon CloudSearch 設定サービスを使用して、検索ドメインを作成、設定、管理します。検索ドメインを作成するには、[CreateDomainRequest](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudSearch/TCreateDomainRequest.html) オブジェクトを作成し、`DomainName` プロパティを指定します。リクエストオブジェクトを使用して [AmazonCloudSearchClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudSearch/TCloudSearchClient.html) オブジェクトを作成します。[CreateDomain](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudSearch/MCloudSearchCreateDomainCreateDomainRequest.html) メソッドを呼び出します。呼び出しから返される [CreateDomainResponse](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudSearch/TCreateDomainResponse.html) オブジェクトには、`DocService` および `SearchService` エンドポイントの両方を持つ `DomainStatus` プロパティが含まれます。[AmazonCloudSearchDomainConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudSearchDomain/TCloudSearchDomainConfig.html) オブジェクトを作成し、それを使用して [AmazonCloudSearchDomainClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudSearchDomain/TCloudSearchDomainClient.html) クラスの `DocService` および `SearchService` インスタンスを初期化します。

```
// Create domain and retrieve DocService and SearchService endpoints
DomainStatus domainStatus;
using (var searchClient = new AmazonCloudSearchClient())
{
    var request = new CreateDomainRequest
    {
        DomainName = "testdomain"
    };
    domainStatus = searchClient.CreateDomain(request).DomainStatus;
    Console.WriteLine(domainStatus.DomainName + " created");
}

// Test the DocService endpoint
var docServiceConfig = new AmazonCloudSearchDomainConfig
{
    ServiceURL = "https://" + domainStatus.DocService.Endpoint
};
using (var domainDocService = new AmazonCloudSearchDomainClient(docServiceConfig))
{
    Console.WriteLine("Amazon CloudSearchDomain DocService client instantiated using the DocService endpoint");
    Console.WriteLine("DocService endpoint = " + domainStatus.DocService.Endpoint);

    using (var docStream = new FileStream(@"C:\doc_source\XMLFile4.xml", FileMode.Open))
    {
        var upload = new UploadDocumentsRequest
        {
            ContentType = ContentType.ApplicationXml,
            Documents = docStream
        };
        domainDocService.UploadDocuments(upload);
    }
}

// Test the SearchService endpoint
var searchServiceConfig = new AmazonCloudSearchDomainConfig
{
    ServiceURL = "https://" + domainStatus.SearchService.Endpoint
};
using (var domainSearchService = new AmazonCloudSearchDomainClient(searchServiceConfig))
{
    Console.WriteLine("Amazon CloudSearchDomain SearchService client instantiated using the SearchService endpoint");
    Console.WriteLine("SearchService endpoint = " + domainStatus.SearchService.Endpoint);

    var searchReq = new SearchRequest
    {
        Query = "Gambardella",
        Sort = "_score desc",
        QueryParser = QueryParser.Simple
    };
    var searchResp = domainSearchService.Search(searchReq);
}
```

#### AWS IoT エンドポイントの例
<a name="iotlong-endpoints-example"></a>

のエンドポイントを取得するには AWS IoT、[AmazonIoTClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/IoT/TIoTClient.html) オブジェクトを作成し、[DescribeEndPoint](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/IoT/MIoTDescribeEndpointDescribeEndpointRequest.html) メソッドを呼び出します。返される [DescribeEndPointResponse](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/IoT/TDescribeEndpointResponse.html) オブジェクトには、`EndpointAddress` が含まれます。[AmazonIotDataConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/IotData/TIotDataConfig.html) オブジェクトを作成し、`ServiceURL` プロパティを設定します。次に、このオブジェクトを使用して [AmazonIotDataClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/IotData/TIotDataClient.html) クラスをインスタンス化します。

```
string iotEndpointAddress;
using (var iotClient = new AmazonIoTClient())
{
    var endPointResponse = iotClient.DescribeEndpoint();
    iotEndpointAddress = endPointResponse.EndpointAddress;
}

var ioTdocServiceConfig = new AmazonIotDataConfig
{
    ServiceURL = "https://" + iotEndpointAddress
};
using (var dataClient = new AmazonIotDataClient(ioTdocServiceConfig))
{
    Console.WriteLine("AWS IoTData client instantiated using the endpoint from the IotClient");
}
```

# AWS SDK for .NET の設定ファイルリファレンス
<a name="net-dg-config-ref"></a>

**注記**  
このトピックの情報は、.NET Framework に基づくプロジェクトに固有のものです。.NET Core に基づくプロジェクトでは、デフォルトでは `App.config` および `Web.config` ファイルは存在しません。

## 開いて .NET Framework のコンテンツを表示する
<a name="w2aab9c31c11b5b1"></a>

.NET プロジェクトの `App.config` ファイルまたは `Web.config` ファイルを使用すると、AWS の認証情報、ログオプション、AWS サービスエンドポイント、AWS リージョンなどの AWS の設定や、Amazon DynamoDB、Amazon EC2、Amazon S3 などの AWS サービスの一部の設定を指定できます。以下では、適切な形式の `App.config` ファイルまたは `Web.config` ファイルを使用してこれらの設定を指定する方法について説明します。

**注記**  
`App.config` ファイルまたは `Web.config` ファイルの `<appSettings>` 要素を引き続き使用して AWS の設定を指定することもできますが、このトピックで後ほど説明するように `<configSections>` 要素および `<aws>` 要素を使用することをお勧めします `<appSettings>` エレメントの詳細については、「[AWS SDK for .NET アプリケーションの設定](net-dg-config.md)」の `<appSettings>` エレメントの例を参照してください。

**注記**  
以下の [https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) クラスプロパティをコードファイルで使用して AWS の設定を指定することはできますが、以下のプロパティは非推奨であり、将来のリリースではサポートされなくなる可能性があります。  
 `DynamoDBContextTableNamePrefix` 
 `EC2UseSignatureVersion4` 
 `LoggingOptions` 
 `LogMetrics` 
 `ResponseLoggingOption` 
 `S3UseSignatureVersion4` 
一般に、このトピックでこれから説明するように、コードファイルで `AWSConfigs` クラスのプロパティを使用して AWS の設定を指定するのではなく、`App.config` ファイルまたは `Web.config` ファイルの `<configSections>` 要素および `<aws>` 要素を使用して AWS の設定を指定することをお勧めします。上記のプロパティの詳細については、「[AWS SDK for .NET アプリケーションの設定](net-dg-config.md)」の `AWSConfigs` コード例を参照してください。

**Topics**
+ [AWS 設定セクションの宣言](#net-dg-config-ref-declaring)
+ [使用できる要素](#net-dg-config-ref-elements)
+ [要素のリファレンス](#net-dg-config-ref-elements-ref)

### AWS 設定セクションの宣言
<a name="net-dg-config-ref-declaring"></a>

AWS の設定は、`App.config` または `Web.config` ファイルの `<aws>` 要素内で指定します。`<aws>` 要素の使用を始める前に、次の例で示すように `<section>` 要素 (`<configSections>` 要素の子要素) を作成し、その `name` 属性を `aws` に、`type` 属性を `Amazon.AWSSection, AWSSDK.Core` に設定する必要があります。

```
<?xml version="1.0"?>
<configuration>
  ...
  <configSections>
    <section name="aws" type="Amazon.AWSSection, AWSSDK.Core"/>
  </configSections>
  <aws>
    <!-- Add your desired AWS settings declarations here. -->
  </aws>
  ...
</configuration>
```

Visual Studio のエディタでは、`<aws>` 要素またはその子要素の自動コード補完機能（IntelliSense）は提供されていません。

`<aws>` 要素を正しくフォーマットするには、`Amazon.AWSConfigs.GenerateConfigTemplate` メソッドを呼び出してください。このメソッドは `<aws>` 要素の正規バージョンを適切な文字列として出力するので、それを利用できます。以下のセクションでは、`<aws>` 要素の属性と子要素について説明します。

### 使用できる要素
<a name="net-dg-config-ref-elements"></a>

AWS 設定セクションで使用できる要素の間の論理的な関係を次に示します。このリストの最新バージョンは `Amazon.AWSConfigs.GenerateConfigTemplate` メソッドを呼び出すことによって生成できます。このメソッドは、`<aws>` 要素の正規バージョンをそのまま使用できる文字列として出力します。

```
<aws
  endpointDefinition="string value"
  region="string value"
  profileName="string value"
  profilesLocation="string value">
  <logging
    logTo="None, Log4Net, SystemDiagnostics"
    logResponses="Never | OnError | Always"
    logMetrics="true | false"
    logMetricsFormat="Standard | JSON"
    logMetricsCustomFormatter="NameSpace.Class, Assembly" />
  <dynamoDB
    conversionSchema="V1 | V2">
    <dynamoDBContext
      tableNamePrefix="string value">
      <tableAliases>
        <alias
          fromTable="string value"
          toTable="string value" />
      </tableAliases>
      <map
        type="NameSpace.Class, Assembly"
        targetTable="string value">
        <property
          name="string value"
          attribute="string value"
          ignore="true | false"
          version="true | false"
          converter="NameSpace.Class, Assembly" />
      </map>
    </dynamoDBContext>
  </dynamoDB>
  <s3
    useSignatureVersion4="true | false" />
  <ec2
    useSignatureVersion4="true | false" />
  <proxy
    host="string value"
    port="1234"
    username="string value"
    password="string value" />
</aws>
```

### 要素のリファレンス
<a name="net-dg-config-ref-elements-ref"></a>

AWS 設定セクションで使用できる要素のリストを次に示します。各要素について、使用できる属性と親子要素が示されています。

**Topics**
+ [alias](#net-dg-config-ref-elements-alias)
+ [`aws`](#net-dg-config-ref-elements-aws)
+ [dynamoDB](#net-dg-config-ref-elements-dynamodb)
+ [dynamoDBContext](#net-dg-config-ref-elements-ddbcontext)
+ [Ec2](#net-dg-config-ref-elements-ec2)
+ [ログ記録](#net-dg-config-ref-elements-logging)
+ [マップ](#net-dg-config-ref-elements-map)
+ [property](#net-dg-config-ref-elements-property)
+ [proxy](#net-dg-config-ref-elements-proxy)
+ [s3](#net-dg-config-ref-elements-s3)

#### alias
<a name="net-dg-config-ref-elements-alias"></a>

`<alias>` 要素は、1 つ以上のテーブル間マッピングのコレクションに含まれる、タイプに対して設定されているものとは異なるテーブルを指定する単一の項目を表します この要素は、`Amazon.Util.TableAlias` の `Amazon.AWSConfigs.DynamoDBConfig.Context.TableAliases` プロパティから AWS SDK for .NET クラスのインスタンスにマッピングされます。テーブル名のプレフィックスを適用する前に再マッピングが行われます。

この要素は次の属性を含むことができます:

** `fromTable` **  
マップ元テーブルからマップ先テーブルへのマッピングのマップ元テーブル部分です。この属性は、`Amazon.Util.TableAlias.FromTable` の AWS SDK for .NET プロパティにマッピングされます。

** `toTable` **  
マップ元テーブルからマップ先テーブルへのマッピングのマップ先テーブル部分です この属性は、`Amazon.Util.TableAlias.ToTable` の AWS SDK for .NET プロパティにマッピングされます。

`<alias>` 要素の親は、`<tableAliases>` 要素です。

`<alias>` 要素には子要素は含まれません。

次に `<alias>` 要素の使用例を示します。

```
<alias
  fromTable="Studio"
  toTable="Studios" />
```

#### `aws`
<a name="net-dg-config-ref-elements-aws"></a>

`<aws>` 要素は、AWS 設定セクションの最上位要素を表します。この要素は次の属性を含むことができます:

** `endpointDefinition` **  
使用する AWS のリージョンとエンドポイントを定義するカスタム設定ファイルの絶対パスです。この属性は、`Amazon.AWSConfigs.EndpointDefinition` の AWS SDK for .NET プロパティにマッピングされます。

** `profileName` **  
サービスの呼び出しに使用される、保存された AWS 認証情報のプロファイル名です。この属性は、`Amazon.AWSConfigs.AWSProfileName` の AWS SDK for .NET プロパティにマッピングされます。

** `profilesLocation` **  
他の AWS SDK に共有される認証情報ファイルの場所の絶対パスです。デフォルトでは、認証情報ファイルは現在のユーザーのホームディレクトリにある `.aws` ディレクトリに格納されます。この属性は、`Amazon.AWSConfigs.AWSProfilesLocation` の AWS SDK for .NET プロパティにマッピングされます。

** `region` **  
明示的にリージョンを指定していないクライアントで使用されるデフォルトの AWS リージョン ID です。この属性は、`Amazon.AWSConfigs.AWSRegion` の AWS SDK for .NET プロパティにマッピングされます。

`<aws>` 要素に親要素はありません。

`<aws>` 要素は次の子要素を含むことができます。
+  `<dynamoDB>` 
+  `<ec2>` 
+  `<logging>` 
+  `<proxy>` 
+  `<s3>` 

次に `<aws>` 要素の使用例を示します。

```
<aws
  endpointDefinition="C:\Configs\endpoints.xml"
  region="us-west-2"
  profileName="development"
  profilesLocation="C:\Configs">
  <!-- ... -->
</aws>
```

#### dynamoDB
<a name="net-dg-config-ref-elements-dynamodb"></a>

`<dynamoDB>` 要素は、Amazon DynamoDB の設定のコレクションを表します。この要素は、*conversionSchema* 属性を含むことができます。この属性は、.NET と DynamoDB オブジェクトの間の変換に使用するバージョンを表します。使用できる値は、V1 および V2 です。この属性は、`Amazon.DynamoDBv2.DynamoDBEntryConversion` の AWS SDK for .NET クラスにマッピングされます。詳細については、「[DynamoDB Series - Conversion Schemas](http://blogs.aws.amazon.com/net/post/Tx2TCOGWG7ARUH5/DynamoDB-Series-Conversion-Schemas)」を参照してください。

`<dynamoDB>` 要素の親は、`<aws>` 要素です。

`<dynamoDB>` 要素は、`<dynamoDBContext>` 子要素を含むことができます。

次に `<dynamoDB>` 要素の使用例を示します。

```
<dynamoDB
  conversionSchema="V2">
  <!-- ... -->
</dynamoDB>
```

#### dynamoDBContext
<a name="net-dg-config-ref-elements-ddbcontext"></a>

`<dynamoDBContext>` 要素は、Amazon DynamoDB コンテキスト固有の設定のコレクションを表します。この要素は *tableNamePrefix* 属性を含むことができます。この属性は、テーブル名プレフィックスが手動で設定されていない場合に DynamoDB コンテキストが使用するデフォルトのプレフィックスを表します。この属性は、`Amazon.Util.DynamoDBContextConfig.TableNamePrefix` の `Amazon.AWSConfigs.DynamoDBConfig.Context.TableNamePrefix` プロパティから AWS SDK for .NET プロパティにマッピングされます。詳細については、「[Enhancements to the DynamoDB SDK](http://blogs.aws.amazon.com/net/post/Tx2C4MHH2H0SA5W/Enhancements-to-the-DynamoDB-SDK)」を参照してください。

`<dynamoDBContext>` 要素の親は、`<dynamoDB>` 要素です。

`<dynamoDBContext>` 要素は次の子要素を含むことができます。
+  `<alias>` (1 つまたは複数のインスタンス)
+  `<map>` (1 つまたは複数のインスタンス)

次に `<dynamoDBContext>` 要素の使用例を示します。

```
<dynamoDBContext
  tableNamePrefix="Test-">
  <!-- ... -->
</dynamoDBContext>
```

#### Ec2
<a name="net-dg-config-ref-elements-ec2"></a>

`<ec2>` 要素は、Amazon EC2 の設定のコレクションを表します。この要素は、*useSignatureVersion4* 属性を含むことができます。この属性は、署名バージョン 4 の署名をすべての要求に対して使用すること (true)、または署名バージョン 4 の署名をすべての要求に対して使用しないこと (false、デフォルト) を指定します。この属性は、`Amazon.Util.EC2Config.UseSignatureVersion4` の `Amazon.AWSConfigs.EC2Config.UseSignatureVersion4` プロパティから AWS SDK for .NET プロパティにマッピングされます。

`<ec2>` 要素の親は、要素です。

`<ec2>` 要素には子要素は含まれません。

次に `<ec2>` 要素の使用例を示します。

```
<ec2
  useSignatureVersion4="true" />
```

#### ログ記録
<a name="net-dg-config-ref-elements-logging"></a>

`<logging>` 要素は、応答ログおよびパフォーマンスメトリクスログの設定のコレクションを表します。この要素は次の属性を含むことができます:

** `logMetrics` **  
パフォーマンスメトリクスをすべてのクライアントおよび設定に対して記録するか (true)、または記録しないか (false) を示します。この属性は、`Amazon.Util.LoggingConfig.LogMetrics` の `Amazon.AWSConfigs.LoggingConfig.LogMetrics` プロパティから AWS SDK for .NET プロパティにマッピングされます。

** `logMetricsCustomFormatter` **  
ログ記録メトリクスのカスタムフォーマッターのデータ型およびアセンブリ名です この属性は、`Amazon.Util.LoggingConfig.LogMetricsCustomFormatter` の `Amazon.AWSConfigs.LoggingConfig.LogMetricsCustomFormatter` プロパティから AWS SDK for .NET プロパティにマッピングされます。

** `logMetricsFormat` **  
ログ記録メトリクスを示す形式です (`Amazon.Util.LoggingConfig.LogMetricsFormat` の `Amazon.AWSConfigs.LoggingConfig.LogMetricsFormat` プロパティから AWS SDK for .NET プロパティにマッピングされます)。  
使用できる値は次のとおりです。    
** `JSON` **  
JSON 形式を使用します。  
** `Standard` **  
デフォルトの形式を使用します。

** `logResponses` **  
サービス応答をいつログに記録するかを示します (`Amazon.Util.LoggingConfig.LogResponses` の `Amazon.AWSConfigs.LoggingConfig.LogResponses` プロパティから AWS SDK for .NET プロパティにマッピングされます)。  
使用できる値は次のとおりです。    
** `Always` **  
常にサービス応答を記録します。  
** `Never` **  
サービス応答を記録しません。  
** `OnError` **  
エラーがあるときにのみサービス応答を記録します。

** `logTo` **  
ログを記録する場所を示します (`LogTo` の `Amazon.AWSConfigs.LoggingConfig.LogTo` プロパティから AWS SDK for .NET プロパティにマッピングされます)。  
使用できる値は次のとおりです。    
** `Log4Net` **  
log4net にログを記録します。  
** `None` **  
ログを無効にします。  
** `SystemDiagnostics` **  
System.Diagnostics にログを記録します。

`<logging>` 要素の親は、`<aws>` 要素です。

`<logging>` 要素には子要素は含まれません。

次に `<logging>` 要素の使用例を示します。

```
<logging
  logTo="SystemDiagnostics"
  logResponses="OnError"
  logMetrics="true"
  logMetricsFormat="JSON"
  logMetricsCustomFormatter="MyLib.Util.MyMetricsFormatter, MyLib" />
```

#### マップ
<a name="net-dg-config-ref-elements-map"></a>

`<map>` 要素は、.NET の型から DynamoDB のテーブルへのマッピングのコレクション内の 1 つの項目を表します (`TypeMapping` の `Amazon.AWSConfigs.DynamoDBConfig.Context.TypeMappings` プロパティから AWS SDK for .NET クラスのインスタンスにマッピングされます)。詳細については、「[Enhancements to the DynamoDB SDK](http://blogs.aws.amazon.com/net/post/Tx2C4MHH2H0SA5W/Enhancements-to-the-DynamoDB-SDK)」を参照してください。

この要素は次の属性を含むことができます:

** `targetTable` **  
マッピングが適用される DynamoDB のテーブルです。この属性は、`Amazon.Util.TypeMapping.TargetTable` の AWS SDK for .NET プロパティにマッピングされます。

** `type` **  
マッピングが適用される型とアセンブリ名です この属性は、`Amazon.Util.TypeMapping.Type` の AWS SDK for .NET プロパティにマッピングされます。

`<map>` 要素の親は、`<dynamoDBContext>` 要素です。

`<map>` 要素は、`<property>` 子要素の 1 つまたは複数のインスタンスを含むことができます。

次に `<map>` 要素の使用例を示します。

```
<map
  type="SampleApp.Models.Movie, SampleDLL"
  targetTable="Movies">
  <!-- ... -->
</map>
```

#### property
<a name="net-dg-config-ref-elements-property"></a>

`<property>` 要素は DynamoDB のプロパティを表します。(この要素は、AWS SDK for .NET の `AddProperty` メソッドから Amazon.Util.PropertyConfig クラスのインスタンスにマッピングされます) 詳細については、「[DynamoDB SDK の機能強化](http://blogs.aws.amazon.com/net/post/Tx2C4MHH2H0SA5W/Enhancements-to-the-DynamoDB-SDK)」および「[DynamoDB の属性](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DeclarativeTagsList.html)」を参照してください。

この要素は次の属性を含むことができます:

** `attribute` **  
範囲キーの名前など、プロパティの属性の名前です。この属性は、`Amazon.Util.PropertyConfig.Attribute` の AWS SDK for .NET プロパティにマッピングされます。

** `converter` **  
このプロパティに使用する必要があるコンバーターの種類です この属性は、`Amazon.Util.PropertyConfig.Converter` の AWS SDK for .NET プロパティにマッピングされます。

** `ignore` **  
関連付けられているプロパティを無視する必要があるか (true)、またはないか (false) を示します。この属性は、`Amazon.Util.PropertyConfig.Ignore` の AWS SDK for .NET プロパティにマッピングされます。

** `name` **  
プロパティの名前。この属性は、`Amazon.Util.PropertyConfig.Name` の AWS SDK for .NET プロパティにマッピングされます。

** `version` **  
このプロパティが項目のバージョン番号を格納する必要があるか (true)、またはないか (false) を示します。この属性は、`Amazon.Util.PropertyConfig.Version` の AWS SDK for .NET プロパティにマッピングされます。

`<property>` 要素の親は、`<map>` 要素です。

`<property>` 要素には子要素は含まれません。

次に `<property>` 要素の使用例を示します。

```
<property
  name="Rating"
  converter="SampleApp.Models.RatingConverter, SampleDLL" />
```

#### proxy
<a name="net-dg-config-ref-elements-proxy"></a>

`<proxy>` 要素は、AWS SDK for .NET で使用するプロキシの設定を表します。この要素は次の属性を含むことができます:

**ホスト**  
プロキシサーバーのホスト名または IP アドレスです この属性は、`Amazon.Util.ProxyConfig.Host` の `Amazon.AWSConfigs.ProxyConfig.Host` プロパティから AWS SDK for .NET プロパティにマッピングされます。

**password**  
プロキシサーバーで認証するためのパスワードです。この属性は、`Amazon.Util.ProxyConfig.Password` の `Amazon.AWSConfigs.ProxyConfig.Password` プロパティから AWS SDK for .NET プロパティにマッピングされます。

**ポート**  
プロキシのポート番号です。この属性は、`Amazon.Util.ProxyConfig.Port` の `Amazon.AWSConfigs.ProxyConfig.Port` プロパティから AWS SDK for .NET プロパティにマッピングされます。

**username**  
プロキシサーバーで認証するユーザー名です。この属性は、`Amazon.Util.ProxyConfig.Username` の `Amazon.AWSConfigs.ProxyConfig.Username` プロパティから AWS SDK for .NET プロパティにマッピングされます。

`<proxy>` 要素の親は、`<aws>` 要素です。

`<proxy>` 要素には子要素は含まれません。

次に `<proxy>` 要素の使用例を示します。

```
<proxy
  host="192.0.2.0"
  port="1234"
  username="My-Username-Here"
  password="My-Password-Here" />
```

#### s3
<a name="net-dg-config-ref-elements-s3"></a>

`<s3>` 要素は、Amazon S3 の設定のコレクションを表します。この要素は、*useSignatureVersion4* 属性を含むことができます。この属性は、署名バージョン 4 の署名をすべての要求に対して使用すること (true)、または署名バージョン 4 の署名をすべての要求に対して使用しないこと (false、デフォルト) を指定します。この属性は、`Amazon.AWSConfigs.S3Config.UseSignatureVersion4` の AWS SDK for .NET プロパティにマッピングされます。

`<s3>` 要素の親は、`<aws>` 要素です。

`<s3>` 要素には子要素は含まれません。

次に `<s3>` 要素の使用例を示します。

```
<s3 useSignatureVersion4="true" />
```

# レガシー認証情報の使用
<a name="net-dg-legacy-creds"></a>

このセクションのトピックでは、 AWS IAM アイデンティティセンターを使用せずに長期または短期認証情報を使用する方法について説明します。

**警告**  
セキュリティリスクを避けるため、専用ソフトウェアを開発するときや実際のデータを扱うときは、IAM ユーザーを認証に使用しないでください。代わりに、[AWS IAM アイデンティティセンター](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) などの ID プロバイダーとのフェデレーションを使用してください。

**注記**  
このトピックの情報は、短期または長期認証情報を手動で取得および管理する必要がある場合を対象としています。短期認証情報と長期認証情報に関する追加情報については、「*AWS SDK およびツールリファレンスガイド*」の「[その他の認証方法](https://docs.aws.amazon.com/sdkref/latest/guide/access-users.html)」を参照してください。  
セキュリティのベストプラクティスについては、 AWS IAM アイデンティティセンター「」の説明に従って を使用します[SDK 認証の設定](creds-idc.md)。

## 認証情報に関する重要な警告とガイダンス
<a name="net-dg-config-creds-warnings-and-guidelines"></a>

**認証情報に関する警告**
+ アカウントのルート認証情報を使用して AWS リソースにアクセス***しないでください***。これらの認証情報は無制限のアカウントアクセスを提供し、取り消すのが困難です。
+ アプリケーションファイルにリテラルアクセスキーや認証情報を***配置しないでください***。これを行うと、パブリックリポジトリにプロジェクトをアップロードするなど、誤って認証情報が公開されるリスクが発生します。
+ プロジェクト領域に認証情報を含むファイルを***含めないでください***。
+ 共有 AWS `credentials`ファイルに保存されている認証情報はすべてプレーンテキストで保存されることに注意してください。

**認証情報を安全に管理するための追加のガイダンス**

 AWS 認証情報を安全に管理する方法の一般的な説明については、「」の[AWS 「セキュリティ認証情報](https://docs.aws.amazon.com/general/latest/gr/Welcome.html#aws-security-credentials)[AWS 全般のリファレンス](https://docs.aws.amazon.com/general/latest/gr/)」および[「IAM ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/)」の[「セキュリティのベストプラクティスとユースケース](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html)」を参照してください。これらの説明に加えて、以下の点を考慮してください。
+ IAM Identity Center のユーザーなど、追加ユーザーを作成し、 AWS ルートユーザー認証情報を使用する代わりにそのユーザー認証情報を使用します。他のユーザーの認証情報は、必要に応じて取り消すこともできますが、本質的に一時的なものです。さらに、各ユーザーに対して、特定のリソースとアクションにアクセスするためのポリシーを適用できます。これにより、最小特権のアクセス許可になります。
+ Amazon Elastic Container Service (Amazon ECS) タスクで、[タスク用の IAM ロール](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)を使用します。
+ Amazon EC2 インスタンスで実行中のアプリケーションに対して、[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)を使用します。
+ 組織外部のユーザーが利用できるアプリケーションでは、[一時的な認証情報](creds-assign.md#net-dg-config-creds-assign-role)または環境変数を使用します。

**Topics**
+ [認証情報に関する重要な警告とガイダンス](#net-dg-config-creds-warnings-and-guidelines)
+ [共有 AWS 認証情報ファイルの使用](creds-file.md)
+ [SDK ストアの使用 (Windows のみ)](sdk-store.md)

# 共有 AWS 認証情報ファイルの使用
<a name="creds-file"></a>

([認証情報に関する重要な警告とガイダンス](net-dg-legacy-creds.md#net-dg-config-creds-warnings-and-guidelines)を必ずご確認ください)

アプリケーションに認証情報を提供する方法の 1 つは、*共有 AWS 認証情報ファイル*にプロファイルを作成し、そのプロファイルに認証情報を保存することです。このファイルは、他の AWS SDKsで使用できます。また、、[AWS Tools for Windows PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/)、および [Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/)[AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/)、[JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/)、[VS Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/) の AWS ツールキットでも使用できます。

**警告**  
セキュリティリスクを避けるため、専用ソフトウェアを開発するときや実際のデータを扱うときは、IAM ユーザーを認証に使用しないでください。代わりに、[AWS IAM アイデンティティセンター](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) などの ID プロバイダーとのフェデレーションを使用してください。

**注記**  
このトピックの情報は、短期または長期認証情報を手動で取得および管理する必要がある場合を対象としています。短期認証情報と長期認証情報に関する追加情報については、「*AWS SDK およびツールリファレンスガイド*」の「[その他の認証方法](https://docs.aws.amazon.com/sdkref/latest/guide/access-users.html)」を参照してください。  
セキュリティのベストプラクティスについては、 AWS IAM アイデンティティセンター「」の説明に従って を使用します[SDK 認証の設定](creds-idc.md)。

## 一般的な情報
<a name="creds-file-general-info"></a>

デフォルトでは、共有 AWS 認証情報ファイルはホーム`.aws`ディレクトリ内の ディレクトリにあり`credentials`、 (Linux または macOS) または `~/.aws/credentials` (`%USERPROFILE%\.aws\credentials`Windows) という名前が付けられます。別の保存場所に関する詳細については、*[AWS SDK とツールのリファレンスガイド](https://docs.aws.amazon.com/sdkref/latest/guide/overview.html)*の「[共有ファイルの場所](https://docs.aws.amazon.com/sdkref/latest/guide/file-location.html)」を参照してください。また、「[アプリケーションでの認証情報とプロファイルへのアクセス](creds-locate.md)」も参照してください。

共有 AWS 認証情報ファイルはプレーンテキストファイルであり、特定の形式に従います。 AWS 認証情報ファイルの形式については、 SDK およびツールリファレンスガイドの[「認証情報ファイルの形式](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html#file-format-creds)」を参照してください。 *AWS SDKs *

共有 AWS 認証情報ファイルのプロファイルは、いくつかの方法で管理できます。
+ 任意のテキストエディタを使用して、共有 AWS 認証情報ファイルを作成および更新します。
+ このトピックで後述するように、 AWS SDK for .NET API の [Amazon.Runtime.CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/NRuntimeCredentialManagement.html) 名前空間を使用します。
+ および [Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/credentials.html)、[JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/setup-credentials.html)、VS Code の[AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/specifying-your-aws-credentials.html) AWS ツールキットのコマンドと手順を使用します。 [https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setup-credentials.html](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setup-credentials.html)
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) コマンドを使用します (例えば `aws configure set aws_access_key_id` および `aws configure set aws_secret_access_key`)。

## プロファイル管理の例
<a name="creds-file-examples"></a>

以下のセクションでは、共有 AWS 認証情報ファイルのプロファイルの例を示します。いくつかの例では、前述の認証情報管理方法のいずれかを使用して取得できる結果が示されています。その他の例では、特定のメソッドの使用方法を示しています。

### デフォルトのプロファイル
<a name="creds-file-default"></a>

共有 AWS 認証情報ファイルには、ほとんどの場合、*default* という名前のプロファイルがあります。これは、他のプロファイルが定義されていない場合に が認証情報 AWS SDK for .NET を検索する場所です。

`[default]` プロファイルは通常、以下のようになっています。

```
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
```

### プログラムでのプロファイルの作成
<a name="creds-file-create-programmatically"></a>

この例では、プロファイルを作成し、それをプログラムで共有 AWS 認証情報ファイルに保存する方法を示します。[Amazon.Runtime.CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/NRuntimeCredentialManagement.html) 名前空間の次のクラスを使用します: [CredentialProfileOptions](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TCredentialProfileOptions.html)、[CredentialProfile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TCredentialProfile.html)、[SharedCredentialsFile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TSharedCredentialsFile.html)。

```
using Amazon.Runtime.CredentialManagement;
...

// Do not include credentials in your code.
WriteProfile("my_new_profile", SecurelyStoredKeyID, SecurelyStoredSecretAccessKey);
...

void WriteProfile(string profileName, string keyId, string secret)
{
    Console.WriteLine($"Create the [{profileName}] profile...");
    var options = new CredentialProfileOptions
    {
        AccessKey = keyId,
        SecretKey = secret
    };
    var profile = new CredentialProfile(profileName, options);
    var sharedFile = new SharedCredentialsFile();
    sharedFile.RegisterProfile(profile);
}
```

**警告**  
このようなコードは、通常、アプリケーションに含めるべきではありません。アプリケーションに組み込む場合は、プレーンテキストキーがコード内、ネットワーク経由、またはコンピュータのメモリ内で見えないように適切な予防措置を講じてください。

この例で作成されたプロファイルを以下に示します。

```
[my_new_profile]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
```

### 既存のプロファイルのプログラムでの更新
<a name="creds-file-update-programmatically"></a>

この例では、前の手順で作成したプロファイルをプログラムで更新する方法を示します。[Amazon.Runtime.CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/NRuntimeCredentialManagement.html) 名前空間の次のクラスを使用します: [CredentialProfile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TCredentialProfile.html)、[SharedCredentialsFile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TSharedCredentialsFile.html)。また、[Amazon](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/N.html) 名前空間の [RegionEndpoint](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TRegionEndpoint.html) クラスも使用します。

```
using Amazon.Runtime.CredentialManagement;
...

AddRegion("my_new_profile", RegionEndpoint.USWest2);
...

void AddRegion(string profileName, RegionEndpoint region)
{
    var sharedFile = new SharedCredentialsFile();
    CredentialProfile profile;
    if (sharedFile.TryGetProfile(profileName, out profile))
    {
        profile.Region = region;
        sharedFile.RegisterProfile(profile);
    }
}
```

更新されたプロファイルを以下に示します。

```
[my_new_profile]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
region=us-west-2
```

**注記**  
 AWS リージョンは、他の場所や他の方法を使用して設定することもできます。詳細については、「[AWS リージョンを設定する](net-dg-region-selection.md)」を参照してください。

# SDK ストアの使用 (Windows のみ)
<a name="sdk-store"></a>

([重要な警告とガイドライン](net-dg-legacy-creds.md#net-dg-config-creds-warnings-and-guidelines)を必ずご確認ください)

Windows では、*SDK ストア*は AWS SDK for .NET 、アプリケーションのプロファイルを作成し、暗号化された認証情報を保存するもう 1 つの場所です。`%USERPROFILE%\AppData\Local\AWSToolkit\RegisteredAccounts.json` にあります。開発時に、[共有 AWS 認証情報ファイル](creds-file.md)の代わりとして SDK ストアを使用できます。

**警告**  
セキュリティリスクを避けるため、専用ソフトウェアを開発するときや実際のデータを扱うときは、IAM ユーザーを認証に使用しないでください。代わりに、[AWS IAM アイデンティティセンター](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) などの ID プロバイダーとのフェデレーションを使用してください。

**注記**  
このトピックの情報は、短期または長期認証情報を手動で取得および管理する必要がある場合を対象としています。短期認証情報と長期認証情報に関する追加情報については、「*AWS SDK およびツールリファレンスガイド*」の「[その他の認証方法](https://docs.aws.amazon.com/sdkref/latest/guide/access-users.html)」を参照してください。  
セキュリティのベストプラクティスについては、 AWS IAM アイデンティティセンター「」の説明に従って を使用します[SDK 認証の設定](creds-idc.md)。

## 一般的な情報
<a name="sdk-store-general-info"></a>

SDK ストアには次の利点があります。
+ SDK ストア内の認証情報が暗号化された状態で、ユーザーのホームディレクトリに SDK ストアが配置されます。これにより、認証情報が誤って公開されるリスクが制限されます。
+ SDK ストアは、[AWS Tools for Windows PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/) および [AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/AWSToolkitVS/latest/UserGuide/) にも認証情報を提供します。

SDK ストアのプロファイルは、特定のホスト上の特定ユーザーに固有です。これらは他のホストや他のユーザーにコピーすることはできません。そのため、開発用マシンの SDK ストアにあるプロファイルを、他のホストや他のデベロッパーのマシンで再利用することはできません。また、本番稼働用のアプリケーションで SDK ストアのプロファイルを使用できないということでもあります。

SDK ストアのプロファイルは、以下に示すいくつかの方法で管理できます。
+ [AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/credentials.html) のグラフィカルユーザーインターフェイス (GUI) を使用します。
+ このトピックで後述するように、 AWS SDK for .NET API の [Amazon.Runtime.CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/NRuntimeCredentialManagement.html) 名前空間を使用します。
+ [AWS Tools for Windows PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/specifying-your-aws-credentials.html) のコマンドを使用します (例えば `Set-AWSCredential` および `Remove-AWSCredentialProfile`)。

## プロファイル管理の例
<a name="sdk-store-examples"></a>

以下の例では、プログラムで SDK ストア内にプロファイルを作成して更新する方法を示します。

### プログラムでのプロファイルの作成
<a name="sdk-store-create-programmatically"></a>

この例では、プログラムを使用してプロファイルを作成し、SDK ストアに保存する方法を説明します。[Amazon.Runtime.CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/NRuntimeCredentialManagement.html) 名前空間の次のクラスを使用します: [CredentialProfileOptions](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TCredentialProfileOptions.html)、[CredentialProfile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TCredentialProfile.html)、[NetSDKCredentialsFile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TNetSDKCredentialsFile.html)。

```
using Amazon.Runtime.CredentialManagement;
...

// Do not include credentials in your code.
WriteProfile("my_new_profile", SecurelyStoredKeyID, SecurelyStoredSecretAccessKey);
...

void WriteProfile(string profileName, string keyId, string secret)
{
    Console.WriteLine($"Create the [{profileName}] profile...");
    var options = new CredentialProfileOptions
    {
        AccessKey = keyId,
        SecretKey = secret
    };
    var profile = new CredentialProfile(profileName, options);
    var netSdkStore = new NetSDKCredentialsFile();
    netSdkStore.RegisterProfile(profile);
}
```

**警告**  
このようなコードは、通常、アプリケーションに含めるべきではありません。アプリケーションに含まれる場合は、プレーンテキストキーがコード内、ネットワーク経由、またはコンピュータのメモリ内で見えないように適切な予防措置を講じてください。

この例で作成されたプロファイルを以下に示します。

```
"[generated GUID]" : {
    "AWSAccessKey" : "01000000D08...[etc., encrypted access key ID]",
    "AWSSecretKey" : "01000000D08...[etc., encrypted secret access key]",
    "ProfileType"  : "AWS",
    "DisplayName"  : "my_new_profile",
}
```

### 既存のプロファイルのプログラムでの更新
<a name="sdk-store-update-programmatically"></a>

この例では、前の手順で作成したプロファイルをプログラムで更新する方法を示します。[Amazon.Runtime.CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/NRuntimeCredentialManagement.html) 名前空間の次のクラスを使用します: [CredentialProfile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TCredentialProfile.html)、[NetSDKCredentialsFile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TNetSDKCredentialsFile.html)。また、[Amazon](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/N.html) 名前空間の [RegionEndpoint](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TRegionEndpoint.html) クラスも使用します。

```
using Amazon.Runtime.CredentialManagement;
...

AddRegion("my_new_profile", RegionEndpoint.USWest2);
...

void AddRegion(string profileName, RegionEndpoint region)
{
    var netSdkStore = new NetSDKCredentialsFile();
    CredentialProfile profile;
    if (netSdkStore.TryGetProfile(profileName, out profile))
    {
        profile.Region = region;
        netSdkStore.RegisterProfile(profile);
    }
}
```

更新されたプロファイルを以下に示します。

```
"[generated GUID]" : {
    "AWSAccessKey" : "01000000D08...[etc., encrypted access key ID]",
    "AWSSecretKey" : "01000000D08...[etc., encrypted secret access key]",
    "ProfileType"  : "AWS",
    "DisplayName"  : "my_new_profile",
    "Region"       : "us-west-2"
}
```

**注記**  
 AWS リージョンは、他の場所や他の方法を使用して設定することもできます。詳細については、「[AWS リージョンを設定する](net-dg-region-selection.md)」を参照してください。