跳至主要内容

[AWS] Lambda

keywords: aws, s3, lambda

使用 Node.js @ AWS Docs

部署(Deploy)

# ./deploy.sh

rm tmp/*

# 將專案打包成 zip
zip -9 -r function.zip . -x '*.git*' '*.vscode*' 'node_modules/@ffmpeg-installer/darwin-x64/*'

echo "Uploading to AWS lambda ..."

# 上傳 AWS Lambda
aws lambda update-function-code --function-name extractAudioToGCS --zip-file fileb://function.zip

# 移除壓縮檔
rm function.zip

本地執行 Lambda

過時內容

以下程式碼使用的是 AWS SDK for JavaScript v2aws-sdk),該版本已於 2023 年 9 月進入維護模式(maintenance mode),不再新增功能,並預計未來停止支援。建議改用 AWS SDK for JavaScript v3@aws-sdk/client-lambda),v3 採用模組化架構,支援 Tree-shaking,並使用 Promise-based API。

// AWS SDK v3 範例
import { LambdaClient, InvokeCommand } from '@aws-sdk/client-lambda';

const client = new LambdaClient({ region: 'us-west-2' });
const command = new InvokeCommand({
FunctionName: 'afterVideoUploaded',
InvocationType: 'RequestResponse',
LogType: 'Tail',
Payload: JSON.stringify({ objectKeyOnS3: 'facevideo/...' }),
});
const response = await client.send(command);

參考:Migrating to AWS SDK v3

/* Invoke Lambda locally */
const lambda = new AWS.Lambda({
region: 'us-west-2',
});

var params = {
FunctionName: 'afterVideoUploaded',
InvocationType: 'RequestResponse',
LogType: 'Tail',
Payload: JSON.stringify({
objectKeyOnS3: 'facevideo/1566458780000bQySkm8h_video.webm',
}),
};

lambda.invoke(params, function (err, data) {
if (err) {
console.log(err, err.stack);
} else {
console.log(data);
}
});