2
votes

I am trying to create a lambda function from a CloudFormation template based on this example:

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-lambda.html

As can be seen from this link:

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html

there is no way to add a trigger for the lambda function (like a S3 upload trigger).

Is there a workaround to specify the trigger while writing the template?

5

5 Answers

2
votes

You can use cloudwatch rule to trigger your lambda function :

    AWSTemplateFormatVersion: '2010-09-09'
    Resources:
      MyCloudWatchRule:
        Type: "AWS::Events::Rule"
        Properties:
          Description: "Rule to trigger lambda"
          Name: "MyCloudWatchRule"
          EventPattern: <Provide Valid JSON Event pattern>
          State: "ENABLED"
          Targets:
            - Arn: "arn:aws:lambda:us-west-2:12345678:function:MyLambdaFunction"
              Id: "1234567-acvd-awse-kllpk-123456789"

Ref :

1
votes

It's been a while so I imagine you've solved the problem, but I'll put in my 2 cents to help others.

It's best to use SAM (Serverless Application Model) for this kind of things. So use AWS::Serverless::Function instead of AWS::Lambda::Function

https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html

In there, you can specify an EventSource which accepts the following possible values:

  • S3
  • SNS
  • Kinesis
  • DynamoDB
  • SQS
  • Api
  • Schedule
  • CloudWatchEvent
  • CloudWatchLogs
  • IoTRule
  • AlexaSkill
  • Cognito
  • HttpApi

SAM does the rest of the work. Follow this guide for the rest of the details: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-deploying.html

1
votes
1
votes

Lambda function can be triggered by several AWS resources such as S3, SNS, SQS, API, etc. Checkout for the full list at AWS docs

I suggest you use Altostra Designer, which let you create and configure Lambda Function super quick and also choose what will trigger it.

0
votes

You need to add a NotificationConfiguration to the S3 bucket definition. However, this will lead to a circular dependency where the S3 bucket refers to the Lambda function and the Lambda function refers to the S3 bucket.

To avoid this circular dependency, create all resources (including the S3 bucket and the Lambda function) without specifying the notification configuration. Then, after you have created your stack, update the template with a notification configuration and then update the stack.