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(ES20xx),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^


コメント