

# DynamoDB でのテーブルとデータの操作
<a name="WorkingWithTables"></a>

このセクションでは、AWS Command Line Interface (AWS CLI) および AWS SDK を使用して Amazon DynamoDB でテーブルを作成、更新、削除する方法を説明します。

**注記**  
このタスクは AWS マネジメントコンソール を使用して実行することもできます。詳細については、「[コンソールを使用する](AccessingDynamoDB.md#ConsoleDynamoDB)」を参照してください。

このセクションでは、DynamoDB Auto Scaling や手動設定のプロビジョンされたスループットを使用し、スループット容量の詳細についても示します。

**Topics**
+ [DynamoDB テーブルの基本的なオペレーション](WorkingWithTables.Basics.md)
+ [DynamoDB でテーブルクラスを選択する場合の考慮事項](WorkingWithTables.tableclasses.md)
+ [DynamoDB でのリソースへのタグとラベルの追加](Tagging.md)

# DynamoDB テーブルの基本的なオペレーション
<a name="WorkingWithTables.Basics"></a>

他のデータベース管理システムと同様、Amazon DynamoDB はデータをテーブルに保存します。いくつかの基本的なオペレーションでテーブルを管理できます。

**Topics**
+ [テーブルの作成](#WorkingWithTables.Basics.CreateTable)
+ [表の説明](#WorkingWithTables.Basics.DescribeTable)
+ [テーブルの更新](#WorkingWithTables.Basics.UpdateTable)
+ [テーブルの削除](#WorkingWithTables.Basics.DeleteTable)
+ [削除保護の使用](#WorkingWithTables.Basics.DeletionProtection)
+ [テーブル名のリスト化](#WorkingWithTables.Basics.ListTables)
+ [プロビジョニングされたスループットクォータの説明](#WorkingWithTables.Basics.DescribeLimits)

## テーブルの作成
<a name="WorkingWithTables.Basics.CreateTable"></a>

`CreateTable` オペレーションを使用して、Amazon DynamoDB でテーブルを作成します。テーブルを作成するために、以下の情報を指定する必要があります。
+ **[テーブル名]** - 。名前は DynamoDB 命名規則に従う必要があります。また、現在の AWS アカウントとリージョンで一意である必要があります。たとえば、米国東部 (バージニア北部) に `People` テーブルを作成し、欧州 (アイルランド) に別の `People` テーブルを作成できます。ただし、これらの 2 つのテーブルは互いにまったく異なっています。詳細については、「[Amazon DynamoDB でサポートされるデータ型と命名規則](HowItWorks.NamingRulesDataTypes.md)」を参照してください。
+ **プライマリキー。**プライマリキーは 1 つの属性 (パーティションキー) または 2 つの属性で構成できます (パーティションキーとソートキー)。属性名、データタイプ、各属性のロール（パーティションキーでは `HASH`、ソートキーでは `RANGE`）を指定する必要があります。詳細については、「[プライマリキー](HowItWorks.CoreComponents.md#HowItWorks.CoreComponents.PrimaryKey)」を参照してください。
+ **スループット設定 (プロビジョニングされたテーブルの場合)。**プロビジョニングモードを使用している場合、最初の読み取りと書き込みのスループット設定をテーブルに指定する必要があります。これらの設定は後から変更できます。また、DynamoDB Auto Scaling を有効化して設定を管理することもできます。詳細については、「[DynamoDB プロビジョンドキャパシティモード](provisioned-capacity-mode.md)」および「[DynamoDB Auto Scaling によるスループットキャパシティの自動管理](AutoScaling.md)」を参照してください。

### 例 1: オンデマンドテーブルを作成する
<a name="create-payperrequest-example"></a>

オンデマンドモードを使用して同じテーブル `Music` を作成するには

```
aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --billing-mode=PAY_PER_REQUEST
```

`CreateTable` オペレーションは、以下のようにテーブルにメタデータを返します。

```
{
    "TableDescription": {
        "TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/Music",
        "AttributeDefinitions": [
            {
                "AttributeName": "Artist",
                "AttributeType": "S"
            },
            {
                "AttributeName": "SongTitle",
                "AttributeType": "S"
            }
        ],
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "WriteCapacityUnits": 0,
            "ReadCapacityUnits": 0
        },
        "TableSizeBytes": 0,
        "TableName": "Music",
        "BillingModeSummary": {
            "BillingMode": "PAY_PER_REQUEST"
        },
        "TableStatus": "CREATING",
        "TableId": "12345678-0123-4567-a123-abcdefghijkl",
        "KeySchema": [
            {
                "KeyType": "HASH",
                "AttributeName": "Artist"
            },
            {
                "KeyType": "RANGE",
                "AttributeName": "SongTitle"
            }
        ],
        "ItemCount": 0,
        "CreationDateTime": 1542397468.348
    }
}
```

**重要**  
 オンデマンドテーブルで `DescribeTable` を呼び出すと、読み込みキャパシティユニットと書き込みキャパシティユニットが 0 に設定されます。

### 例 2: プロビジョン済みテーブルを作成する
<a name="create-provisioned-example"></a>

以下の AWS CLI サンプルは、テーブル (`Music`) の作成方法を示しています。プライマリキーは、`Artist` (パーティションキー) と `SongTitle` (ソートキー) で構成されており、データ型はそれぞれ `String` です。このテーブルの最大スループットは、読み取りキャパシティーユニット数が 10、書き込みキャパシティーユニット数が 5 です。

```
aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5
```

`CreateTable` オペレーションは、以下のようにテーブルにメタデータを返します。

```
{
    "TableDescription": {
        "TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/Music",
        "AttributeDefinitions": [
            {
                "AttributeName": "Artist",
                "AttributeType": "S"
            },
            {
                "AttributeName": "SongTitle",
                "AttributeType": "S"
            }
        ],
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "WriteCapacityUnits": 5,
            "ReadCapacityUnits": 10
        },
        "TableSizeBytes": 0,
        "TableName": "Music",
        "TableStatus": "CREATING",
        "TableId": "12345678-0123-4567-a123-abcdefghijkl",
        "KeySchema": [
            {
                "KeyType": "HASH",
                "AttributeName": "Artist"
            },
            {
                "KeyType": "RANGE",
                "AttributeName": "SongTitle"
            }
        ],
        "ItemCount": 0,
        "CreationDateTime": 1542397215.37
    }
}
```

`TableStatus` エレメントは、テーブルの現在の状態を示します（`CREATING`）。`ReadCapacityUnits` および `WriteCapacityUnits` に指定した値によって、テーブルの作成にはしばらく時間がかかる場合があります。これらの値を大きくすると、DynamoDB はより多くのリソースをテーブルに割り当てなければならなくなります。

### 例 3: DynamoDB Standard-Infrequent Access テーブルクラスを使用してテーブルを作成する
<a name="create-infrequent-access-example"></a>

DynamoDB Standard-Infrequent Access テーブルクラスを使用して同じ `Music` テーブルを作成するには

```
aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5 \
    --table-class STANDARD_INFREQUENT_ACCESS
```

`CreateTable` オペレーションは、以下のようにテーブルにメタデータを返します。

```
{
    "TableDescription": {
        "TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/Music",
        "AttributeDefinitions": [
            {
                "AttributeName": "Artist",
                "AttributeType": "S"
            },
            {
                "AttributeName": "SongTitle",
                "AttributeType": "S"
            }
        ],
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "WriteCapacityUnits": 5,
            "ReadCapacityUnits": 10
        },
        "TableClassSummary": {
            "LastUpdateDateTime": 1542397215.37,
            "TableClass": "STANDARD_INFREQUENT_ACCESS"
        },
        "TableSizeBytes": 0,
        "TableName": "Music",
        "TableStatus": "CREATING",
        "TableId": "12345678-0123-4567-a123-abcdefghijkl",
        "KeySchema": [
            {
                "KeyType": "HASH",
                "AttributeName": "Artist"
            },
            {
                "KeyType": "RANGE",
                "AttributeName": "SongTitle"
            }
        ],
        "ItemCount": 0,
        "CreationDateTime": 1542397215.37
    }
}
```

## 表の説明
<a name="WorkingWithTables.Basics.DescribeTable"></a>

テーブルの詳細を表示するには、`DescribeTable` オペレーションを使用します。テーブル名を入力する必要があります。`DescribeTable` の出力は `CreateTable` の出力と同じ形式です。このメタデータには、テーブル作成時のタイムスタンプ、キースキーマ、プロビジョンドスループット設定、推定サイズ、既存のすべてのセカンダリインデックスが含まれています。

**重要**  
 オンデマンドテーブルで `DescribeTable` を呼び出すと、読み込みキャパシティーユニットと書き込みキャパシティーユニットが 0 に設定されます。

**Example**  

```
aws dynamodb describe-table --table-name Music
```

`TableStatus` が `CREATING` から `ACTIVE` に変わると、テーブルは使用できる状態になります。

**注記**  
`DescribeTable` のリクエスト直後に `CreateTable` リクエストを発行した場合、DynamoDB によってエラー (`ResourceNotFoundException`) が返されることがあります。`DescribeTable` で結果整合性のあるクエリが使用されており、テーブルのメタデータがその時点で使用できない可能性があるためです。数秒間待ってから、再び `DescribeTable` リクエストを試してみてください。  
請求目的上、DynamoDB ストレージコストには、100 バイトの項目あたりのオーバーヘッドが含まれます。(詳細は、[DynamoDB 料金表](https://aws.amazon.com/dynamodb/pricing/)を参照してください。) 各項目の余分な 100 バイトは、容量単位の計算または `DescribeTable` オペレーションでは使用されません。

## テーブルの更新
<a name="WorkingWithTables.Basics.UpdateTable"></a>

`UpdateTable` オペレーションを使用すると、以下のいずれかを実行できます。
+ テーブルのプロビジョニングされたスループット設定を変更します (プロビジョニングモードのテーブルの場合)。
+ テーブルの読み取り/書き込みキャパシティーモードを変更します。
+ テーブルでグローバルセカンダリインデックスを操作します (「[DynamoDB のグローバルセカンダリインデックスの使用](GSI.md)」を参照)。
+ テーブルの DynamoDB Streams を有効または無効にできます ([DynamoDB Streams の変更データキャプチャ](Streams.md) を参照)。

**Example**  
次の AWS CLI の例では、テーブルのプロビジョニングされたスループット設定を変更する方法を示します。  

```
aws dynamodb update-table --table-name Music \
    --provisioned-throughput ReadCapacityUnits=20,WriteCapacityUnits=10
```

**注記**  
`UpdateTable` リクエストを発行すると、テーブルのステータスが `AVAILABLE` から `UPDATING` に変わります。テーブルは `UPDATING` 中も全面的に利用できます。この処理が完了すると、テーブルのステータスが `UPDATING` から `AVAILABLE` に変わります。

**Example**  
次の AWS CLI の例では、テーブルの読み取り/書き込みキャパシティーモードをオンデマンドモードに変更する方法を示します。  

```
aws dynamodb update-table --table-name Music \
    --billing-mode PAY_PER_REQUEST
```

## テーブルの削除
<a name="WorkingWithTables.Basics.DeleteTable"></a>

`DeleteTable` オペレーションで未使用のテーブルを削除できます。テーブルの削除は回復不可能な操作です。AWS マネジメントコンソール を使用してテーブルを削除するには、「[ステップ 6: (オプション) DynamoDB テーブルを削除してリソースをクリーンアップする](getting-started-step-6.md)」を参照してください。

**Example**  
次の AWS CLI の例で、テーブルを削除する方法について説明します。  

```
aws dynamodb delete-table --table-name Music
```

`DeleteTable` リクエストを発行すると、テーブルのステータスが `ACTIVE` から `DELETING` に変わります。使用しているリソース（テーブルに保存されたデータ、ストリーム、テーブルのインデックスなど）によって、テーブルの削除には時間がかかる場合があります。

`DeleteTable` オペレーションが完了すると、テーブルは DynamoDB に存在しなくなります。

## 削除保護の使用
<a name="WorkingWithTables.Basics.DeletionProtection"></a>

削除保護プロパティを使用すると、テーブルを誤って削除しないように保護できます。テーブルに対してこのプロパティを有効にすると、管理者が通常のテーブル管理オペレーションを行うときにテーブルが誤って削除されるのを防ぐことができます。これにより、通常業務が中断されるのを防ぐことができます。

 テーブル所有者または権限のある管理者が、各テーブルの削除保護プロパティを制御します。すべてのテーブルで削除保護プロパティは、デフォルトでオフに設定されています。これには、グローバルレプリカやバックアップから復元されたテーブルが含まれます。テーブルの削除保護が無効になっている場合、Identity and Access Management (IAM) ポリシーによって承認されたすべてのユーザーがそのテーブルを削除できます。テーブルの削除保護が有効になっているときは、誰も削除できません。

この設定を変更するには、表の**[Additional settings]** (追加設定) に移動し、**[Deletion Protection]** (削除保護)パネルに移動して、**[Enable delete protection]** (削除保護を有効にする) を選択します。

削除保護プロパティは、DynamoDB コンソール、API、CLI/SDK、および CloudFormation でサポートされています。`CreateTable` API は、テーブル作成時の削除保護プロパティをサポートしており、`UpdateTable` API は既存のテーブルに対する削除保護プロパティの変更をサポートしています。

**注記**  
AWS アカウントを削除しても、テーブルを含むそのアカウントのすべてのデータは 90 日以内に削除されます。
DynamoDB は、テーブルを暗号化したカスタマーマネージドキーにアクセスできない場合、テーブルをアーカイブします。アーカイブには、テーブルのバックアップの作成と元のテーブルの削除が含まれます。

## テーブル名のリスト化
<a name="WorkingWithTables.Basics.ListTables"></a>

`ListTables` オペレーションは、現在の AWS アカウントやリージョンの DynamoDB テーブルの名前を返します。

**Example**  
次の AWS CLI の例は、DynamoDB テーブル名をリストする方法を示しています。  

```
aws dynamodb list-tables
```

## プロビジョニングされたスループットクォータの説明
<a name="WorkingWithTables.Basics.DescribeLimits"></a>

`DescribeLimits` オペレーションは、現在の AWS アカウントやリージョンの現在の読み取りおよび書き込みキャパシティーのクォータを返します。

**Example**  
次の AWS CLI の例では、現在のプロビジョニングされたスループットクォータを記述する方法を示します。  

```
aws dynamodb describe-limits
```
出力は、現在の AWS アカウントやリージョンの読み取りおよび書き込みキャパシティーユニットの上限クォータを返します。

これらのクォータの詳細およびクォータの引き上げをリクエストする方法については、「[スループットのデフォルトクォータ](ServiceQuotas.md#default-limits-throughput)」を参照してください。

# DynamoDB でテーブルクラスを選択する場合の考慮事項
<a name="WorkingWithTables.tableclasses"></a>

DynamoDB には、コストの最適化に役立つように設計された 2 つのテーブルクラスが用意されています。DynamoDB 標準テーブルクラスがデフォルトで、大半のワークロードで推奨されています。DynamoDB Standard-Infrequent Access (DynamoDB 標準-IA) テーブルクラスは、ストレージが主要なコストとなるテーブル用に最適化されています。例えば、アプリケーションログ、古いソーシャルメディアの投稿、E コマースの注文履歴、過去のゲーム実績など、アクセス頻度の低いデータを格納するテーブルは、標準-IA テーブルクラスの候補として適しています。

すべての DynamoDB テーブルは、テーブルクラスに関連付けられます。テーブルに関連付けられたすべてのセカンダリインデックスは、同じテーブルクラスを使用します。テーブル (デフォルトでは DynamoDB 標準) の作成時にテーブルクラスを設定できます。また、AWS マネジメントコンソール、AWS CLI、または AWS SDK を使用して、既存のテーブルのテーブルクラスを更新できます。DynamoDB は、シングルリージョンテーブル（グローバルテーブルではないテーブル）に対して AWS CloudFormation を使用したテーブルクラスの管理もサポートしています。テーブルクラスごとに、データストレージ、読み取りおよび書き込みリクエストに対して異なる料金が設定されています。テーブルのテーブルクラスを選択する場合、次の点に注意してください。
+ DynamoDB 標準テーブルクラスは、DynamoDB Standard-Infrequent Access (DynamoDB 標準 – IA) よりもスループットコストが低く、スループットが主要なコストであるテーブルで最もコスト効率の高いオプションです。
+ DynamoDB Standard-Infrequent Access (DynamoDB 標準 – IA) テーブルクラスは、DynamoDB 標準よりも低いストレージコストを提供し、ストレージが主要なコストであるテーブルで最もコスト効率の高いオプションです。ストレージが DynamoDB 標準テーブルクラスを使用するテーブルのスループット (読み取りと書き込み) コストの 50% を超える場合、DynamoDB Standard-Infrequent Access (DynamoDB 標準 – IA) テーブルクラスを使用すると、テーブルの総コストを削減できます。
+ DynamoDB 標準 IA テーブルは、DynamoDB 標準テーブルと同じパフォーマンス、耐久性、可用性を提供します。
+ DynamoDB 標準テーブルクラスと DynamoDB 標準 — IA テーブルクラスを入れ替えても、アプリケーションコードを変更する必要はありません。テーブルで使用するテーブルクラスに関係なく、同じ DynamoDB API とサービスエンドポイントを使用します。
+ DynamoDB 標準 IA テーブルは、Auto Scaling、オンデマンドモード、有効期限 (TTL)、オンデマンドバックアップ、ポイントインタイムリカバリ (PITR)、グローバルセカンダリインデックスなど、既存の DynamoDB に備わる機能のすべてと互換性があります。

テーブルにとって最も費用対効果の高いテーブルクラスは、そのテーブルの予想されるストレージとスループットの使用パターンによって異なります。テーブルのストレージとスループットのコストおよび使用状況の履歴は、AWS コストと使用状況レポート、および AWS Cost Explorer から確認できます。この履歴データを使用して、テーブルに対して最も費用対効果の高いテーブルクラスを特定します。AWS コストと使用状況レポート、および AWS Cost Explorer の使用の詳細については、[AWS Billing and Cost Management のドキュメント](https://docs.aws.amazon.com/account-billing/index.html)を参照してください。テーブルクラスの料金の詳細については、[Amazon DynamoDB Pricing (Amazon DynamoDB の料金表)](https://aws.amazon.com/dynamodb/pricing/on-demand/) を参照してください。

**注記**  
テーブルクラスの更新はバックグラウンドで処理されます。テーブルクラスの更新中も、通常どおりテーブルにアクセスできます。テーブルクラスを更新する時間は、テーブルトラフィック、ストレージサイズ、およびその他の関連する変数によって異なります。30 日間の追跡期間では、最大 2 つのテーブルクラスの更新が可能です。

# DynamoDB でのリソースへのタグとラベルの追加
<a name="Tagging"></a>

Amazon DynamoDB リソースにラベルを付けるには、*タグ*を使用します。タグを使用すると、リソースを目的、所有者、環境、その他の条件などさまざまな方法で分類することができます。タグは、以下のことに役立ちます。
+ リソースに割り当てたタグに基づいてリソースをすばやく特定します。
+ タグ別に分類された AWS 請求を表示する。
**注記**  
タグが付けられたテーブルに関連するローカルセカンダリインデックス (LSI) およびグローバルセカンダリインデックス (GSI) は、自動的に同じタグでラベルが付けられます。現在のところ、DynamoDB Streams の使用にタグを付けることはできません。

タグ付けは、Amazon EC2、Amazon S3、DynamoDB などの AWS のサービスでサポートされています。効率的なタグ付けを行うと、特定のタグを持つサービス間でレポートを作成でき、コストインサイトを得ることができます。

タグ付けの使用を開始するには、次のことを行います。

1. [DynamoDB でのタグ付けの制限](#TaggingRestrictions) について理解します。

1. [DynamoDB でのタグ付けのリソース](Tagging.Operations.md) を使用してタグを作成します。

1. [DynamoDB タグを使用して、コスト配分レポートを作成する](#CostAllocationReports) を使用して、アクティブなタグごとに AWS のコストを追跡します。

最後に、最適のタグ付け手法に従うことをお勧めします。詳細については、「[AWS tagging strategies ( タグ付け戦略)](https://d0.awsstatic.com/aws-answers/AWS_Tagging_Strategies.pdf)」を参照してください。

## DynamoDB でのタグ付けの制限
<a name="TaggingRestrictions"></a>

 タグはそれぞれ、1 つのキーと 1 つの値で構成されており、どちらもお客様側が定義します。以下の制限が適用されます。
+  各 DynamoDB テーブルは同じキーを含む 1 つのタグのみを持つことができます。既存のタグ (同じキー) を追加しようとすると、既存のタグの値は新しい値に更新されます。
+  タグのキーと値は大文字と小文字が区別されます。
+  キーの最大長は Unicode 文字で 128 文字です。
+ 値の最大長は Unicode 文字で 256 文字です。
+  使用できる文字は、文字、ホワイトスペース、数字、および特殊文字 (`+ - = . _ : /`) です。
+  リソースあたりのタグの最大数は 50 です。
+ テーブル内のすべてのタグにサポートされる最大サイズは 10 KB です。
+ AWS 割り当てタグの名前と値には、`aws:` プレフィックスが自動的に割り当てられます。これをユーザーが割り当てることはできません。AWS 割り当てタグの名前は、タグ制限数の 50 または最大サイズ制限の 10 KB にカウントされません。ユーザー側で割り当てたタグ名は、`user:` というプレフィックスを付けてコスト配分レポートに表示されます。
+  過去にさかのぼってタグを適用することはできません。

# DynamoDB でのタグ付けのリソース
<a name="Tagging.Operations"></a>

Amazon DynamoDB コンソールまたは AWS Command Line Interface (AWS CLI) を使用して、タグを追加、リスト、編集、または削除できます。次に、これらのユーザー定義タグをアクティブ化し、コスト配分の追跡のため、AWS Billing and Cost Management コンソールに表示できます。詳細については、「[DynamoDB タグを使用して、コスト配分レポートを作成する](Tagging.md#CostAllocationReports)」を参照してください。

 一括編集の場合は、AWS マネジメントコンソール のタグエディタを使用することもできます。詳細については、「[タグエディタの使用](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/tag-editor.html)」を参照してください。

 代わりに DynamoDB API を使用するには、[Amazon DynamoDB API リファレンス](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/)で以下のオペレーションを参照してください。
+ [TagResource](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TagResource.html)
+ [UntagResource](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UntagResource.html)
+ [ListTagsOfResource](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ListTagsOfResource.html)

**Topics**
+ [タグでフィルターする権限の設定](#Tagging.Operations.permissions)
+ [新しいテーブルまたは既存のテーブルへのタグの追加 (AWS マネジメントコンソール)](#Tagging.Operations.using-console)
+ [新しいテーブルまたは既存のテーブルへのタグの追加 (AWS CLI)](#Tagging.Operations.using-cli)

## タグでフィルターする権限の設定
<a name="Tagging.Operations.permissions"></a>

タグを使用して DynamoDB コンソールでテーブルリストをフィルタリングするには、ユーザーのポリシーに以下のオペレーションへのアクセス権が含まれていることを確認します。
+ `tag:GetTagKeys`
+ `tag:GetTagValues`

これらのオペレーションにアクセスするには、以下の手順に従って、新しい IAM ポリシーをユーザーにアタッチします。

1. 管理者ユーザーで [IAM コンソール](https://console.aws.amazon.com/iam/)に移動します。

1. 左のナビゲーションメニューで [Policies (ポリシー)] を選択します。

1. [Create policy (ポリシーの作成)] を選択します。

1. 以下のポリシーを JSON エディタに貼り付けます。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "tag:GetTagKeys",
                   "tag:GetTagValues"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. ウィザードを完了し、ポリシーに名前を割り当てます (例:`TagKeysAndValuesReadAccess`)。

1. 左のナビゲーションメニューで [Users (ユーザー)] を選択します。

1. リストから、DynamoDB コンソールにアクセスする通常のユーザーを選択します。

1. [Add permissions (アクセス許可の追加)] を選択します。

1. [Attach existing policies directly (既存のポリシーを直接アタッチ)] を選択します。

1. リストから、前に作成したポリシーを選択します。

1. ウィザードを終了します。

## 新しいテーブルまたは既存のテーブルへのタグの追加 (AWS マネジメントコンソール)
<a name="Tagging.Operations.using-console"></a>

新しいタグを作成するときや、既存のテーブルのタグを追加、編集、削除するときは、DynamoDB コンソールを使用してタグを新しいテーブルに追加できます。

**作成時にリソースにタグを付けるには (コンソール)**

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

1. ナビゲーションペインで [**テーブル**] を選択して、[**テーブルの作成**] を選択します。

1. [**Create DynamoDB table (DynamoDB テーブルの作成)**] ページで、名前とプライマリキーを指定します。[**タグ**] セクションで、[**新しいタグを追加**] を選択し、使用するタグを入力します。

   タグ構造の詳細については、「[DynamoDB でのタグ付けの制限](Tagging.md#TaggingRestrictions)」を参照してください。

   テーブル作成の詳細については、「[DynamoDB テーブルの基本的なオペレーション](WorkingWithTables.Basics.md)」を参照してください。

**既存のリソースにタグを付けるには (コンソール)**

[https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/) で DynamoDB コンソールを開きます。

1. ナビゲーションペインで [**テーブル**] を選択します。

1. リストでテーブルを選択し、[**追加設定**] タブを選択します。ページの下部にある [**タグ**] セクションで、タグを追加、編集、削除できます。

## 新しいテーブルまたは既存のテーブルへのタグの追加 (AWS CLI)
<a name="Tagging.Operations.using-cli"></a>

次の例は、テーブルとインデックスを作成するとき、および既存のリソースへのタグを付けるときに、AWS CLI を使用してタグを指定する方法を示しています。

**作成時にリソースにタグを付けるには (AWS CLI)**
+ 次の例では、新しい `Movies` テーブルを作成し、値が `Owner` の `blueTeam` タグを追加します。

  ```
  aws dynamodb create-table \
      --table-name Movies \
      --attribute-definitions AttributeName=Title,AttributeType=S \
      --key-schema AttributeName=Title,KeyType=HASH \
      --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \
      --tags Key=Owner,Value=blueTeam
  ```

**既存のリソースにタグを付けるには (AWS CLI)**
+ 次の例では、`Owner` テーブル用に、値が `blueTeam` の `Movies` タグを追加します。

  ```
  aws dynamodb tag-resource \
      --resource-arn arn:aws:dynamodb:us-east-1:123456789012:table/Movies \
      --tags Key=Owner,Value=blueTeam
  ```

**テーブルのすべてのタグを一覧表示するには (AWS CLI)**
+ 次の例では、`Movies` テーブルに関連付けられたすべてのタグを一覧表示します。

  ```
  aws dynamodb list-tags-of-resource \
      --resource-arn arn:aws:dynamodb:us-east-1:123456789012:table/Movies
  ```

## DynamoDB タグを使用して、コスト配分レポートを作成する
<a name="CostAllocationReports"></a>

AWS はタグを使用して、コスト配分レポートでリソースコストを分類します。AWS には 2 つのタイプのコスト配分タグがあります。
+ AWS で生成されたタグ。AWS はユーザーのためにこのタグを定義、作成、適用します。
+ ユーザー定義のタグ。これらのタグを定義、作成、適用します。

Cost Explorer またはコスト配分レポートで使用するには、事前に両方のタイプのタグを別々にアクティブ化しておく必要があります。

 AWS で生成されたタグをアクティブ化するには: 

1.  AWS マネジメントコンソール にサインインし、[https://console.aws.amazon.com/billing/home\$1/](https://console.aws.amazon.com/billing/home#/.) で請求およびコスト管理コンソールを開きます。

1.  ナビゲーションペインで、**[Cost Allocation Tags]** (コスト配分タグ) を選択します。

1.  [**AWS-Generated Cost Allocation Tags**] で、[**Activate**] を選択します。

 ユーザー定義タグをアクティブにするには: 

1.  AWS マネジメントコンソール にサインインし、[https://console.aws.amazon.com/billing/home\$1/](https://console.aws.amazon.com/billing/home#/.) で請求およびコスト管理コンソールを開きます。

1.  ナビゲーションペインで、**[Cost Allocation Tags]** (コスト配分タグ) を選択します。

1.  **[User-Defined Cost Allocation Tags]** (ユーザー定義のコスト配分タグ) で、**[Activate]** (アクティブ化) を選択します。

 タグを作成してアクティブ化すると、AWS は、アクティブなタグごとにグループ化された使用量とコストを含むコスト配分レポートを生成します。コスト配分レポートには、ご利用の AWS のサービスのコストすべてが請求期間別に出力されます。タグ付きとタグなしのどちらのリソースもこのレポートに出力されるので、リソース別の請求額を明確に分類できます。

**注記**  
 現時点では、DynamoDB から転送されたデータは、コスト配分レポートのタグによって分類されません。

 詳細については、「[Using cost allocation tags](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)」(コスト配分タグの使用) を参照してください。