Reputation: 33
I am working with terraform, and I was wondering if there was a way to add triggers to a lambda function (e.g.:- a trigger when a S3 object). I know that we can add an event source mapping, but that is not what I am looking. Basically I want to know if I can include trigger functionality that is shown in the below image in my code Image shows lambda console with "add trigger" functionality highlighted
Upvotes: 3
Views: 817
Reputation: 853
You can configure directly in your terraform code the subscription to events from a lot of resources and integrate with multiple notifiers in AWS. This is example to add a trigger to a lambda based in a subscription event from SNS.
data "aws_autoscaling_groups" "groups_servers" {
depends_on = [
aws_autoscaling_group.servers_cluster_asg_masters,
aws_autoscaling_group.servers_cluster_asg_slaves
]
filter {
name = "auto-scaling-group"
values = "servers-masters-nodes"
}
filter {
name = "auto-scaling-group"
values = "servers-slave-nodes"
}
}
resource "aws_sns_topic" "sns_servers" {
name = "sns_servers"
}
resource "aws_autoscaling_notification" "new_instances_notifications_servers" {
group_names = data.aws_autoscaling_groups.groups_servers.names
notifications = [
"autoscaling:EC2_INSTANCE_LAUNCH"
]
topic_arn = aws_sns_topic.sns_servers.arn
}
resource "aws_sns_topic_subscription" "sns_servers_servers_subscription" {
depends_on = [
aws_lambda_function.servers-cluster-orchestator
]
topic_arn = aws_sns_topic.sns_servers.arn
protocol = "lambda"
endpoint = aws_lambda_function.servers-cluster-orchestator.arn
}
resource "aws_lambda_permission" "sns_permission_servers" {
depends_on = [
aws_lambda_function.servers-cluster-orchestator,
]
statement_id = "AllowExecutionFromSNS"
action = "lambda:InvokeFunction"
function_name = aws_lambda_function.servers-cluster-orchestator.function_name
principal = "sns.amazonaws.com"
source_arn = var.sns_servers_topic
}
resource "aws_lambda_function" "servers-cluster-orchestator" {
s3_bucket = "my-bucket"
s3_key = "my-lambda.zip"
function_name = "my-lambda"
role = aws_iam_role.iam_for_lambda_servers_cluster.arn
handler = "lambda_function.lambda_handler"
runtime = "python3.7"
timeout = "60"
}
Upvotes: 0
Reputation: 238747
I know that we can add an event source mapping, but that is not what I am looking
Event source mapping for SQS, DynamoDB and Kinesis is exactly what you are looking. What you are showing on the screenshot is just AWS Console representation of the Event source mapping for the 3 services.
Upvotes: 3