【发布时间】:2021-12-27 17:37:38
【问题描述】:
我正在构建一个应用程序,我需要从 lambda 动态生成 Dockerfile,然后将其压缩为 tar.gz 文件并上传到 S3,所有这些都来自 lambda 函数。但是,我从 S3 收到以下错误:
"Error: NotImplemented: A header you provided implies functionality that is not implemented"
这是我的代码:
const tar = require("tar");
const fs = require("fs");
const { S3Client, PutObjectCommand } = require("@aws-sdk/client-s3");
const { PassThrough } = require("stream");
const buildDockerFile = {
stock: async (repository, tag, repositoryId) => {
const input = `FROM ${repository}:${tag}`;
const pass = new PassThrough();
fs.writeFileSync("/tmp/Dockerfile", input);
tar.c({ gzip: true }, ["/tmp/Dockerfile"]).pipe(pass);
const params = {
Body: pass,
Bucket: process.env.DOCKER_IMAGES_BUCKET,
Key: `${repositoryId}/${tag}/build-context.tar.gz`,
};
await s3.send(new PutObjectCommand(params));
}
};
我正在使用第三方库 node-tar 创建 tar.gz 文件,并且我正在使用 lambda 临时存储。我将非常感谢您对此事的帮助。
【问题讨论】:
-
您需要流式传输吗?您是否可以简单地将(微小的)Dockerfile tar/gz 到 Lambda /tmp 文件系统上,然后从那里定期将文件上传到 S3?并不是说解决流媒体问题没有价值,而是这里的主要目标。
-
我尝试将 tar/gz 文件也保存到 /tmp 文件夹并创建读取流并传递给 S3。文件已上传,但由于某种原因已损坏。
-
只在参数中使用
Body: fs.readFileSync('/tmp/build-context.tar.gz')?
标签: node.js amazon-web-services amazon-s3 aws-lambda compression