通过HTTPS方式连接GeminiDB兼容DynamoDB实例
在使用GeminiDB兼容DynamoDB接口进行数据操作时,为了保证数据传输的安全性,通常需要通过HTTPS方式连接。本文将详细介绍使用HTTPS方式连接GeminiDB兼容DynamoDB接口的基本操作,帮助用户顺利完成配置,确保数据的安全传输。
使用须知
- 目标实例必须与弹性云服务器在同一个虚拟私有云和子网内才能访问。
- 弹性云服务器必须处于目标实例所属安全组允许访问的范围内。
场景一:如果目标实例所属安全组为默认安全组, 则无需设置安全组规则。
场景二:如果目标实例所属安全组非默认安全组,请查看安全组规则是否允许该弹性云服务器访问。
- 如果安全组规则允许弹性云服务器访问,即可连接实例。
- 如果安全组规则不允许弹性云服务器访问,需要在实例安全组添加一条“入”的访问规则。
设置安全组的具体操作请参考8.4.4.5.1 给GeminiDB兼容DynamoDB接口实例设置安全组规则。
- 实例必须开启SSL的功能,详情参见开启SSL,并下载证书。以Java应用为例,导入证书命令为:
keytool -importcert -alias hw -file ca.cert -keystore <cacerts_path> -storepass password其中,cacerts_path建议指定为JDK默认的信任库文件路径,例如/~/jdk/jdk1.8.0_242/jre/lib/security/cacerts。
1. 出于业界兼容考虑,开启SSL后仍然可以使用HTTP的方式访问。在高安全性要求的场景下,客户可以通过修改配置项关闭HTTP方式访问,详情您可以在管理控制台右上角,选择“工单 > 新建工单”联系客服进行咨询。
2. HTTPS暂不支持弹性公网IP访问。
操作步骤
GeminiDB完全兼容DynamoDB接口。本章节仅给出部分代码示例。
- 添加 Maven 依赖。在 pom.xml 中添加 AWS SDK for Java 2.x 相关的依赖。
<dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>dynamodb</artifactId> <version>2.x.x</version> </dependency> </dependencies> - 通过DynamoDbClient使用HTTPS连接GeminiDB兼容DynamoDB接口。 Java示例:
import com.amazonaws.auth.AWSCredentialsProvider; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.client.builder.AwsClientBuilder; import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder; import com.amazonaws.services.dynamodbv2.model.*; public class HttpsDemo { public static AWSCredentialsProvider myCredentials = new AWSStaticCredentialsProvider( new BasicAWSCredentials("your_ak", "your_sk")); public static void main(String[] args) { AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("https://your_elb_ip", "cn-north-1")) .withCredentials(myCredentials) .build(); System.out.println(client.listTables()); CreateTableRequest request = new CreateTableRequest() .withTableName("test_001") .withProvisionedThroughput(new ProvisionedThroughput(1000L, 1000L)) .withKeySchema( new KeySchemaElement("id", KeyType.HASH) ) .withAttributeDefinitions( new AttributeDefinition("id", ScalarAttributeType.N) ); System.out.println(client.createTable(request)); } }Python示例:
import boto3 ENDPOINT_URL = 'https://your_elb_ip' CA_BUNDLE_PATH = 'ca.crt' dynamodb = boto3.client( 'dynamodb', aws_access_key_id = 'your_ak', aws_secret_access_key = 'your_sk', endpoint_url = ENDPOINT_URL, region_name = 'cn-north-1', verify = CA_BUNDLE_PATH ) try: response = dynamodb.list_tables() print(response.get('TableNames')) except Exception as e: print(e)