LindormTable は Amazon S3 プロトコルをサポートしているため、LindormTable 固有のクライアントライブラリを導入せずに、任意の S3 互換 SDK を使用して接続できます。本トピックでは、AWS SDK for Go および Python 向け boto3 を用いた接続方法と基本操作の実行手順を説明します。
前提条件
開始する前に、以下の準備を行ってください。
Lindorm コンソールの [ワイドテーブルエンジン] タブにある S3 互換アドレスエンドポイント。詳細については、「エンドポイントの確認」をご参照ください。

ご利用のクライアント IP アドレスが Lindorm インスタンスのホワイトリストに登録済みであること。詳細については、「ホワイトリストの設定」をご参照ください。
AccessKey ID および AccessKey Secret を環境変数として設定済みであること。
export ALIBABA_CLOUD_ACCESS_KEY_ID=<your-access-key-id> export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<your-access-key-secret>
Go を使用した接続
SDK のインストール
go get github.com/aws/aws-sdk-goクライアントの設定
LindormTable では、以下の 3 つのパラメーターにデフォルト値以外の設定が必要です。
| パラメーター | 値 | 理由 |
|---|---|---|
Region | "lindorm" | SDK が必須とする値であり、LindormTable ではルーティングには使用されません |
S3ForcePathStyle | true | LindormTable はパススタイルアドレッシングを要します |
Endpoint | Lindorm コンソールから取得した S3 互換アドレス | リクエストをご利用の LindormTable インスタンスにルーティングします |
package main
import (
"log"
"os"
"strings"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
)
const (
// Lindorm コンソールの [ワイドテーブルエンジン] タブから取得した S3 互換アドレスに置き換えてください。
s3endpoint = "http://ld-bp17j28j2y7pm****-proxy-lindorm.lindorm.rds.aliyuncs.com:9053"
)
func main() {
conf := &aws.Config{
Credentials: credentials.NewStaticCredentials(
os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), // AccessKey ID
os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), // AccessKey Secret
"",
),
Region: aws.String("lindorm"), // SDK が必須とする値であり、LindormTable ではルーティングには使用されません
Endpoint: aws.String(s3endpoint),
S3ForcePathStyle: aws.Bool(true), // LindormTable はパススタイルアドレッシングを要します
}
sess, err := session.NewSession(conf)
if err != nil {
log.Fatal("セッションの作成に失敗しました:", err)
}
svc := s3.New(sess)すべてのバケットの一覧表示
input := &s3.ListBucketsInput{}
result, err := svc.ListBuckets(input)
if err != nil {
log.Fatal("バケットの一覧表示に失敗しました:", err)
}
println(result.String())バケットの作成
bucket := "testbucketgo"
out, err := svc.CreateBucket(&s3.CreateBucketInput{Bucket: &bucket})
log.Println(out)
if err != nil {
log.Fatal("バケットの作成に失敗しました:", err)
}
if err = svc.WaitUntilBucketExists(&s3.HeadBucketInput{Bucket: &bucket}); err != nil {
log.Fatalf("バケット %s の作成完了を待機中に失敗しました: %s\n", bucket, err)
}オブジェクトの書き込み
key := "testObjectGo"
_, err = svc.PutObject(&s3.PutObjectInput{
Body: strings.NewReader("Hello World!"),
Bucket: &bucket,
Key: &key,
})
if err != nil {
log.Fatalf("オブジェクトのアップロードに失敗しました (%s/%s): %s\n", bucket, key, err)
}
}Python を使用した接続
SDK のインストール
pip install boto3クライアントの設定
addressing_style: 'path' の設定により、LindormTable が要するパススタイルアドレッシングが有効になります。
import os
import boto3
from botocore.client import Config
# Lindorm コンソールの [ワイドテーブルエンジン] タブから取得した S3 互換アドレスに置き換えてください。
s3endpoint = 'http://ld-bp17j28j2y7pm****-proxy-lindorm.lindorm.rds.aliyuncs.com:9053'
s3client = boto3.client(
's3',
aws_access_key_id=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_ID"), # AccessKey ID
aws_secret_access_key=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), # AccessKey Secret
endpoint_url=s3endpoint,
config=Config(s3={'addressing_style': 'path'}) # LindormTable はパススタイルアドレッシングを要します
)すべてのバケットの一覧表示
buckets = s3client.list_buckets()
for bucket in buckets['Buckets']:
print(bucket["Name"])正常な応答では、バケット名が 1 行ずつ出力されます。
testbucketpythonバケットの作成
s3client.create_bucket(Bucket="testbucketpython")オブジェクトのアップロード
s3client.upload_file("demo.py", "testbucketpython", "demo.py")オブジェクトのダウンロード
s3client.download_file('testbucketpython', 'demo.py', 'demo.py.download')次のステップ
LindormTable でサポートされるその他の S3 互換操作について詳しくは、AWS SDK for Go ドキュメントおよびboto3 ドキュメントをご参照ください。
アクセスの制御および使用量のモニターについては、Lindorm コンソールをご利用ください。