web-dev-qa-db-fra.com

Localhost Endpoint vers DynamoDB Local avec Boto3

Bien qu'Amazon fournisse de la documentation sur la façon de se connecter à dynamoDB local avec Java, PHP et .Net, il n'y a pas de description sur la façon de se connecter à localhost: 8000 à l'aide de Python. La documentation existante sur le Web indique l'utilisation de la méthode DynamoDBConnection dans boto.dynamodb2.layer1, mais cela crée une incompatibilité entre les environnements en direct et de test qui utilisent le protocole boto3 pour gérer dynamoDB.

Dans boto3, vous pouvez faire une demande de dynamo en utilisant le constructeur et les variables suivants définis dans l'environnement:

client = boto3.client('dynamodb')
table = client.list_tables()

Alors que le package boto.dynamodb2.layer1 vous oblige à construire les éléments suivants:

client = DynamoDBConnection(
    Host='localhost',
    port=8000,
    aws_access_key_id='anything',
    aws_secret_access_key='anything',
    is_secure=False)
table = client.list_tables()

Bien qu'il soit possible de créer une logique qui détermine le constructeur approprié en fonction de l'environnement local, je me méfie de construire un ensemble de méthodes qui traitent chaque constructeur comme le même. Au lieu de cela, je préférerais utiliser boto3 pour tout et pouvoir définir le point de terminaison pour dynamoDB dans les variables environnementales. Malheureusement, cette option ne semble pas être actuellement disponible.

Existe-t-il un moyen d'utiliser boto3 pour définir un point de terminaison local dynamoDB (comme les autres langues)? Ou toute chance qu'Amazon envisage de prendre en charge cette fonctionnalité?

33
R J

Il prend en charge DynamoDB Local. Il vous suffit de définir le point de terminaison approprié, comme vous pouvez le faire avec d'autres SDK de langue

Voici un extrait de code de la façon dont vous pouvez utiliser le client et l'interface de ressources de boto3 via DynamoDB Local:

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

Remarque: Vous souhaiterez étendre la réponse ci-dessus pour inclure la région. J'ai ajouté au code de Kyle ci-dessus. Si votre tentative initiale est accueillie avec une erreur de région, cela retournera la réponse "[]" appropriée.

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

Ceci est le tutoriel python DynamoDb. Il décrit comment se connecter à l'instance locale.

http://docs.aws.Amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.Python.01.html

Il semble que les paramètres minimum requis soient les suivants à l'aide de la configuration aws (ci-dessous).

dynamodb = boto3.resource('dynamodb', endpoint_url='http://localhost:8000/')

Les paramètres de région, de clé d'accès et de clé secrète peuvent être omis lors de la configuration des paramètres de profil à l'aide de aws configure commande (nécessite l'installation de aws cli). Cependant, vous pouvez créer des fichiers de configuration aws manuellement dans votre maison (au cas où vous ne voudriez pas utiliser aws cli).

fichier ~/.aws/config

[default]
output = json
region = anywhere

fichier ~/.aws/informations d'identification

[default]
aws_access_key_id = whatever_id
aws_secret_access_key = whatever_key 

Vous pouvez consulter la configuration aws dans http://docs.aws.Amazon.com/cli/latest/userguide/cli-chap-getting-started.html

Remarque dans le développement local de DynamoDb region, aws_access_key_id et aws_secret_access_key les valeurs dans ces fichiers peuvent être n'importe quoi. Mais si vous souhaitez utiliser aws cli avec l'AWS, vous devez mettre la région valide, l'identifiant et les clés valides. Ils sont disponibles lorsque vous vous inscrivez aux services AWS.

Plus d'informations lorsque vous appelez

db = boto3.client('dynamodb')

L'hôte auquel le boto3 connect se basera sur le paramètre region, par exemple region=us-west-1 lorsque l'appel au-dessus de l'api, il se connectera à dynamodb.us-west-1.amazonaws.com. Cependant, lorsque vous passez le paramètre endpoint_url le region ne sera pas utilisé. Pour plus de liste de points de terminaison AWS, rendez-vous sur http://docs.aws.Amazon.com/general/latest/gr/rande.html .

10
Supawat Pusavanno

utilisez une clé d'accès fictive et un identifiant sinon cela lèvera une exception lors de l'exécution des méthodes.

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

Voici la boto3 Référence de configuration (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