我的 Javascript AWS Lambda 函数中有以下代码片段:
const taskParams = {
"taskDefinition": workerTaskDefinitionName,
"launchType": "FARGATE",
"count": "1",
"overrides": {
"containerOverrides": [
{
"name": containerName,
"environment": [
{
"name": "INPUT_VIDEO_FILE_URL",
"value": srcKey
},
{
"name": "POSITION_TIME_DURATION",
"value": positionTimeDuration
},
{
"name":"OUTPUT_THUMBS_FILE_NAME",
"value": dstKey
},
{
"name":"OUTPUT_S3_PATH",
"value": destinationBucket
}
]
}
]
}
};
try {
console.log('Starting task...');
console.log(` srcBucket=${srcBucket}`);
console.log(` srcKey=${srcKey}`);
console.log(` positionTimeDuration=${positionTimeDuration}`);
console.log(` dstKey=${dstKey}`);
console.log(` destinationBucket=${destinationBucket}`);
ecs.runTask(taskParams, function(err, data) {
if (err) {
console.log(err, err.stack); // an error occurred
}
else {
console.log(data); // successful response
console.log('Successfully ran the task.');
}
});
} catch(error) {
console.log('Error running the task.');
console.log(error);
}
本质上,lambda 正在为 Fargate 容器化任务设置环境并调用该任务。
我有一个占位符 bash 脚本作为容器化任务:
#!/bin/bash
### Environment variables ###
# INPUT_VIDEO_FILE_URL
# POSITION_TIME_DURATION
# OUTPUT_THUMBS_FILE_NAME
# OUTPUT_S3_PATH
echo "INPUT_VIDEO_FILE_URL = ${INPUT_VIDEO_FILE_URL}"
echo "POSITION_TIME_DURATION = ${POSITION_TIME_DURATION}"
echo "OUTPUT_THUMBS_FILE_NAME = ${OUTPUT_THUMBS_FILE_NAME}"
echo "OUTPUT_S3_PATH = ${OUTPUT_S3_PATH}"
#############################
echo "Copying ${OUTPUT_THUMBS_FILE_NAME} to S3 at ${OUTPUT_S3_PATH}/${OUTPUT_THUMBS_FILE_NAME} ..."
echo "Done (dummy bash script)."
在触发 Lambda 函数后检查 Cloudwatch 日志时,我看到 lambda 函数的日志正确记录了预期值。但是,容器化的工作任务日志没有显示作为环境变量覆盖传递的值。
这是 lambda 日志:
START RequestId: ab6e3b4e-f026-4d43-b137-b72dc76e83ad Version: $LATEST
2021-02-18T13:29:19.394Z ab6e3b4e-f026-4d43-b137-b72dc76e83ad INFO Starting task...
2021-02-18T13:29:19.433Z ab6e3b4e-f026-4d43-b137-b72dc76e83ad INFO srcBucket=vxx..x
2021-02-18T13:29:19.433Z ab6e3b4e-f026-4d43-b137-b72dc76e83ad INFO srcKey=small.mp4
2021-02-18T13:29:19.433Z ab6e3b4e-f026-4d43-b137-b72dc76e83ad INFO positionTimeDuration=00:03
2021-02-18T13:29:19.433Z ab6e3b4e-f026-4d43-b137-b72dc76e83ad INFO dstKey=transcoded-small.mp4
2021-02-18T13:29:19.434Z ab6e3b4e-f026-4d43-b137-b72dc76e83ad INFO destinationBucket=arn:aws:s3:::vyyy..y
END RequestId: ab6e3b4e-f026-4d43-b137-b72dc76e83ad
REPORT RequestId: ab6e3b4e-f026-4d43-b137-b72dc76e83ad Duration: 721.20 ms Billed Duration: 722 ms Memory Size: 128 MB Max Memory Used: 90 MB Init Duration: 447.57 ms
这是容器任务日志:
INPUT_VIDEO_FILE_URL =
POSITION_TIME_DURATION =
OUTPUT_THUMBS_FILE_NAME =
OUTPUT_S3_PATH =
Copying to S3 at / ...
Done (dummy bash script).
我做错了什么?
答案 0 :(得分:1)
查看 AWS JavaScript SDK 中的示例,我相信您需要在 name
定义中添加一个 containerOverrides
属性,以匹配容器名称:
"overrides": {
"containerOverrides": [
{
"name": "<this-name-should-match-the-container-name>",
"environment": [
{
"name": "INPUT_VIDEO_FILE_URL",
"value": srcKey
},
{
"name": "POSITION_TIME_DURATION",
"value": positionTimeDuration
},
{
"name":"OUTPUT_THUMBS_FILE_NAME",
"value": dstKey
},
{
"name":"OUTPUT_S3_PATH",
"value": destinationBucket
}
]
}
]
}
<块引用>
name —(字符串)接收覆盖的容器的名称。 如果指定了任何覆盖,则此参数是必需的。