Docker:如何为本地Dynamo DB创建表?

时间:2017-08-04 13:50:19

标签: docker amazon-dynamodb

我正在尝试使用本地Amazon Dynamo DB创建一个docker容器。它确实有效。但是我无法理解如何在Docker文件中为这个图像创建一个表?

通过javascript我创建了一个这样的表:

var params = {
    TableName: 'UserActivity',
    KeySchema: [ 
        {
            AttributeName: 'user_id',
            KeyType: 'HASH',
        },
        {
            AttributeName: 'user_action', 
            KeyType: 'RANGE', 
        }
    ],
    AttributeDefinitions: [
        {
            AttributeName: 'user_id',
            AttributeType: 'S',
        },
        {
            AttributeName: 'user_action',
            AttributeType: 'S',
        }
    ],
    ProvisionedThroughput: {
        ReadCapacityUnits: 2, 
        WriteCapacityUnits: 2, 
    }
};
dynamodb.createTable(params, function(err, data) {
    if (err) ppJson(err); // an error occurred
    else ppJson(data); // successful response

});

这是我的Docker文件:

FROM openjdk:8-jre-alpine

ENV DYNAMODB_VERSION=latest

RUN apk add --update curl && \
    rm -rf /var/cache/apk/* && \
    curl -O https://s3-us-west-2.amazonaws.com/dynamodb-local/dynamodb_local_${DYNAMODB_VERSION}.tar.gz && \
    tar zxvf dynamodb_local_${DYNAMODB_VERSION}.tar.gz && \
    rm dynamodb_local_${DYNAMODB_VERSION}.tar.gz

EXPOSE 8000

ENTRYPOINT ["java", "-Djava.library.path=.", "-jar", "DynamoDBLocal.jar",  "--sharedDb", "-inMemory", "-port", "8000"]

2 个答案:

答案 0 :(得分:3)

您需要将DynamoDB客户端指向本地DynamoDB端点。

做类似的事情:

dynamodb = new AWS.DynamoDB({
    endpoint: new AWS.Endpoint('http://localhost:8000')
});
dynamodb.createTable(...);

<强>更新

或者,您可以使用AWS CLI在本地DynamoDB中创建表,而无需使用JavaSciprt代码。您需要使用&#34; - endpoint-url&#34;将CLI指向您的本地实例,如下所示:

aws dynamodb list-tables --endpoint-url http://localhost:8000

您需要使用create-table命令创建表格。

答案 1 :(得分:0)

主要问题在于我用于本地dynamodb的基本图像。我的意思是 openjdk:8-jre-alpine 看起来高山分布对于本地动力学的功能没有重要意义。 所以这是一个用于本地dynamodb的工作Dockerfile:

FROM openjdk:8-jre

ENV DYNAMODB_VERSION=latest

COPY .aws/ root/.aws/

RUN curl -O https://s3-us-west-2.amazonaws.com/dynamodb-local/dynamodb_local_${DYNAMODB_VERSION}.tar.gz && \
    tar zxvf dynamodb_local_${DYNAMODB_VERSION}.tar.gz && \
    rm dynamodb_local_${DYNAMODB_VERSION}.tar.gz

EXPOSE 8000

ENTRYPOINT ["java", "-Djava.library.path=.", "-jar", "DynamoDBLocal.jar",  "--sharedDb", "-inMemory"]

我很高兴看到在这种特殊情况下 alpine 的主要问题。