Amazonは dynamoDB local Java、PHPおよび.Net)への接続方法に関するドキュメントを提供していますが、Pythonを使用してlocalhost:8000に接続する方法の説明はありません。 Web上の既存のドキュメントは、boto.dynamodb2.layer1内で DynamoDBConnection method を使用することを示していますが、これにより、boto3プロトコルを使用してdynamoDBを管理するライブ環境とテスト環境の間に非互換性が生じます。
Boto3では、次のコンストラクターと環境に設定された変数を使用して、ダイナモにリクエストを作成できます。
client = boto3.client('dynamodb')
table = client.list_tables()
一方、boto.dynamodb2.layer1パッケージでは、以下を構築する必要があります。
client = DynamoDBConnection(
Host='localhost',
port=8000,
aws_access_key_id='anything',
aws_secret_access_key='anything',
is_secure=False)
table = client.list_tables()
ローカル環境に基づいて適切なコンストラクターを決定するロジックを作成することは可能ですが、各コンストラクターを同じものとして扱う一連のメソッドを構築するのは慎重です。代わりに、すべてにboto3を使用し、環境変数でdynamoDBのエンドポイントを設定できるようにします。残念ながら、 そのオプション は現在利用可能ではないようです。
Boto3を使用してdynamoDBローカルエンドポイントを定義する方法はありますか(他の言語と同様)?または、Amazonがこの機能をサポートする予定はありますか?
DynamoDB Localをサポートします。他の 言語SDK でできるように、適切なエンドポイントを設定するだけです。
以下に、DynamoDB Localを介してboto3のクライアントおよびリソースインターフェイスを使用する方法のコードスニペットを示します。
import boto3
# For a Boto3 client.
ddb = boto3.client('dynamodb', endpoint_url='http://localhost:8000')
response = ddb.list_tables()
print(response)
# For a Boto3 service resource
ddb = boto3.resource('dynamodb', endpoint_url='http://localhost:8000')
print(list(ddb.tables.all()))
注:上記の応答を拡張して、地域を含めることができます。上記のKyleのコードに追加しました。最初の試行が地域エラーで迎えられた場合、これは適切な「[]」応答を返します。
import boto3
## For a Boto3 client ('client' is for low-level access to Dynamo service API)
ddb1 = boto3.client('dynamodb', endpoint_url='http://localhost:8000', region_name='us-west-2')
response = ddb1.list_tables()
print(response)
# For a Boto3 service resource ('resource' is for higher-level, abstracted access to Dynamo)
ddb2 = boto3.resource('dynamodb', endpoint_url='http://localhost:8000', region_name='us-west-2')
print(list(ddb2.tables.all()))
これはチュートリアルpython DynamoDbです。ローカルインスタンスに接続する方法を示しています。
http://docs.aws.Amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.Python.01.html
Aws設定の助けを借りれば、最低限必要なパラメーターは次のようになります(以下)。
dynamodb = boto3.resource('dynamodb', endpoint_url='http://localhost:8000/')
aws configure
コマンドを使用してプロファイルパラメーターを構成する場合、リージョン、アクセスキー、およびシークレットキーパラメーターは省略できます(install aws cliが必要です)。ただし、自宅で手動でaws構成ファイルを作成できます(aws cliを使用したくない場合)。
ファイル〜/ .aws/config
[default]
output = json
region = anywhere
ファイル〜/ .aws/credentials
[default]
aws_access_key_id = whatever_id
aws_secret_access_key = whatever_key
http://docs.aws.Amazon.com/cli/latest/userguide/cli-chap-getting-started.html でaws構成を参照できます。
ローカルのDynamoDb開発では、これらのファイルのregion
、aws_access_key_id
およびaws_secret_access_key
の値は何でもかまいません。ただし、AWSでaws cliを使用する場合は、有効なリージョン、有効なIDおよびキーを配置する必要があります。 AWSサービスに登録すると利用できます。
電話での詳細情報
db = boto3.client('dynamodb')
Boto3が接続するホストは、region
パラメーターに基づきます。 region=us-west-1
上記のAPIを呼び出すと、dynamodb.us-west-1.amazonaws.com
に接続します。ただし、パラメータendpoint_url
を渡すと、region
は使用されません。 AWSエンドポイントのリストの詳細については、 http://docs.aws.Amazon.com/general/latest/gr/rande.html にアクセスしてください。
ダミーのアクセスキーとIDを使用します。そうしないと、メソッドの実行時に例外がスローされます。
import boto3 dynamodb = boto3.session('dynamodb', aws_access_key_id="anything", aws_secret_access_key="anything", region_name="us-west-2", endpoint_url="http://localhost:8000")
boto3
構成リファレンス(API):
https://botocore.amazonaws.com/v1/documentation/api/latest/reference/config.html
def resource(self, service_name, region_name=None, api_version=None,
use_ssl=True, verify=None, endpoint_url=None,
aws_access_key_id=None, aws_secret_access_key=None,
aws_session_token=None, config=None):
"""
Create a resource service client by name.
:type service_name: string
:param service_name: The name of a service, e.g. 's3' or 'ec2'. You
can get a list of available services via
:py:meth:`get_available_resources`.
:type region_name: string
:param region_name: The name of the region associated with the client.
A client is associated with a single region.
:type api_version: string
:param api_version: The API version to use. By default, botocore will
use the latest API version when creating a client. You only need
to specify this parameter if you want to use a previous API version
of the client.
:type use_ssl: boolean
:param use_ssl: Whether or not to use SSL. By default, SSL is used.
Note that not all services support non-ssl connections.
:type verify: boolean/string
:param verify: Whether or not to verify SSL certificates. By default
SSL certificates are verified. You can provide the following
values:
* False - do not validate SSL certificates. SSL will still be
used (unless use_ssl is False), but SSL certificates
will not be verified.
* path/to/cert/bundle.pem - A filename of the CA cert bundle to
uses. You can specify this argument if you want to use a
different CA cert bundle than the one used by botocore.
:type endpoint_url: string
:param endpoint_url: The complete URL to use for the constructed
client. Normally, botocore will automatically construct the
appropriate URL to use when communicating with a service. You
can specify a complete URL (including the "http/https" scheme)
to override this behavior. If this value is provided,
then ``use_ssl`` is ignored.
:type aws_access_key_id: string
:param aws_access_key_id: The access key to use when creating
the client. This is entirely optional, and if not provided,
the credentials configured for the session will automatically
be used. You only need to provide this argument if you want
to override the credentials used for this specific client.
:type aws_secret_access_key: string
:param aws_secret_access_key: The secret key to use when creating
the client. Same semantics as aws_access_key_id above.
:type aws_session_token: string
:param aws_session_token: The session token to use when creating
the client. Same semantics as aws_access_key_id above.
:type config: botocore.client.Config
:param config: Advanced client configuration options. If region_name
is specified in the client config, its value will take precedence
over environment variables and configuration values, but not over
a region_name value passed explicitly to the method. If
user_agent_extra is specified in the client config, it overrides
the default user_agent_extra provided by the resource API. See
`botocore config documentation
<https://botocore.amazonaws.com/v1/documentation/api/latest/reference/config.html>`_
for more details.
:return: Subclass of :py:class:`~boto3.resources.base.ServiceResource`
"""