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'))); }); }

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント