Skip to content

Commit

Permalink
chore: add lambda to registry appflow events
Browse files Browse the repository at this point in the history
  • Loading branch information
ArthurMaverick committed Aug 31, 2023
1 parent d3434d3 commit 368ae9b
Show file tree
Hide file tree
Showing 10 changed files with 183 additions and 0 deletions.
Empty file.
Empty file.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/bash

set -e

cd module/lambdas/mapper-function/mapper
CGO_ENABLED=0
go build -tags lambda.norpc -o main ./main.go | jq -Rs '{"status": "success", "output": .}'
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
#=======================================================================================================================
# NETSUITE SYNC LAMBDA
#=======================================================================================================================
resource "aws_iam_role_policy" "lambda_policy" {
name = "lambda_policy"
role = aws_iam_role.iam_for_lambda.id

policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"s3:*",
"sqs:ChangeMessageVisibility",
"sqs:DeleteMessage",
"sqs:GetQueueAttributes",
"sqs:ReceiveMessage"
]
Effect = "Allow"
Resource = "*"
}
]
})
}
resource "aws_iam_role" "iam_for_lambda" {
name = "iam_for_lambda"

assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
}
]
}
EOF
}

data "aws_ssm_parameter" "ns_url" {
name = format("/%s/%s", upper(var.stage), "NS_URL")
}
data "aws_ssm_parameter" "ns_consumer_key" {
name = format("/%s/%s", upper(var.stage), "NS_CONSUMER_KEY")
}
data "aws_ssm_parameter" "ns_consumer_secret" {
name = format("/%s/%s", upper(var.stage), "NS_CONSUMER_SECRET")
}
data "aws_ssm_parameter" "ns_token_access" {
name = format("/%s/%s", upper(var.stage), "NS_TOKEN_ACCESS")
}
data "aws_ssm_parameter" "ns_token_secret" {
name = format("/%s/%s", upper(var.stage), "NS_TOKEN_SECRET")
}
data "aws_ssm_parameter" "ns_realm" {
name = format("/%s/%s", upper(var.stage), "NS_REALM")
}

data "external" "mapper" {
program = ["bash", "${path.module}/mapper/build.sh"]
}
data "archive_file" "lambda_function_payload" {
depends_on = [data.external.mapper]
type = "zip"
output_file_mode = "0666"
source_file = "${path.module}/mapper/main"
output_path = "${path.module}/mapper/main.zip"
}
resource "aws_lambda_function" "lambda" {
depends_on = [data.archive_file.lambda_function_payload]
filename = data.archive_file.lambda_function_payload.output_path
function_name = "netsuit-sync"
description = "Netsuit sync lambda function"
handler = "main"
memory_size = 512
architectures = ["x86_64"]
reserved_concurrent_executions = 2
role = aws_iam_role.iam_for_lambda.arn
source_code_hash = filebase64sha256(data.archive_file.lambda_function_payload.output_path)
runtime = "go1.x"
timeout = 30

tracing_config {
mode = "Active"
}

timeouts {
create = "10m"
}

environment {
variables = {
NS_URL = data.aws_ssm_parameter.ns_url.value
NS_CONSUMER_KEY = data.aws_ssm_parameter.ns_consumer_key.value
NS_CONSUMER_SECRET = data.aws_ssm_parameter.ns_consumer_secret.value
NS_TOKEN_ACCESS = data.aws_ssm_parameter.ns_token_access.value
NS_TOKEN_SECRET = data.aws_ssm_parameter.ns_token_secret.value
NS_REALM = data.aws_ssm_parameter.ns_realm.value
}
}
}
resource "aws_lambda_event_source_mapping" "event_source_mapping" {
event_source_arn = var.sqs_queue_arn
enabled = true
function_name = aws_lambda_function.lambda.arn
batch_size = 1
maximum_batching_window_in_seconds = 1
scaling_config {
maximum_concurrency = 2
}
}
resource "aws_lambda_permission" "allow_sqs" {
statement_id = "AllowExecutionFromSQS"
action = "lambda:InvokeFunction"
principal = "sqs.amazonaws.com"
source_arn = var.sqs_queue_arn
function_name = aws_lambda_function.lambda.arn

}

Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
output "mapper_function_arn" {
description = "The ARN of the Lambda function arn"
value = aws_lambda_function.lambda.arn
}

output "mapper_function_name" {
description = "The name of the Lambda function name"
value = aws_lambda_function.lambda.function_name
}

output "mapper_function_id" {
description = "The ID of the Lambda function id"
value = aws_lambda_function.lambda.id
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module salesforce-events

go 1.19

require github.com/aws/aws-lambda-go v1.41.0 // indirect
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
github.com/aws/aws-lambda-go v1.41.0 h1:l/5fyVb6Ud9uYd411xdHZzSf2n86TakxzpvIoz7l+3Y=
github.com/aws/aws-lambda-go v1.41.0/go.mod h1:jwFe2KmMsHmffA1X2R09hH6lFzJQxzI8qK17ewzbQMM=
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package main

import (
"context"
"fmt"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)

func handler(ctx context.Context, event events.CloudWatchEvent) error {
fmt.Printf("Received Event: %v\n", event)
return nil
}

func main() {
lambda.Start(handler)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
variable "sqs_queue_arn" {
type = string
description = "SQS arn"
}

variable "stage" {
type = string
description = "Environment stage"
default = "preprod"
}

0 comments on commit 368ae9b

Please sign in to comment.