AWS Lambdaで作成した/tmp/ディレクトリのファイルをS3にファイルを保存する

AWS Lambdaで作成した/tmp/ディレクトリのファイルをS3にファイルを保存する

Lambdaで/tmp配下に保存したファイルをS3にputしてみます。Lambda処理内であれば/tmp配下が使えます。

const aws = require("aws-sdk");
const fs = require('fs');
const s3 = new aws.S3({'region':'us-east-2'});

exports.handler = (event, context, callback) => {
  const path = '/tmp/' + (new Date()).getTime() + '.txt'; // タイムスタンプ.txt
  fs.writeFileSync(path, "aaaa", 'utf-8'); // /tmp配下に保存

  const config = {
    Bucket: "my-test-cc",
    Key: "sample.txt",
    ContentType: "text/comma-separated-values; charset=utf-8" // CSVのUTF-8でS3へ保存する
    // ACL: 'public-read-write', // コメントアウトしてもputされる
    Body: fs.readFileSync(path, 'utf-8') // /tmp配下のファイルから読み取り
  };

  s3.putObject(config, function(err, data) {
    if (err) {
      console.log(err);
      context.fail('upload failed.');
    }
    context.succeed('upload success.');
  });
};

putObjectメソッドのコールバック関数がないと作成されずに処理が終わってしまうので、コールバック関数は必須です。

またIAMでS3にPUTする権限が必要です。(試すだけならFullAccessでも良いと思います)

ファイルが作成されていることが確認できます。

AWS Lambdaで作成した/tmp/ディレクトリのファイルをS3にファイルを保存する

Content-Typeの確認方法

S3へ保存する際にメタデータを指定しました。これはS3のファイルのプロパティから確認できます。

ファイルをクリックし、「プロパティ」タブをクリックします。

AWS Lambdaで作成した/tmp/ディレクトリのファイルをS3にファイルを保存する

次に「メタデータ」をクリックします。

AWS Lambdaで作成した/tmp/ディレクトリのファイルをS3にファイルを保存する

ファイルアップロード時のContent-Typeが指定されているのが確認できます。

コメント

タイトルとURLをコピーしました