Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ services:
dockerfile: dynamo.Dockerfile
ports:
- "8000:8000"
volumes:
- ./dynamo-data:/db
networks:
- sync
redis:
Expand Down
33 changes: 10 additions & 23 deletions dynamo.Dockerfile
Original file line number Diff line number Diff line change
@@ -1,32 +1,19 @@
ARG DB_LOCATION=/home/dynamodblocal/db
FROM amazon/dynamodb-local:2.6.1 AS install

USER root
RUN yum -y install awscli
FROM amazon/dynamodb-local:2.6.1

USER dynamodblocal
ENV AWS_ACCESS_KEY_ID=GOSYNC
ENV AWS_SECRET_ACCESS_KEY=GOSYNC
ARG AWS_ENDPOINT=http://localhost:8000
ARG AWS_REGION=us-west-2
ARG DB_LOCATION
ARG TABLE_NAME=client-entity-dev

COPY schema/dynamodb/ .
RUN mkdir -p ${DB_LOCATION} && \
java -jar DynamoDBLocal.jar -sharedDb -dbPath ${DB_LOCATION} & \
DYNAMO_PID=$! && \
sleep 15 && \
aws dynamodb create-table --cli-input-json file://table.json \
--endpoint-url ${AWS_ENDPOINT} --region ${AWS_REGION} && \
aws dynamodb update-time-to-live --table-name client-entity-dev \
--time-to-live-specification "Enabled=true, AttributeName=ExpirationTime" \
--endpoint-url http://localhost:8000 && \
kill $DYNAMO_PID
COPY schema/dynamodb/ /schema/

FROM amazon/dynamodb-local:2.6.1
VOLUME ["/db"]

ARG DB_LOCATION
COPY --chown=dynamodblocal:dynamodblocal --from=install ${DB_LOCATION} /db
USER root
RUN dnf -y install awscli util-linux \
&& dnf clean all \
&& rm -rf /var/cache/dnf
COPY dynamo.entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]
CMD ["-jar", "DynamoDBLocal.jar", "-sharedDb", "-dbPath", "/db"]
43 changes: 43 additions & 0 deletions dynamo.entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#!/bin/bash
set -e

DB_FILE="/db/shared-local-instance.db"
AWS_ENDPOINT=http://localhost:8000
DYNAMO_USER="dynamodblocal"
AWS_REGION=us-west-2
TABLE_NAME=client-entity-dev

echo "Fixing ownership of /db to $DYNAMO_USER user"
chown -R $DYNAMO_USER:$DYNAMO_USER /db

if [ ! -f "$DB_FILE" ]; then
echo "No DB file found. Bootstrapping schema..."
echo "Starting DynamoDBLocal as $DYNAMO_USER..."

su $DYNAMO_USER -c "java $*" &
DYNAMO_PID=$!

echo "Waiting for DynamoDBLocal to become available..."
until su $DYNAMO_USER -c "curl -s '$AWS_ENDPOINT' > /dev/null"; do
sleep 0.5
done

echo "Creating table from /schema/table.json..."
su $DYNAMO_USER -c "aws dynamodb create-table --cli-input-json file:///schema/table.json \
--endpoint-url $AWS_ENDPOINT --region $AWS_REGION"

echo "Enabling TTL..."
su $DYNAMO_USER -c "aws dynamodb update-time-to-live --table-name $TABLE_NAME \
--time-to-live-specification 'Enabled=true, AttributeName=ExpirationTime' \
--endpoint-url $AWS_ENDPOINT --region $AWS_REGION"

kill $DYNAMO_PID
wait $DYNAMO_PID 2>/dev/null || true

echo "Schema initialization complete. "
else
echo "DB file already exists. Skipping initialization."
fi

echo "Starting DynamoDBLocal as $DYNAMO_USER..."
exec su $DYNAMO_USER -c "java $*"