My lambda function is not triggering while s3 events occur in localstack?
But it invokes when trigger it directly by using "sls invoke -f hello --stage local"
Help me to solve this issue? I have attched my handler.js and serverless.yml file
SERVERLESS.yml
service: ls-node
frameworkVersion: '2'
plugins:
- serverless-plugin-typescript
- serverless-localstack
- serverless-dotenv-plugin
- serverless-offline
provider:
name: aws
runtime: nodejs12.x
stage: ${opt:stage, 'development'}
region: us-east-1
profile: iamjai
iamRoleStatements:
- Effect: Allow
Action:
- s3:PutBucketNotification
- s3:GetObject
Resource: ["arn:aws:s3:::iamjai-dev/*"]
functions:
hello:
handler: handler.hello
events:
- s3:
bucket: iamjai-dev
events:
- s3:ObjectCreated:*
environment:
TEST_NAME: "iamjai"
TEST_MAIL: "jai@jai.com"
custom:
localstack:
stages:
- local
bucket: iamjai-dev
dotenv:
path: ../.env
basePath: ../
logging: false
# include:
# - CLIENT
# - DATE
handler.js
'use strict';
'use strict';
const AWS = require('aws-sdk');
const s3 = new AWS.S3({ accessKeyId: "1234", secretAccessKey: "5678",
endpoint: 'http://localhost:4566', s3ForcePathStyle: true, bucketName: "iamjai-dev" });
const csv=require('csvtojson')
module.exports.hello = async event => {
console.log("Executed!!!!!")
const Bucket = event.Records[0].s3.bucket.name;
const Key = event.Records[0].s3.object.key;
const data = await s3.getObject({ Bucket, Key }).promise();
const params = {
Bucket: Bucket,
Key: Key,
};
const stream = s3.getObject(params).createReadStream();
// convert csv file (stream) to JSON format data
const jsonArray = await csv().fromStream(stream);
console.log(JSON.stringify(stream))
console.log(jsonArray.length);
// console.log('NAME: ', process.env.NAME);
// console.log('EMAIL: ', process.env.MAIL);
console.log("Raw text:\n" + data.Body.toString('ascii'));
};
I need to trigger my lambda function when an file is uploaded in s3 bucket using localstack?