Can't trigger AWS Lambda S3 trigger using localstack?

Viewed 734

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?

0 Answers
Related