1- # This module creates Kinesis Firehose service (optionally), SQS, lambda function OXBOW
1+ # This module creates SQS, lambda function OXBOW
22# to receive data and convert it into parquet then Delta log is added by Oxbow lambda
33data "aws_caller_identity" "current" {}
44data "aws_region" "current" {}
55
66locals {
7- enable_aws_glue_catalog_table = var. enable_aws_glue_catalog_table
8- enable_kinesis_firehose_delivery_stream = var. enable_kinesis_firehose_delivery_stream
9- enable_bucket_notification = var. enable_bucket_notification
10- enable_group_events = var. enable_group_events
7+ enable_aws_glue_catalog_table = var. enable_aws_glue_catalog_table
8+ enable_bucket_notification = var. enable_bucket_notification
9+ enable_group_events = var. enable_group_events
1110}
1211
1312
@@ -41,43 +40,6 @@ resource "aws_glue_catalog_table" "this_glue_table" {
4140 }
4241}
4342
44- resource "aws_kinesis_firehose_delivery_stream" "this_kinesis" {
45- count = local. enable_kinesis_firehose_delivery_stream ? 1 : 0
46- name = var. kinesis_delivery_stream_name
47- destination = " extended_s3"
48- extended_s3_configuration {
49- buffering_size = 128
50- role_arn = aws_iam_role. this_iam_role_lambda_kinesis . arn
51- bucket_arn = var. warehouse_bucket_arn
52- error_output_prefix = var. kinesis_s3_errors_prefix
53- prefix = var. kinesis_s3_prefix
54-
55- cloudwatch_logging_options {
56- enabled = true
57- log_group_name = " /aws/kinesisfirehose/${ var . kinesis_delivery_stream_name } "
58- log_stream_name = " DestinationDelivery"
59- }
60- data_format_conversion_configuration {
61- input_format_configuration {
62- deserializer {
63- open_x_json_ser_de {}
64- }
65- }
66- output_format_configuration {
67- serializer {
68- parquet_ser_de {}
69- }
70- }
71- schema_configuration {
72- database_name = var. glue_database_name
73- role_arn = aws_iam_role. this_iam_role_lambda_kinesis . arn
74- table_name = var. glue_table_name
75- region = " us-east-2"
76- }
77- }
78- }
79- tags = var. tags
80- }
8143locals {
8244 oxbow_lambda_unwrap_sns_event = var. enable_group_events == true ? {} : var. sns_topic_arn == " " ? {} : { UNWRAP_SNS_ENVELOPE = true }
8345 group_eventlambda_unwrap_sns_event = var. sns_topic_arn == " " ? {} : { UNWRAP_SNS_ENVELOPE = true }
@@ -91,7 +53,7 @@ resource "aws_lambda_function" "this_lambda" {
9153 s3_key = var. lambda_s3_key
9254 s3_bucket = var. lambda_s3_bucket
9355 function_name = var. lambda_function_name
94- role = aws_iam_role. this_iam_role_lambda_kinesis . arn
56+ role = aws_iam_role. oxbow_lambda_role . arn
9557 handler = " provided"
9658 runtime = " provided.al2023"
9759 memory_size = var. lambda_memory_size
@@ -119,7 +81,7 @@ resource "aws_lambda_function" "group_events_lambda" {
11981 s3_key = var. events_lambda_s3_key
12082 s3_bucket = var. events_lambda_s3_bucket
12183 function_name = var. events_lambda_function_name
122- role = aws_iam_role. this_iam_role_lambda_kinesis . arn
84+ role = aws_iam_role. oxbow_lambda_role . arn
12385 handler = " provided"
12486 runtime = " provided.al2023"
12587
@@ -328,11 +290,8 @@ data "aws_iam_policy_document" "this_services_assume_role" {
328290 statement {
329291 effect = " Allow"
330292 principals {
331- type = " Service"
332- identifiers = concat (
333- [" lambda.amazonaws.com" ],
334- local. enable_kinesis_firehose_delivery_stream ? [" firehose.amazonaws.com" ] : []
335- )
293+ type = " Service"
294+ identifiers = [" lambda.amazonaws.com" ]
336295 }
337296 actions = [
338297 " sts:AssumeRole" ,
@@ -462,67 +421,11 @@ data "aws_iam_policy_document" "this_dead_letter_queue_policy" {
462421 }
463422}
464423
424+ resource "aws_iam_role" "oxbow_lambda_role" {
425+ name = var. oxbow_lambda_role_name
426+ assume_role_policy = data. aws_iam_policy_document . this_services_assume_role . json
427+ managed_policy_arns = [aws_iam_policy . this_lambda_permissions . arn ]
465428
466- data "aws_iam_policy_document" "this_kinesis_policy_data" {
467- count = local. enable_kinesis_firehose_delivery_stream ? 1 : 0
468- statement {
469- sid = " GlueAccess"
470- effect = " Allow"
471- actions = [
472- " glue:GetTable" ,
473- " glue:GetTableVersion" ,
474- " glue:GetTableVersions" ,
475- ]
476- resources = [
477- " arn:aws:glue:us-east-2:${ data . aws_caller_identity . current . account_id } :catalog" ,
478- " arn:aws:glue:us-east-2:${ data . aws_caller_identity . current . account_id } :database/${ var . glue_database_name } " ,
479- " arn:aws:glue:us-east-2:${ data . aws_caller_identity . current . account_id } :table/${ var . glue_database_name } /${ var . glue_table_name } "
480- ]
481- }
482- statement {
483- sid = " S3Access"
484- effect = " Allow"
485- actions = [
486- " s3:AbortMultipartUpload" ,
487- " s3:GetBucketLocation" ,
488- " s3:GetObject" ,
489- " s3:ListBucket" ,
490- " s3:ListBucketMultipartUploads" ,
491- " s3:PutObject"
492- ]
493- resources = [
494- " ${ var . warehouse_bucket_arn } /${ var . s3_path } " ,
495- " ${ var . warehouse_bucket_arn } /${ var . s3_path } /*"
496- ]
497- }
498- statement {
499- sid = " LogsAccess"
500- effect = " Allow"
501- actions = [
502- " logs:PutLogEvents"
503- ]
504- resources = [
505- " arn:aws:logs:us-east-2:${ data . aws_caller_identity . current . account_id } :log-group:/aws/kinesisfirehose/${ var . kinesis_delivery_stream_name } :log-stream:*"
506- ]
507- }
508- }
509-
510- resource "aws_iam_policy" "this_kinesis_policy" {
511- count = local. enable_kinesis_firehose_delivery_stream ? 1 : 0
512- name = var. kinesis_policy_name
513- description = var. kinesis_policy_description
514- policy = data. aws_iam_policy_document . this_kinesis_policy_data [0 ]. json
515- tags = var. tags
516- }
517-
518-
519- resource "aws_iam_role" "this_iam_role_lambda_kinesis" {
520- name = var. lambda_kinesis_role_name
521- assume_role_policy = data. aws_iam_policy_document . this_services_assume_role . json
522- managed_policy_arns = concat (
523- local. enable_kinesis_firehose_delivery_stream ? [aws_iam_policy . this_kinesis_policy [0 ]. arn ] : [],
524- [aws_iam_policy . this_lambda_permissions . arn ]
525- )
526429 tags = var. tags
527430}
528431
0 commit comments