このトピックでは、AWS CLI、Python、Java を使用して DynamoDB 互換インスタンスに接続する方法について説明します。
前提条件
DynamoDB 互換インスタンスが必要です。 インスタンスを作成する際に、プロトコルの種類として [DynamoDB] を選択します。 詳細については、「シャードクラスターインスタンスの作成」をご参照ください。
接続エンドポイント
ご利用の DynamoDB 互換インスタンスの接続エンドポイントを取得します。
-
ApsaraDB for MongoDB コンソールにログインします。
-
ページの左上隅で、インスタンスのリソースグループとリージョンを選択します。
-
左側のナビゲーションウィンドウで、Shardクラスターインスタンスのリスト をクリックします。
-
ターゲットインスタンスを見つけて、その ID をクリックします。
-
左側のナビゲーションウィンドウで、データベース接続 をクリックします。
-
[VPC 接続] セクションで、インスタンスの接続エンドポイントを表示します。 このエンドポイントの [プロトコルの種類] は [DynamoDB 互換プロトコル] で、アドレスは
dds-で始まります。
アプリケーションが ECS インスタンスにデプロイされている場合、ネットワーク接続を確保するには、ご利用の ApsaraDB for MongoDB インスタンスと ECS インスタンスが次の条件を満たす必要があります。
-
同じリージョンに存在する必要があります。 既存の ECS インスタンスがある場合は、そのリージョンを確認できます。 詳細については、「ECS インスタンスのリージョンを表示」をご参照ください。
-
任意:ネットワーク遅延を低減するために、同じゾーンに配置することを推奨します。 既存の ECS インスタンスがある場合は、そのゾーンを確認できます。 詳細については、「ECS インスタンスのゾーンを表示」をご参照ください。
-
同じネットワークタイプを使用する必要があります。 既存の ECS インスタンスがある場合は、そのネットワークタイプを確認できます。 詳細については、「ECS インスタンスのネットワークタイプを表示」をご参照ください。 ECS インスタンスが 古典的なネットワーク を使用している場合は、古典的なネットワーク から 独自のネットワーク に移行できます。 詳細については、「ECS インスタンスをクラシックネットワークから VPC に移行する」をご参照ください。
AWS CLI を使用した接続
このセクションでは、Ubuntu 16.04.6 LTS システムで AWS コマンドラインインターフェイス (AWS CLI) を使用して DynamoDB 互換インスタンスに接続する方法を説明します。AWS CLI の詳細については、「AWS コマンドラインインターフェイスとは」をご参照ください。
-
AWS CLI クライアントをインストールします。
-
次のコマンドを実行して、最新バージョンの AWS CLI をダウンロードし、
awscliv2.zipとして保存します。curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" -
次のコマンドを実行して、
awscliv2.zipファイルを解凍します。unzip awscliv2.zip説明unzipがインストールされていない場合は、sudo apt install unzipコマンドを実行してインストールします。 -
次のコマンドを実行して、AWS CLI をインストールします。
sudo ./aws/install
You can now run: /usr/local/bin/aws --versionというメッセージが表示されると、AWS CLI がインストールされます。 その後、/usr/local/bin/aws --versionコマンドを実行して、AWS CLI の現在のバージョンを確認できます。 -
-
/usr/local/bin/aws configureコマンドを実行して AWS CLI を設定します。 次の値を入力し、各値の入力後に Enter キーを押します。パラメーター
説明
例
AWS Access Key IDアクセスキー ID を入力します。 DynamoDB 互換サービスはこのキーを検証しないため、任意の文字列を入力できます。
XXXXXXXXXXAWS Secret Access Keyシークレットアクセスキーを入力します。 DynamoDB 互換サービスはこのキーを検証しないため、任意の文字列を入力できます。
XXXXXXXXXXDefault region nameデフォルトの AWS リージョン名を入力します。
us-west-2Default output formatデフォルトの出力フォーマットです。 このパラメーターは空白のままにすることができます。
json説明AWS CLI の設定方法の詳細については、「設定の基本」をご参照ください。
-
次のコマンドを実行して、ターゲットの DynamoDB 互換インスタンスに接続し、テーブルを作成します。
aws dynamodb --endpoint-url <connection-endpoint-of-your-DynamoDB-compatible-instance> \ create-table --table-name <your-table-name> \ --attribute-definitions AttributeName=<attribute-name>,AttributeType=<attribute-data-type> \ --key-schema AttributeName=<primary-key-attribute-name>,KeyType=<key-role> \ --provisioned-throughput ReadCapacityUnits=<provisioned-read-throughput>,WriteCapacityUnits=<provisioned-write-throughput>パラメーター
説明
--endpoint-urlターゲットの DynamoDB 互換インスタンスのエンドポイント。 エンドポイントは
http://で始まる必要があります。create-tableテーブルを作成するコマンドです。
説明詳細については、「create-table」をご参照ください。
--table-name作成するテーブルの名前です。
--attribute-definitionsテーブルまたはインデックスのキーのスキーマを記述する属性の配列です。 このパラメーターには、次のサブパラメーターが必要です。
-
AttributeName:属性の名前です。 -
AttributeType:属性のデータの型です。説明詳細については、「create-table」をご参照ください。
--key-schemaテーブルまたはインデックスのプライマリキーを構成する属性です。 このパラメーターには、次のサブパラメーターが必要です。
-
AttributeName:キー属性の名前です。 属性は--attribute-definitionsパラメーターを使用して定義されます。 -
KeyType:キーのロールです。 有効な値:HASH と RANGE。 HASH はパーティションキーを指定し、RANGE はソートキーを指定します。説明詳細については、「create-table」をご参照ください。
--provisioned-throughputテーブルまたはインデックスのプロビジョニングされたスループット設定です。 このパラメーターには、次のサブパラメーターが必要です。
-
ReadCapacityUnits:プロビジョニングされた読み取りスループットです。 -
WriteCapacityUnits:プロビジョニングされた書き込みスループットです。
説明詳細については、「create-table」をご参照ください。
例:
/usr/local/bin/aws dynamodb --endpoint-url http://dds-xxxx.mongodb.rds.aliyuncs.com:3717 \ # DynamoDB 互換インスタンスの指定されたエンドポイントに接続します。 create-table --table-name student \ # student という名前のテーブルを作成します。 --attribute-definitions AttributeName=name,AttributeType=S AttributeName=age,AttributeType=N \ # テーブルスキーマには、String (S) 型の 'name' 属性と Number (N) 型の 'age' 属性が含まれます。 --key-schema AttributeName=name,KeyType=HASH AttributeName=age,KeyType=RANGE \ # 'name' をパーティションキーとして、'age' をソートキーとして指定します。 --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 # プロビジョニングされた読み取りスループットと書き込みスループットを 5 に設定します。次の出力が返された場合、ターゲットの DynamoDB 互換インスタンスに接続し、テーブルが作成されたことになります。
{ "TableDescription": { "TableName": "student", "KeySchema": [ { "AttributeName": "name", "KeyType": "HASH" }, { "AttributeName": "age", "KeyType": "RANGE" } ], "TableStatus": "CREATING", "TableSizeBytes": 0, "ItemCount": 0 } } -
Python を使用した接続
-
Python 2.6 以降のバージョンがインストールされていること。 詳細については、「Python 公式ウェブサイト」をご参照ください。
-
Boto3 がインストールされていること。 詳細については、「Boto3 のインストール」をご参照ください。
次のコードは、Python を使用して DynamoDB 互換インスタンスに接続し、Book という名前のテーブルを作成する方法を示しています。
import boto3
def create_book_table(dynamodb=None):
if not dynamodb:
# endpoint_url をご利用の DynamoDB 互換インスタンスの実際のエンドポイントに置き換えます。
dynamodb = boto3.resource('dynamodb', endpoint_url="http://dds-xxxx.mongodb.rds.aliyuncs.com:3717")
table = dynamodb.create_table(
TableName='Book',
KeySchema=[
{
'AttributeName':'title',
'KeyType':'HASH'
},
{
'AttributeName':'year',
'KeyType':'RANGE'
}
],
AttributeDefinitions=[
{
'AttributeName':'title',
'AttributeType':'S'
},
{
'AttributeName':'year',
'AttributeType':'N'
},
],
ProvisionedThroughput={
'ReadCapacityUnits':5,
'WriteCapacityUnits':5
}
)
return table
if __name__ == '__main__':
book_table =create_book_table()
print("Table status:", book_table.table_status)
Java を使用した接続
AWS SDK for Java は必須です。詳細については、「AWS SDK for Java をセットアップする」をご参照ください。
次のコードは、Java を使用して DynamoDB 互換インスタンスに接続し、Book という名前のテーブルを作成する方法を示しています。
package com.amazonaws.codesamples.gsg;
import java.util.Arrays;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.Table;
import com.amazonaws.services.dynamodbv2.model.AttributeDefinition;
import com.amazonaws.services.dynamodbv2.model.KeySchemaElement;
import com.amazonaws.services.dynamodbv2.model.KeyType;
import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput;
import com.amazonaws.services.dynamodbv2.model.ScalarAttributeType;
public class MoviesCreateTable {
public static void main(String[] args) throws Exception {
// endpoint と region を、ご利用の DynamoDB 互換インスタンスの実際の値に置き換えます。
AmazonDynamoDB client =AmazonDynamoDBClientBuilder.standard()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("http://dds-xxxx.mongodb.rds.aliyuncs.com:3717",
"us-east-1"))
.build();
DynamoDB dynamoDB = new DynamoDB(client);
String tableName ="Book";
try {
System.out.println("Creating table...");
Table table =dynamoDB.createTable(tableName,
Arrays.asList(new
KeySchemaElement("title", KeyType.HASH), // パーティションキー
new KeySchemaElement("year", KeyType.RANGE)), // ソートキー
Arrays.asList(new AttributeDefinition("title", ScalarAttributeType.S),
new AttributeDefinition("year", ScalarAttributeType.N)),
new ProvisionedThroughput(5L, 5L));
table.waitForActive();
System.out.println("OK. Table status: " + table.getDescription().getTableStatus());
}
catch (Exception e) {
System.err.println("Unable to create table: ");
System.err.println(e.getMessage());
}
}
}
その他の言語での接続例
詳細については、「DynamoDB と AWS SDKs を使用したクイックスタート」をご参照ください。