web-dev-qa-db-ja.com

Boto3を使用したDynamoDB LocalへのLocalhostエンドポイント

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がこの機能をサポートする予定はありますか?

33
R J

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()))
46
Kyle Knapp

注:上記の応答を拡張して、地域を含めることができます。上記の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()))
17
Damian Wilbur

これはチュートリアル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開発では、これらのファイルのregionaws_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 にアクセスしてください。

10

ダミーのアクセスキーと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")
8
Aman Agarwal

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`
        """
0
caot