From e3bcf1b12b405a486d5cf500dc33fc768f371723 Mon Sep 17 00:00:00 2001 From: Phil Jory Date: Wed, 25 Sep 2019 17:56:29 +0200 Subject: [PATCH] Add new lambda scripts for shared vpc + sns --- apps/lambda_function_sns_shared_vpc/README.md | 49 +++++++ .../cloudwatch.tf | 18 +++ apps/lambda_function_sns_shared_vpc/lambda.tf | 133 ++++++++++++++++++ apps/lambda_function_sns_shared_vpc/locals.tf | 12 ++ apps/lambda_function_sns_shared_vpc/main.tf | 10 ++ .../lambda_function_sns_shared_vpc/outputs.tf | 17 +++ apps/lambda_function_sns_shared_vpc/sns.tf | 42 ++++++ apps/lambda_function_sns_shared_vpc/sqs.tf | 31 ++++ .../variables.tf | 78 ++++++++++ 9 files changed, 390 insertions(+) create mode 100644 apps/lambda_function_sns_shared_vpc/README.md create mode 100644 apps/lambda_function_sns_shared_vpc/cloudwatch.tf create mode 100644 apps/lambda_function_sns_shared_vpc/lambda.tf create mode 100644 apps/lambda_function_sns_shared_vpc/locals.tf create mode 100644 apps/lambda_function_sns_shared_vpc/main.tf create mode 100644 apps/lambda_function_sns_shared_vpc/outputs.tf create mode 100644 apps/lambda_function_sns_shared_vpc/sns.tf create mode 100644 apps/lambda_function_sns_shared_vpc/sqs.tf create mode 100644 apps/lambda_function_sns_shared_vpc/variables.tf diff --git a/apps/lambda_function_sns_shared_vpc/README.md b/apps/lambda_function_sns_shared_vpc/README.md new file mode 100644 index 00000000..ae65edcc --- /dev/null +++ b/apps/lambda_function_sns_shared_vpc/README.md @@ -0,0 +1,49 @@ +# Description + +An example terraform module to build simple application as aws lambda function triggered by SNS - hosted ont eh shared VPC. + +## Code Example + +```hcl-terraform + +//CustomerSubscription.EmailChanged +module "lambda_app" { + source = "git@github.com:albumprinter/eops_tf_modules.git//apps/lambda_function_sns?ref=v0.17.10" # for eg. {TAG_VERSION} = v0.17.10 + app_name = "${var.lambda_name}" + description = "Lambda function to process SNS" + handler = "Lambda::Lambda.Handler::Handle" + environment = "${var.environment}" + runtime = "dotnetcore2.1" + memory_size = "${var.memory}" + timeout = "30" // optional + tags_team = "WATSON" + lambda_bucket_name = "${var.lambda_bucket_name}" + lambda_sns_subscription_arn = "arn:aws:sns:eu-west-1:179698508378:Albumprinter-Authentication-Messaging-Messages-V1-EmailChanged" + variables = { + dummy = "" + } + iam_policy_document = "${data.aws_iam_policy_document.policy.json}" +} + +data "aws_iam_policy_document" "policy" { + statement { + actions = [ + "logs:CreateLogStream", + "logs:DescribeLogStreams", + "logs:PutLogEvents", + "logs:GetLogEvents" + ] + resources = ["arn:aws:logs:${var.region}:${data.aws_caller_identity.current.account_id}:log-group:/aws/lambda/${var.lambda_name}:*"] + } + statement { + actions = [ + "ec2:CreateNetworkInterface", + "ec2:DescribeNetworkInterfaces", + "ec2:DeleteNetworkInterface" + ] + resources = ["arn:aws:ec2:${var.region}:*"] + } +} + + +``` diff --git a/apps/lambda_function_sns_shared_vpc/cloudwatch.tf b/apps/lambda_function_sns_shared_vpc/cloudwatch.tf new file mode 100644 index 00000000..dd334ce8 --- /dev/null +++ b/apps/lambda_function_sns_shared_vpc/cloudwatch.tf @@ -0,0 +1,18 @@ +module "lambda_app_cloudwatch" { + source = "../../apps/cloudwatch_lambda" + app_name = "${var.app_name}" + log_group_name = "/aws/lambda/${var.app_name}" + alarm_threshold = "${var.lambda_memory_alert_threshold}" + alarm_action_arn = "${var.alarm_action_arn}" + environment = "${var.environment}" + tags_team = "${var.tags_team}" + tags_domain = "${var.tags_domain}" + tags_purpose = "${var.tags_purpose}" + tags_cost_center = "${var.tags_cost_center}" + description = "${var.description}" + retention_days = "${var.retention_days}" + enable_cloudwatch_alarms = "${var.enable_cloudwatch_alarms}" + providers = { + aws = "aws" + } +} \ No newline at end of file diff --git a/apps/lambda_function_sns_shared_vpc/lambda.tf b/apps/lambda_function_sns_shared_vpc/lambda.tf new file mode 100644 index 00000000..a8312fe7 --- /dev/null +++ b/apps/lambda_function_sns_shared_vpc/lambda.tf @@ -0,0 +1,133 @@ +module "lambda_s3_bucket_object" { + source = "../../apps/lambda_s3_bucket_object" + lambda_bucket_name = "${var.lambda_bucket_name}" + s3_object_key = "builds/lambda/${var.app_name}/lambda.zip" + tags = "${local.tags}" + providers = { + aws = "aws" + } +} + + +resource "aws_iam_role" "iam_for_app" { + name = "${var.app_name}" + assume_role_policy = <