计算Docker容器中的时间戳(在ECS中运行)并传递给AWS CLI DynamoDB Put-Item

时间:2019-07-01 23:11:22

标签: docker ubuntu time amazon-dynamodb aws-cli

我正在进行一个辅助项目,要求我将在AWS ECS Fargate上运行的Docker容器内的构建完成(相关)的时间戳传递到DynamoDB表中。就用例而言,它可以用作该特定系统的自定义审核日志。

我正在尝试找到一种将时间戳记作为ENV VAR传递到aws dynamodb put-item CLI操作中的好方法。我的CLI查询如下所示: aws dynamodb put-item --table-name build-audit --item '{ "date": {"S": '\"$(DTG)\"'} }'

以前,我曾尝试过ENV DTG=$(date +%s),但遇到此错误Syntax error - can't find = in "+%s)". Must be of the form: name=valuedockerfile-utils(33)

我尝试直接将其作为ENV DTG=date以及其一些变体(date,$(date),带反引号的日期等)运行,最终它们将作为文字字符串传递而不是我表中的实际时间戳。

然后我关闭以做这样的事情

...docker stuff...
date > dtg.txt && \
aws dynamodb put-item --table-name build-audit --item '{ "date": {"S": '\"$(cat ./dtg.txt)\"'} }'

我会在CLI中收到一个参数错误(尽管在文件上运行cat会执行我想要的操作),但是我不知道如何在CLI中传递该输出。

我可以在Docker中使用其他方法吗?

1 个答案:

答案 0 :(得分:0)

希望这个例子可以帮助您找到所需的内容:

FROM busybox
ARG START
ENV STARTX=${START}
RUN echo ${START}
RUN echo ${STARTX}

然后:

docker build \
--tag=example \
--build-arg=START=$(date +'%y%m%d') \
.
Sending build context to Docker daemon  2.048kB
Step 1/5 : FROM busybox
Step 2/5 : ARG START
Step 3/5 : ENV STARTX=${START}
Step 4/5 : RUN echo ${START}
190701
Step 5/5 : RUN echo ${STARTX}
190701
Successfully built a0f3f19bd9ad
Successfully tagged deleteme:latest

通过--build-arg提供,并且可以在构建过程RUN echo ${START}中访问

由于在构建(ENV STARTX=${START})期间分配了环境变量,因此${STARTX}在容器内也将可用:

docker inspect example --format="{{.Config.Env}}"
[PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin STARTX=190701]

NB ARG STARTENV STARTX...纯粹是为了清楚起见,但可以使用相同的名称。