Lambda(Node.js)からS3のファイルにアクセスする連携方法

Lambda(Node.js)からS3のファイルにアクセスする方法です。

S3とは単なるファイルストレージです。ウィンドウズのエクスプローラと同じでC:\a\b\cみたいな構造でファイルなどを置くことができます。

S3にバケットを作成します。Cドライブみたいなものとイメージして差し支えないと思います。

Lambda(Node.js)からS3のファイルにアクセスする連携方法

「バケットを作成する」をクリックします。

Lambda(Node.js)からS3のファイルにアクセスする連携方法

ここでは、「sde」というバケットを作成しました。

sdeにアクセスすると、フォルダの作成ができますので作成してみます。

Lambda(Node.js)からS3のファイルにアクセスする連携方法

ここでは「a」というフォルダを作成しました。さらにa/b/cというようにフォルダを作成します。

Lambda(Node.js)からS3のファイルにアクセスする連携方法

これで、sdeというバケットにa/b/cというフォルダ構造を作成することができました。

この配下にJSONオブジェクトが定義してある.jsonファイルを配置してみます。

「アップロード」をクリックします。

Lambda(Node.js)からS3のファイルにアクセスする連携方法

ローカルにあるファイルをこのウィンドウにドラッグアンドドロップします。

Lambda(Node.js)からS3のファイルにアクセスする連携方法

ファイルを置くと上記のようになるので「次へ」をクリックします。

Lambda(Node.js)からS3のファイルにアクセスする連携方法

そのまま「次へ」をクリックします。

Lambda(Node.js)からS3のファイルにアクセスする連携方法

「次へ」をクリックします。

Lambda(Node.js)からS3のファイルにアクセスする連携方法

「アップロード」をクリックします。

Lambda(Node.js)からS3のファイルにアクセスする連携方法

これで、sdeというバケットのa/b/cフォルダ配下にsample.jsonをアップロードすることができました。

次はlambdaからs3ファイルへアクセスする例です。

const AWS = require('aws-sdk');
const s3 = new AWS.S3({'region':'ap-northeast-1'});

exports.handler = (event, context, callback) => {
  let params = {
    'Bucket': 'sde',
    'Prefix': 'a/b/c'
  }
  s3.listObjectsV2(params, function(err, data) {
    data.Contents.forEach(function(elem){
      console.log(elem.Key);
    });
    response = data.Contents;
    callback(null, response);
  });
};

バケットsdeの/a/b/c/配下のjsonファイルだけ取得できると思ったのですが、フォルダが取れて、さらにそのフォルダ内のファイルが取れてきてしまいます。

[
  {
    "Key": "a/b/c/",
    "LastModified": "2017-12-03T00:06:15.000Z",
    "ETag": "\"d41d8cd98f00b204e9432298ecf8427e\"",
    "Size": 0,
    "StorageClass": "STANDARD"
  },
  {
    "Key": "a/b/c/sample.json",
    "LastModified": "2017-12-03T00:19:39.000Z",
    "ETag": "\"593902c4008cdb4c567342badee01680\"",
    "Size": 41,
    "StorageClass": "STANDARD"
  }
]

フォルダ配下のファイルだけ取得したい場合はStartAfterを指定する

Contents.Keyにフォルダが取れてきてしまうわけですが不要だ、という場合はStartAfterを指定します。StartAfterはAWS S3はこの指定されたキーの後のリストを取得します。

const AWS = require('aws-sdk');
const S3 = new AWS.S3({'region':'us-east-1'});

exports.handler = (event, context, callback) => {
  let params = {
    'Bucket': 'sde',
    'Prefix': 'a/b/c/',
    'StartAfter':'a/b/c/' // a/b/c/配下だけを取得する
  }
  S3.listObjectsV2(params, function(err, data) {
    data.Contents.forEach(function(elem){
      console.log(elem.Key);
    });
    response = data.Contents;
    callback(null, response);
  });
};

結果は以下のようにファイルのフルパスのみ取得されます。

[
  {
    "Key": "a/b/c/sample.json",
    "LastModified": "2017-12-03T00:19:39.000Z",
    "ETag": "\"593902c4008cdb4c200892badee01680\"",
    "Size": 41,
    "StorageClass": "STANDARD"
  }
]

参考サイト

スポンサーリンク
  • このエントリーをはてなブックマークに追加
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA