

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

# SDK を設定
<a name="configure-gosdk"></a>

 AWS SDK for Go V2 では、ロガー、ログレベル、再試行設定など、サービスクライアントの一般的な設定を行うことができます。ほとんどの設定はオプションです。ただし、サービスクライアントごとに、 AWS リージョンと認証情報を指定する必要があります。SDK はこれらの値を使用して、正しいリージョンにリクエストを送信し、正しい認証情報でリクエストに署名します。これらの値は、コード内でプログラムで指定することも、実行環境から取得することもできます。

## AWS 共有設定ファイルのロード
<a name="loading-aws-shared-configuration"></a>

 サービス API クライアントを初期化する方法はいくつかありますが、次に示すのはユーザーに推奨される最も一般的なパターンです。

 AWS 共有設定ファイルを使用するように SDK を設定するには、次のコードを使用します。

```
import (
  "context"
  "log"
  "github.com/aws/aws-sdk-go-v2/config"
)

// ...

cfg, err := config.LoadDefaultConfig(context.TODO())
if err != nil {
  log.Fatalf("failed to load configuration, %v", err)
}
```

 `config.LoadDefaultConfig(context.TODO())` は、 AWS 共有設定ソースを使用して [aws.Config](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws#Config) を構築します。これには、認証情報プロバイダーの設定、 AWS リージョンの設定、サービス固有の設定のロードが含まれます。ロードされた `aws.Config` を使用してサービスクライアントを作成することで、クライアントの作成方法に一貫性を持たせることができます。

 AWS 共有設定ファイルの詳細については、「SDK およびツールリファレンスガイド」の[「設定](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html)」を参照してください。 AWS SDKs 

## AWS リージョンの指定
<a name="specifying-the-aws-region"></a>

 リージョンを指定するときは、`us-west-2` や `us-east-2` など、リクエストの送信先を指定します。各サービスのリージョンのリストについては、「 Amazon Web Services 全般のリファレンス」の「[サービスエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)」を参照してください。

 SDK にはデフォルトのリージョンはありません。リージョンを指定するには: 
+  `AWS_REGION` 環境変数を設定して、デフォルトのリージョンを指定します。
+  設定のロード時に `config.LoadDefaultConfig` に [config.WithRegion](https://github.com/aws/aws-sdk-go-v2/blob/config/v0.2.2/config/provider.go#L127) を引数として渡して、明示的にリージョンを設定します。

 注: これらすべての方法でリージョンを設定した場合、SDK は明示的に指定したリージョンを使用します。

### 環境変数を使用してリージョンを設定する
<a name="configure-region-with-environment-variable"></a>

#### Linux、macOS、または Unix
<a name="linux-macos-or-unix"></a>

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

#### Server
<a name="windows"></a>

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

### リージョンをプログラムで指定する
<a name="specify-region-programmatically"></a>

```
cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion("us-west-2"))
```

## 認証情報の指定
<a name="specifying-credentials"></a>

 には、リクエストに署名するための認証情報 (アクセスキーとシークレットアクセスキー) AWS SDK for Go が必要です AWS。特定のユースケースに応じて、認証情報をいくつかの場所で指定できます。認証情報の取得については、「[AWS SDK for Go の開始方法](getting-started.md)」を参照してください。

 を使用して`aws.Config`インスタンスを初期化すると`config.LoadDefaultConfig`、SDK はデフォルトの認証情報チェーンを使用して AWS 認証情報を検索します。このデフォルトの認証情報チェーンは、次の順序で認証情報を検索します。

1.  環境変数。

   1.  静的な認証情報 (`AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY`、`AWS_SESSION_TOKEN`) 

   1.  ウェブ ID トークン (`AWS_WEB_IDENTITY_TOKEN_FILE`) 

1.  共有設定ファイル。

   1.  SDK は、ユーザーのコンピュータのホームフォルダ内にある `.aws` フォルダ下の `credentials` ファイルを共有設定ファイルのデフォルトとして使用します。

   1.  SDK は、ユーザーのコンピュータのホームフォルダ内にある `.aws` フォルダ下の `config` ファイルを共有設定ファイルのデフォルトとして使用します。

1.  アプリケーションが Amazon ECS タスク定義または RunTask API オペレーションを使用している場合は、タスクの IAM ロール。

1.  アプリケーションが Amazon EC2 インスタンスで動作している場合は、Amazon EC2 の IAM ロール。

 SDK は、これらの組み込みプロバイダーを自動的に検出して使用するため、手動での設定は不要です。例えば、Amazon EC2 インスタンスの IAM ロールを使用している場合、アプリケーションは自動的にそのインスタンスの認証情報を使用します。アプリケーション側で認証情報を手動で設定する必要はありません。

 ベストプラクティスとして、 では、次の順序で認証情報を指定 AWS することをお勧めします。

1.  アプリケーションが Amazon ECS のタスク定義または RunTask API オペレーションを使用している場合は、タスクの IAM ロールを使用します。

1.  アプリケーションが Amazon EC2 インスタンスで動作している場合は、Amazon EC2 の IAM ロールを使用します。

    IAM ロールは、 AWS 呼び出しを行うための一時的なセキュリティ認証情報をインスタンスでアプリケーションに提供します。また IAM ロールは、複数の Amazon EC2 インスタンスに認証情報を分散して管理するための簡単な方法を提供します。

1.  共有認証情報または設定ファイルを使用します。

    これらの認証情報と設定ファイルは、他の AWS SDK や AWS CLIと共有されます。セキュリティのベストプラクティスとして、アクセスキー ID やシークレットキーなどの機密情報は認証情報ファイルで設定することをお勧めします。これらの各ファイルの[フォーマット要件](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)は次のとおりです。

1.  環境変数を使用します。

    Amazon EC2 インスタンス以外のマシンで開発作業を行う場合は、環境変数を設定すると便利です。

### タスク用の IAM ロール
<a name="iam-roles-for-tasks"></a>

 アプリケーションが Amazon ECS タスク定義または `RunTask` オペレーションを使用している場合は、[タスクの IAM ロール](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)を使用して、タスクのコンテナで使用できる IAM ロールを指定します。

### Amazon EC2 インスタンスの IAM ロール
<a name="iam-roles-for-ec2-instances"></a>

 Amazon EC2 インスタンスでアプリケーションを実行している場合は、そのインスタンスの [IAM ロール](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)を利用して、 AWSへの呼び出しに使用する一時的なセキュリティ認証情報を取得します。

 IAM ロールを使用するようにインスタンスを設定している場合、SDK はその認証情報を自動的に使用してアプリケーションを認証します。これらの認証情報を手動で指定する必要はありません。

### 共有認証情報と設定
<a name="shared-credentials-and-configuration"></a>

 共有認証情報と設定ファイルは、 AWS SDKs やその他のツール間で共通の設定を共有するために使用できます。ツールやアプリケーションごとに異なる認証情報を使用している場合は、*プロファイル*を使用して複数のアクセスキーを同じ設定ファイル内に設定できます。

 `config.LoadOptions` を使用して複数の認証情報ファイルや設定ファイルの場所を指定できますが、SDK はデフォルトで、「[認証情報の指定](#specifying-credentials)」に記載されている既定の場所に保存されたファイルをロードします。

```
import (
    "context"
    "github.com/aws/aws-sdk-go-v2/config"    
)

// ...

cfg , err := config.LoadDefaultConfig(context.TODO(), 
    config.WithSharedCredentialsFiles(
    []string{"test/credentials", "data/credentials"},
    ), 
    config.WithSharedConfigFiles(
        []string{"test/config", "data/config"},
    )   
)
```

 共有認証情報ファイルと設定ファイルを使用する場合、同じプロファイルが複数定義されていると、それらはマージされてプロファイルが解決されます。マージの競合が発生した場合: 

1.  同じ認証情報/設定ファイル内でプロファイルが重複している場合は、後に記述されたプロファイルのプロパティが優先されます。

1.  複数の認証情報ファイルまたは複数の設定ファイル間でプロファイルが重複している場合は、`config.LoadOptions` に渡されたファイルの順序に基づいて、後のファイルのプロパティが優先されます。後のファイルのプロパティが優先されます。

1.  認証情報ファイルと設定ファイルの両方に同じプロファイルが存在する場合は、認証情報ファイルのプロパティが優先されます。

 必要に応じて、`config.LoadOptions` で `LogConfigurationWarnings` を有効にして、プロファイル解決の手順をログに記録することもできます。

#### 認証情報ファイルの作成
<a name="creating-the-credentials-file"></a>

 共有認証情報ファイル (`.aws/credentials`) がない場合は、任意のテキストエディタを使用してホームディレクトリ内に作成できます。認証情報ファイルに次の内容を追加し、{{<YOUR\_ACCESS\_KEY\_ID>}} と {{<YOUR\_SECRET\_ACCESS\_KEY>}} を実際の認証情報に置き換えます。

```
[default]
aws_access_key_id = {{<YOUR_ACCESS_KEY_ID>}}
aws_secret_access_key = {{<YOUR_SECRET_ACCESS_KEY>}}
```

 `[default]` 見出しは、デフォルトプロファイルの認証情報を定義します。別のプロファイルを使用するように設定していない限り、SDK はこのデフォルトプロファイルを使用します。

 次の例のように、セッショントークンをプロファイルに追加することで、一時的なセキュリティ認証情報を使用することもできます。

```
[temp]
aws_access_key_id = {{<YOUR_TEMP_ACCESS_KEY_ID>}}
aws_secret_access_key = {{<YOUR_TEMP_SECRET_ACCESS_KEY>}}
aws_session_token = {{<YOUR_SESSION_TOKEN>}}
```

 認証情報ファイル内のデフォルト以外のプロファイルのセクション名は、`profile` という単語で始めることはできません。詳細については、「[AWS SDK とツールのリファレンスガイド](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html#file-format-creds)」を参照してください。

#### 設定ファイルの作成
<a name="creating-the-config-file"></a>

 共有認証情報ファイル (`.aws/config`) がない場合は、任意のテキストエディタを使用してホームディレクトリ内に作成できます。次の内容を設定ファイルに追加し、{{<REGION>}} を必要なリージョンに置き換えます。

```
[default]
region = {{<REGION>}}
```

 `[default]` 見出しは、デフォルトプロファイルの設定を定義します。別のプロファイルを使用するように設定していない限り、SDK はこのデフォルトプロファイルを使用します。

 次の例のように、名前付きプロファイルを使用することもできます。

```
[profile named-profile]
region = {{<REGION>}}
```

 設定ファイル内のデフォルト以外のプロファイルのセクション名は、必ず `profile` という単語で始まり、その後に目的のプロファイル名が続く必要があります。詳細については、「[AWS SDK とツールのリファレンスガイド](https://docs.aws.amazon.com/credref/latest/refdocs/file-format.html#file-format-config)」を参照してください。

#### プロファイルの指定
<a name="specifying-profiles"></a>

 アクセスキーの各セットをプロファイルに関連付けることで、同じ設定ファイルに複数のアクセスキーを含めることができます。例えば、認証情報ファイルでは、次のように複数のプロファイルを宣言できます。

```
[default]
aws_access_key_id = <YOUR_DEFAULT_ACCESS_KEY_ID>
aws_secret_access_key = <YOUR_DEFAULT_SECRET_ACCESS_KEY>

[test-account]
aws_access_key_id = <YOUR_TEST_ACCESS_KEY_ID>
aws_secret_access_key = <YOUR_TEST_SECRET_ACCESS_KEY>

[prod-account]
; work profile
aws_access_key_id = <YOUR_PROD_ACCESS_KEY_ID>
aws_secret_access_key = <YOUR_PROD_SECRET_ACCESS_KEY>
```

 デフォルトでは、SDK は `AWS_PROFILE` 環境変数を確認して、使用するプロファイルを決定します。`AWS_PROFILE` 変数が設定されていない場合、SDK は `default`プロファイルを使用します。

 アプリケーションで別のプロファイルを使用する場合もあります。例えば、`test-account` アプリケーションで `myapp` 認証情報を使用する場合です。このようなプロファイルを使用するには、次のコマンドを実行します。

```
$ AWS_PROFILE=test-account myapp
```

 また、SDK がプロファイルを選択するようにするには、`config.LoadDefaultConfig` を呼び出す前に `os.Setenv("AWS_PROFILE", "test-account")` を呼び出すか、次の例のように明示的にプロファイルを引数として渡します。

```
cfg, err := config.LoadDefaultConfig(context.TODO(), 
    config.WithSharedConfigProfile("test-account"))
```

**注記**  
環境変数で認証情報を指定している場合は、どのプロファイルを指定していても、SDK は常にその環境変数の認証情報を使用します。

### 環境可変
<a name="environment-variables"></a>

 デフォルトでは、SDK は環境で設定された AWS 認証情報を検出し、それらを使用してリクエストに署名します AWS。この方法では、アプリケーションで認証情報を管理する必要はありません。

 SDK は次の環境変数から認証情報を検索します。
+  `AWS_ACCESS_KEY_ID` 
+  `AWS_SECRET_ACCESS_KEY` 
+  `AWS_SESSION_TOKEN` (オプション) 

 次の例では、環境変数の設定方法を示しています。

#### Linux、OS X、Unix
<a name="linux-os-x-or-unix"></a>

```
$ export AWS_ACCESS_KEY_ID=YOUR_AKID
$ export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY
$ export AWS_SESSION_TOKEN=TOKEN
```

#### Server
<a name="windows-1"></a>

```
> set AWS_ACCESS_KEY_ID=YOUR_AKID
> set AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY
> set AWS_SESSION_TOKEN=TOKEN
```

### 認証情報をプログラムで指定する
<a name="specify-credentials-programmatically"></a>

 `config.LoadDefaultConfig` では、共有設定ソースをロードするときに、明示的な [aws.CredentialProvider](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws#CredentialsProvider) を指定できます。共有設定をロードするときに明示的な認証情報プロバイダーを渡すには、[config.WithCredentialsProvider](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/config#WithCredentialsProvider) を使用します。例えば、`customProvider` が `aws.CredentialProvider` 実装のインスタンスを参照している場合、次のように設定のロード時に渡すことができます。

```
cfg, err := config.LoadDefaultConfig(context.TODO(), 
    config.WithCredentialsProvider(customProvider))
```

 この例のように、明示的に認証情報を指定した場合、SDK はその認証情報のみを使用します。

**注記**  
`LoadDefaultConfig` との間で受け渡しされるすべての認証情報プロバイダーは [CredentialsCache](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws#CredentialsCache) に自動的にラップされます。これにより、スレッドセーフなキャッシュと認証情報のローテーションが可能になります。`aws.Config` でプロバイダーを直接明示的に設定する場合は、[NewCredentialsCache](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws#NewCredentialsCache) を使用してそのプロバイダーをこの型で明示的にラップする必要があります。

#### 静的な認証情報
<a name="static-credentials"></a>

 [credentials.NewStaticCredentialsProvider](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/credentials#NewStaticCredentialsProvider) 認証プロバイダーを利用して、使用するアクセスキーを明示的に設定することで、アプリケーションに認証情報をハードコードすることもできます。例えば、次のようになります。

```
cfg, err := config.LoadDefaultConfig(context.TODO(), 
    config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider("AKID", "SECRET_KEY", "TOKEN")),
)
```

**警告**  
 ただし、アプリケーション内に認証情報を埋め込まないでください。この方法はテスト目的にのみ使用してください。

#### シングルサインオン認証情報
<a name="single-sign-on-credentials"></a>

 SDK は、 を使用して一時的な認証情報を取得するための AWS 認証情報プロバイダーを提供します AWS IAM アイデンティティセンター。を使用して AWS CLI、 AWS アクセスポータルで認証し、一時的な AWS 認証情報へのアクセスを許可します。次に、シングルサインオン (SSO) プロファイルをロードするようにアプリケーションを設定します。SDK は SSO 認証情報を使用して一時的な AWS 認証情報を取得し、有効期限が切れると自動的に更新されます。SSO 認証情報の有効期限が切れた場合は、 を使用して IAM Identity Center アカウントに再度ログインして、明示的に更新する必要があります AWS CLI。

 たとえば、プロファイルを作成し、 `dev-profile`を使用してそのプロファイルを認証および認可し AWS CLI、以下に示すようにアプリケーションを設定できます。

1.  まず、`profile` と `sso-session` を作成します。

```
[profile dev-profile]
sso_session = dev-session
sso_account_id = 012345678901
sso_role_name = Developer
region = us-east-1

[sso-session dev-session]
sso_region = us-west-2
sso_start_url = https://company-sso-portal.awsapps.com/start
sso_registration_scopes = sso:account:access
```

1.  を使用してログイン AWS CLI し、SSO プロファイルを認証および認可します。

```
$ aws --profile dev-profile sso login 
Attempting to automatically open the SSO authorization page in your default browser.
If the browser does not open or you wish to use a different device to authorize this request, open the following URL:

https://device.sso.us-west-2.amazonaws.com/

Then enter the code:

ABCD-EFGH
Successully logged into Start URL: https://company-sso-portal.awsapps.com/start
```

1.  その後、SSO プロファイルを使用するようにアプリケーションを設定します。

```
import "github.com/aws/aws-sdk-go-v2/config"

// ...

cfg, err := config.LoadDefaultConfig(
    context.Background(),
    config.WithSharedConfigProfile("dev-profile"),
)
if err != nil {
    return err
}
```

 SSO プロファイルの設定と を使用した認証の詳細については、 ユーザーガイドの「 [を使用する AWS CLI ように AWS IAM アイデンティティセンター](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html)を設定する AWS CLI 」を参照してください。 AWS CLI SSO 認証情報プロバイダーをプログラムで作成する方法の詳細については、「[ssocreds](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/credentials/ssocreds) API リファレンスドキュメント」を参照してください。

#### ログイン認証情報
<a name="login-credentials"></a>

既存の AWS マネジメントコンソールのサインイン認証情報を使用して、 AWS サービスにプログラムでアクセスできます。ブラウザベースの認証フローの後、 は CLI AWS Tools for PowerShell や AWS SDKs AWS などのローカル開発ツールで動作する一時的な認証情報 AWS を生成します。この機能は、特に長期的なアクセスキーの管理よりもインタラクティブな認証を希望する場合に、CLI AWS 認証情報の設定と管理のプロセスを簡素化します。

1.  AWS CLI を使用してログインフローを開始し、ブラウザのプロンプトに従います。この例では、ログインセッションを新しいプロファイル に保存しますが**dev-profile**、これはオプションです。

   ```
   $ aws --profile dev-profile login
   ```

1. (オプション) AWS 共有設定ファイルを調べて、セッションが確立されたことを確認します。

   ```
   [profile dev-profile]
   login_session = arn:aws:sts::{{account id>}}:{{role}}
   ```

1. 次に、ログインプロファイルを使用するようにアプリケーションを設定します。

   ```
   import "github.com/aws/aws-sdk-go-v2/config"
   
   // ...
   
   cfg, err := config.LoadDefaultConfig(
       context.Background(),
       // only necessary if login session is saved to a non-default profile
       config.WithSharedConfigProfile("dev-profile"),
   )
   if err != nil {
       return err
   }
   ```

ログインプロファイルの設定と CLI AWS を使用した認証の詳細については、[「コンソール認証情報を使用した AWS ローカル開発のログイン](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sign-in.html)」を参照してください。

#### その他の認証情報プロバイダー
<a name="other-credentials-providers"></a>

 SDK には、[credentials](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/credentials) モジュール内で他にもさまざまな認証情報取得方法が提供されています。たとえば、 から一時的なセキュリティ認証情報を取得 AWS Security Token Service したり、暗号化されたストレージから認証情報を取得したりできます。

 **使用可能な認証情報プロバイダー**: 
+  [ec2rolecreds](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds) – Amazon EC2 IMDS 経由で、Amazon EC2 インスタンスロールから認証情報を取得します。
+  [endpointcreds](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds) – 任意の HTTP エンドポイントから認証情報を取得します。
+  [processcreds](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/credentials/processcreds) – ホスト環境のシェルで実行される外部プロセスから認証情報を取得します。
+  [stscreds](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/credentials/stscreds) – から認証情報を取得する AWS STS 