本文档通过AWS CLI、Python、Java多个维度,介绍如何连接到DynamoDB协议兼容版实例。
前提条件
已创建DynamoDB协议兼容版实例(协议类型选择DynamoDB协议),创建方法请参见创建分片集群实例。
准备工作
获取DynamoDB协议兼容版实例的连接地址。
登录MongoDB管理控制台。
在页面左上角,选择实例所在的资源组和地域。
在左侧导航栏,单击分片集群实例列表。
找到目标实例,单击实例ID。
在左侧导航栏,单击数据库连接。
在私网连接 - 专有网络区域,查看实例的连接地址。
如果应用部署在ECS实例,您需要确保云数据库MongoDB实例和ECS服务器满足以下条件,以保证网络的连通性。
所在地域相同。如果您已经创建了ECS服务器,您可以查看ECS所在地域,查看方法请参见查看ECS实例所在地域。
可选:建议所属可用区相同,以减少网络延时。如果您已经创建了ECS服务器,您可以查看ECS所在可用区,查看方法请参见查看ECS实例所在地域。
网络类型相同。如果您已经创建了ECS服务器,您可以查看ECS的网络类型,查看方法请参见查看ECS实例网络类型。当ECS服务器的网络类型为经典网络时,您可以将经典网络迁移至专有网络,迁移方法请参见ECS实例从经典网络迁移到专有网络。
AWS CLI连接示例
以Ubuntu 16.04.6 LTS系统为例介绍通过AWS CLI(AWS Command Line Interface)连接DynamoDB协议兼容版实例的方法。关于AWS CLI的详细信息,请参见AWS Command Line Interface是什么。
安装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,分别输入下列几项参数(每输入一项参数按回车):参数
说明
示例
AWS Access Key ID
输入您AWS账号的Access Key ID,如没有可以输入任意字符。
XXXXXXXXXX
AWS Secret Access Key
输入您AWS账号的Secret Access Key,如没有可以输入任意字符。
XXXXXXXXXX
Default region name
输入您AWS的DynamoDB数据库所在的地域,如没有可以根据示例输入。
us-west-2
Default output format
默认的输出格式,此处可以留空。
json
说明更多AWS CLI配置说明的相关信息,请参见AWS CLI基本配置。
执行如下命令,连接目标DynamoDB协议兼容版实例并创建一张表。
aws dynamodb --endpoint-url <DynamoDB协议兼容版实例的连接串地址> \ create-table --table-name <需要创建的表名> \ --attribute-definitions AttributeName=<属性名>,AttributeType=<属性的数据类型> \ --key-schema AttributeName=<指定主键的属性名>,KeyType=<主键的角色> \ --provisioned-throughput ReadCapacityUnits=<预设读吞吐量>,WriteCapacityUnits=<预设写吞吐量>
参数
说明
--endpoint-url
需要连接的目标DynamoDB协议兼容版实例地址。需要以
HTTP://
开头。create-table
创建表的命令。
说明更多信息,请参见create-table。
--table-name
指定需要创建表的名称。
--attribute-definitions
描述表或索引整体架构的属性数组。该选项还需指定如下两个子选项:
AttributeName
:属性的名称。AttributeType
:属性的数据类型。说明更多信息,请参见create-table。
--key-schema
指定表或索引的主键属性。该选项还需指定如下两个子选项:
AttributeName
:指定通过--attribute-definitions
创建的某个属性名为主键。KeyType
:指定主键的角色。说明更多信息,请参见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的name属性和类型为Number的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连接到DynamoDB协议兼容版实例并创建一个名为Book
的表:
import boto3
def create_book_table(dynamodb=None):
if not 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("Tablestatus:", 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 {
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());
}
}
}