

# 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)」を参照してください。