VPC Lambda(node.js)からS3のオブジェクトをVPCエンドポイント経由で取得する – AWS SDK for JavaScript v3

VPC Lambda(node.js)からS3のオブジェクトをVPCエンドポイント経由で取得する – AWS SDK for JavaScript v3

Serverless LambdaからS3へのアクセスは「Lambda(node.js)からS3のオブジェクトをGetObjectCommandで取得する – AWS SDK for JavaScript v3」を参照ください。

VPC Lambda(プライベートサブネット)からNAT Gateway経由でS3へのアクセスは「VPC Lambda(node.js)からS3のオブジェクトをNAT Gateway経由で取得する – AWS SDK for JavaScript v3」を参照ください。

エンドポイント作成

VPC LambdaからS3へアクセスするにはエンドポイントを作成する必要があります。

サービス名 タイプ
com.amazonaws.ap-northeast-1.s3 Gateway
  • VPC Lambdaと同一のVPCにエンドポイント作成する
  • ルートテーブルはインターネットゲートウェイ設定がされていないルートテーブルを選択する

プロジェクト作成

プロジェクト作成します。

npm init -y
npm i @aws-sdk/client-s3
touch index.js

package.json編集

{
  "name": "vpclambda-s3-v3",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "type": "module", // ★この1行追加
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@aws-sdk/client-s3": "^3.181.0"
  }
}

Lambda(node.js v16)

ソースは以下の通りです。

import {S3Client, GetObjectCommand} from '@aws-sdk/client-s3'

export async function handler(event, context) {
  const input = {
    Bucket: '<バケット名>',
    Key: 'tmp/hoge.json' // オブジェクトキー
  }
  const client = new S3Client({
    region: 'ap-northeast-1'
  })
  const command = new GetObjectCommand(input)
  const data = await client.send(command)
  const bodyContents = await streamToString(data.Body)
  console.log(bodyContents) // 文字列で返ってくる
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    }
    return response;
}

async function streamToString(stream) {
  return new Promise((resolve, reject) => {
      const chunks = [];
      stream.on('data', (chunk) => chunks.push(chunk));
      stream.on('error', reject);
      stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
  });
}

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

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