Skip to content

Commit

Permalink
feate: add service to register app status
Browse files Browse the repository at this point in the history
  • Loading branch information
ArthurMaverick committed Sep 1, 2023
1 parent e0f3d50 commit 307bcde
Show file tree
Hide file tree
Showing 20 changed files with 196 additions and 106 deletions.
121 changes: 82 additions & 39 deletions preprod/us-east-2/terraform/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -2,65 +2,108 @@ data "aws_caller_identity" "current" {}
data "aws_region" "current" {}

locals {
account_id = data.aws_caller_identity.current.account_id
region = data.aws_region.current.name
bucket_name_helper = format("%s-%s", var.prefix, local.account_id)
account_id = data.aws_caller_identity.current.account_id
region = data.aws_region.current.name
}

#=====================================================================================================================
# BUCKET VARIABLES
#=====================================================================================================================
locals {
bucket_name_helper = format("%s-%s", var.prefix, local.account_id)
land_zone_bucket_name = format("%s-land-zone", local.bucket_name_helper)
initial_zone_bucket_name = format("%s-initial-zone", local.bucket_name_helper)
intermediate_zone_bucket_name = format("%s-intermediate-zone", local.bucket_name_helper)
final_zone_bucket_name = format("%s-final-zone", local.bucket_name_helper)
glue_scripts_bucket_name = format("%s-glue-scripts", local.bucket_name_helper)
}
#=======================================================================================================================
# FUNCTIONS VARIABLES
#=======================================================================================================================
locals {
function_name_dlq_mapper = format("%s-%s", var.prefix, "dlq-mapper")
function_name_mapper = format("%s-%s", var.prefix, "mapper")
function_name_events_register = format("%s-%s", var.prefix, "events-register")
function_arn_events_register = format("arn:aws:lambda:%s:%s:function:%s", local.region, local.account_id, local.function_name_events_register)
}
#=======================================================================================================================
# QUEUE VARIABLES
#=======================================================================================================================
locals {
queue_name_dlq_mapper = format("%s-dlq-mapper-queue", var.prefix)
queue_name_mapper = format("%s-mapper-queue", var.prefix)
}
#=======================================================================================================================
# DATABASES RESOURCES
#=======================================================================================================================
module "databases" {
source = "./module/dynamodb/table"
table_name = "dead-letter-queue-mapper-table"
}

#=======================================================================================================================
# QUEUE RESOURCES
#=======================================================================================================================
module "queues" {
source = "./module/sqs"
dlq_mapper_queue_name = "${var.prefix}-dlq-mapper-queue"
mapper_queue_name = "${var.prefix}-mapper-queue"
s3_bucket_name = "${local.bucket_name_helper}-land-zone"
dlq_mapper_queue_name = local.queue_name_dlq_mapper
mapper_queue_name = local.queue_name_mapper
s3_bucket_name = local.land_zone_bucket_name
account_id = local.account_id
region = local.region
}

#=======================================================================================================================
# STORAGE RESOURCES
#=======================================================================================================================
module "storages" {
source = "./module/s3"
land_zone_queue_arn = module.queues.sqs_queue_arn
land_zone_layer_bucket_name = "${local.bucket_name_helper}-land-zone"
initial_layer_bucket_name = "${local.bucket_name_helper}-initial-zone"
intermediate_layer_bucket_name = "${local.bucket_name_helper}-intermediate-zone"
final_layer_bucket_name = "${local.bucket_name_helper}-final-zone"
glue_scripts_bucket_name = "${local.bucket_name_helper}-glue-scripts"
}

module "sl_ns_appflow" {
source = "./module/appflow"
bucket_name = module.storages.land_zone_bucket_name
land_zone_layer_bucket_name = local.land_zone_bucket_name
initial_layer_bucket_name = local.initial_zone_bucket_name
intermediate_layer_bucket_name = local.intermediate_zone_bucket_name
final_layer_bucket_name = local.final_zone_bucket_name
glue_scripts_bucket_name = local.glue_scripts_bucket_name
}

#=======================================================================================================================
# NOTIFICATION RESOURCES
#=======================================================================================================================
module "notifications" {
source = "./module/sns/topic"
sns_topic_name = "${var.prefix}-dlq-mapper-topic"
account_id = local.account_id
}

#=======================================================================================================================
# EVENTS RESOURCES
#=======================================================================================================================
module "events" {
source = "./module/eventbridge/rules"
is_enable = true
name = "salesforce-events"
lambda_function_arn = local.function_arn_events_register
}
#=======================================================================================================================
# FUNCTION RESOURCES
#=======================================================================================================================
module "functions" {
source = "./module/lambdas"
sqs_queue_arn = module.queues.sqs_queue_arn
dlq_sqs_queue_arn = module.queues.dlq_sqs_queue_arn
dlq_sns_topic_name = module.notifications.sns_topic_name[0]
dlq_dynamodb_table_name = module.databases.table_name[0]
stage = var.environment
source = "./module/lambdas"
stage = var.environment
# MAPPER FUNCTION
sqs_queue_arn = module.queues.sqs_queue_arn
function_name_mapper = local.function_name_mapper
# DLQ MAPPER FUNCTION
function_name_dlq_mapper = local.function_name_dlq_mapper
dlq_sqs_queue_arn = module.queues.dlq_sqs_queue_arn
dlq_sns_topic_name = module.notifications.sns_topic_name[0]
dlq_dynamodb_table_name = module.databases.table_name[0]
# EVENTS REGISTER FUNCTION
function_name_events_register = local.function_name_events_register
aws_cloudwatch_event_rule_arn = module.events.event_rule_arn[0]
}

#module "glue_job_inital_layer" {
# source = "./module/glue"
#}
#
#module "glue_job_intermediate_layer" {
# source = "./module/glue"
#}
#
#module "glue_job_final_layer" {
# source = "./module/glue"
#}

#=======================================================================================================================
# INGESTION RESOURCES
#=======================================================================================================================
module "sl_ns_appflow" {
source = "./module/appflow"
stage = var.environment
bucket_name = module.storages.land_zone_bucket_name
}
#arn:aws:appflow:us-east-2:124275528219:connectorprofile/SF-preprod
11 changes: 8 additions & 3 deletions preprod/us-east-2/terraform/module/appflow/main.tf
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
data "aws_ssm_parameter" "access_token" {
name = format("/%s/%s", upper(var.stage), "APPFLOW/ACCESS_TOKEN")
}
data "aws_ssm_parameter" "refresh_token" {
name = format("/%s/%s", upper(var.stage), "APPFLOW/REFRESH_TOKEN")
}
resource "aws_appflow_connector_profile" "salesforce_connector" {
name = "SF-preprod"
connector_type = "Salesforce"
Expand All @@ -6,8 +12,8 @@ resource "aws_appflow_connector_profile" "salesforce_connector" {
connector_profile_config {
connector_profile_credentials {
salesforce {
access_token = "00D7e00000GLQT9!ARAAQGCQdsXsg7DCHwUV8Oy0H3XeZbx.dJBEIyO63gH6P0IH1k3Q59GG.zLPMBlG675v8WBADt3EXBMdZwOXEQFIaIhxxtdg"
refresh_token = "5Aep8618SQ4Zf4OnQEPKSDLTI53QRccjkLE4fTxXje3DPjlZo6eVbIpoVVDufh6BYsn2KNSWE9.MZ6GBblaVmxQ"
access_token = data.aws_ssm_parameter.access_token.value
refresh_token = data.aws_ssm_parameter.refresh_token.value
}
}
connector_profile_properties {
Expand All @@ -18,7 +24,6 @@ resource "aws_appflow_connector_profile" "salesforce_connector" {
}
}
}

resource "aws_appflow_flow" "salesforce_to_s3" {
description = "ingest salesforce data to s3"
name = "salesforce_to_s3"
Expand Down
6 changes: 6 additions & 0 deletions preprod/us-east-2/terraform/module/appflow/variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@ variable "bucket_name" {
description = "The name of the bucket to create"
}

variable "stage" {
type = string
description = "The stage of the bucket to create"
default = null
}

variable "appflow_test_task_map" {
type = list(object({
source_fields = list(string)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ variable "attribute_values" {
name = string
type = string
}))

default = {
bath_id = {
name = "batchId"
Expand Down
4 changes: 2 additions & 2 deletions preprod/us-east-2/terraform/module/eventbridge/rules/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ resource "aws_cloudwatch_event_rule" "this" {

resource "aws_cloudwatch_event_target" "this" {
count = var.eventbridge_enabled ? 1 : 0
rule = aws_cloudwatch_event_rule.this.name
rule = aws_cloudwatch_event_rule.this[count.index].name
target_id = var.target_id
arn = var.lambda_fuction_arn
arn = var.lambda_function_arn
}

Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ output "event_rule_name" {

output "event_rule_arn" {
description = "The Amazon Resource Name (ARN) of the rule."
value = aws_cloudwatch_event_rule[*].this.arn
value = aws_cloudwatch_event_rule.this[*].arn
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ variable "event_pattern_source" {
default = ["aws.appflow"]
}

variable "lambda_fuction_arn" {
variable "lambda_function_arn" {
type = string
description = "Lambda Function ARN"
default = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ data "archive_file" "dql_mapper_build_zipper" {
resource "aws_lambda_function" "dlq_mapper_lambda" {
depends_on = [data.archive_file.dql_mapper_build_zipper]
filename = data.archive_file.dql_mapper_build_zipper.output_path
function_name = "dead-letter-queue-netsuit-sync"
function_name = var.function_name_dlq_mapper
description = "Dead Letter Queue lambda function for Netsuit-sync"
handler = "main"
memory_size = 512
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,10 @@ variable "dlq_dynamodb_table_name" {
type = string
description = "DLQ DynamoDB table"
default = null
}

variable "function_name_dlq_mapper" {
type = string
description = "Function Name"
default = null
}
26 changes: 18 additions & 8 deletions preprod/us-east-2/terraform/module/lambdas/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,27 @@
# DEAD LETTER QUEUE FOR NETSUITE SYNC LAMBDA
#=======================================================================================================================
module "dql_mapper_function" {
source = "./dlq-mapper-function"
dlq_sqs_queue_arn = var.dlq_sqs_queue_arn
dlq_sns_topic_name = var.dlq_sns_topic_name
dlq_dynamodb_table_name = var.dlq_dynamodb_table_name
source = "./dlq-mapper-function"
function_name_dlq_mapper = var.function_name_dlq_mapper
dlq_sqs_queue_arn = var.dlq_sqs_queue_arn
dlq_sns_topic_name = var.dlq_sns_topic_name
dlq_dynamodb_table_name = var.dlq_dynamodb_table_name
}

#=======================================================================================================================
# NETSUITE SYNC LAMBDA
#=======================================================================================================================
module "mapper_function" {
source = "./mapper-function"
sqs_queue_arn = var.sqs_queue_arn
stage = var.stage
source = "./mapper-function"
function_name_mapper = var.function_name_mapper
sqs_queue_arn = var.sqs_queue_arn
stage = var.stage
}
#=======================================================================================================================
# SALESFORCE EVENTS LAMBDA
#=======================================================================================================================
module "salesforce_events_function" {
source = "./salesforce-events-function"
function_name_events_register = var.function_name_events_register
aws_cloudwatch_event_rule_arn = var.aws_cloudwatch_event_rule_arn
dlq_dynamodb_table_name = var.dlq_dynamodb_table_name
}
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ data "archive_file" "lambda_function_payload" {
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"
function_name = var.function_name_mapper
description = "Netsuit sync lambda function"
handler = "main"
memory_size = 512
Expand Down
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,10 @@ variable "stage" {
type = string
description = "Environment stage"
default = "preprod"
}

variable "function_name_mapper" {
type = string
description = "Function Name"
default = null
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# SALESFORCE EVENTS LAMBDA
#=======================================================================================================================
resource "aws_iam_role_policy" "lambda_policy" {
name = "lambda_policy"
name = "lambda_policy-${var.function_name_events_register}"
role = aws_iam_role.iam_for_lambda.id

policy = jsonencode({
Expand All @@ -26,7 +26,7 @@ resource "aws_iam_role_policy" "lambda_policy" {
})
}
resource "aws_iam_role" "iam_for_lambda" {
name = "iam_for_lambda"
name = "iam_for_lambda-${var.function_name_events_register}"

assume_role_policy = <<EOF
{
Expand All @@ -45,20 +45,21 @@ resource "aws_iam_role" "iam_for_lambda" {
EOF
}

data "external" "mapper" {
data "external" "this" {
program = ["bash", "${path.module}/salesforce-events/build.sh"]
}
data "archive_file" "lambda_function_payload" {
depends_on = [data.external.mapper]
depends_on = [data.external.this]
type = "zip"
output_file_mode = "0666"
source_file = "${path.module}/salesforce-events/main"
output_path = "${path.module}/salesforce-events/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 = "salesforce-events"
function_name = var.function_name_events_register
description = "Lambda function to process salesforce events"
handler = "main"
memory_size = 512
Expand All @@ -76,24 +77,20 @@ resource "aws_lambda_function" "lambda" {
timeouts {
create = "10m"
}
}

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
environment {
variables = {
DYNAMODB_TABLE_NAME = var.dlq_dynamodb_table_name
}
}
}

resource "aws_lambda_permission" "eventbridge_lambda_permission" {
source_arn = var.aws_cloudwatch_event_rule_arn
function_name = aws_lambda_function.lambda.arn
statement_id = var.statement_id
action = var.action
function_name = var.function_name
principal = var.principal
action = var.action

}

Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

set -e

cd module/lambdas/salesforce-events/main
cd module/lambdas/salesforce-events-function/salesforce-events
CGO_ENABLED=0
go build -tags lambda.norpc -o main ./main.go | jq -Rs '{"status": "success", "output": .}'
Binary file not shown.
Binary file not shown.
Loading

0 comments on commit 307bcde

Please sign in to comment.