我正在构建一个应用程序,其中我需要从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临时存储。我将非常感谢在这件事上的一些帮助。
发布于 2021-11-17 07:58:24
几个小时后,我终于找到了解决问题的办法。亚马逊网络服务提供了一个库,在这种情况下真的很有帮助- @aws-sdk/lib-storage。
下面是我的代码的完整工作版本:
const { S3Client } = require("@aws-sdk/client-s3");
const { Upload } = require("@aws-sdk/lib-storage");
const { PassThrough } = require("stream");
const tar = require("tar");
const fs = require("fs");
const s3 = new S3Client();
const uploadToS3 = ({ repositoryId, tag }) => {
  const pass = new PassThrough();
  const target = {
    Bucket: process.env.DOCKER_IMAGES_BUCKET,
    Key: `${repositoryId}/${tag}/context.tar.gz`,
    Body: pass,
  };
  return {
    stream: pass,
    promise: new Upload({ client: s3, params: target }),
  };
};
const buildDockerFile = {
  stock: async (repository, tag, repositoryId) => {
    const input = `FROM ${repository}:${tag}`;
    const { stream, promise } = uploadToS3({ repositoryId, tag });
    fs.writeFileSync("/tmp/Dockerfile", input);
    tar
      .c(
        {
          gzip: true,
          sync: true,
          cwd: "/tmp",
        },
        ["Dockerfile"]
      )
      .pipe(stream);
    await promise.done();
  },
};我在这里发布这篇文章,只是为了防止其他人在压缩文件和S3上遇到同样的问题。
https://stackoverflow.com/questions/69992598
复制相似问题