Skip to content

Commit 613607d

Browse files
jim80netQingping Hou
authored andcommitted
chore: use datadog cloudfront method to deploy Forwarder
COREINF-1665
1 parent 571a517 commit 613607d

File tree

6 files changed

+16
-111
lines changed

6 files changed

+16
-111
lines changed

files/aws-dd-forwarder-3.5.0.zip

-23.9 KB
Binary file not shown.

logshipping.tf

Lines changed: 9 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -1,106 +1,11 @@
1-
resource "aws_iam_policy" "datadog-logshipping" {
2-
name = "${local.stack_prefix}datadog-logshipping-integration"
3-
path = "/"
4-
description = "This IAM policy allows for logshipping aws logs. See https://docs.datadoghq.com/integrations/amazon_web_services/?tab=allpermissions#manually-setup-triggers"
5-
6-
policy = <<EOF
7-
{
8-
"Version": "2012-10-17",
9-
"Statement": [
10-
{
11-
"Action": [
12-
"cloudfront:GetDistributionConfig",
13-
"cloudfront:ListDistributions",
14-
"elasticloadbalancing:DescribeLoadBalancers",
15-
"elasticloadbalancing:DescribeLoadBalancerAttributes",
16-
"lambda:AddPermission",
17-
"lambda:GetPolicy",
18-
"lambda:RemovePermission",
19-
"redshift:DescribeClusters",
20-
"redshift:DescribeLoggingStatus",
21-
"s3:GetBucketLogging",
22-
"s3:GetBucketLocation",
23-
"s3:GetBucketNotification",
24-
"s3:ListAllMyBuckets",
25-
"s3:PutBucketNotification",
26-
"s3:GetObject",
27-
"logs:PutSubscriptionFilter",
28-
"logs:DeleteSubscriptionFilter",
29-
"logs:DescribeSubscriptionFilters"
30-
],
31-
"Resource": "*",
32-
"Effect": "Allow"
33-
}
34-
]
35-
}
36-
EOF
37-
}
38-
39-
# Create a lambda function that will export CT logs to DD
40-
resource "aws_iam_role" "dd-log-lambda" {
41-
name = "${local.stack_prefix}dd_log_lambda"
42-
43-
assume_role_policy = <<EOF
44-
{
45-
"Version": "2012-10-17",
46-
"Statement": [
47-
{
48-
"Action": "sts:AssumeRole",
49-
"Principal": {
50-
"Service": "lambda.amazonaws.com"
51-
},
52-
"Effect": "Allow",
53-
"Sid": ""
54-
}
55-
]
56-
}
57-
EOF
58-
59-
tags = local.default_tags
60-
}
61-
62-
resource "aws_iam_role_policy_attachment" "datadog-logshipping-lambda-attach" {
63-
role = aws_iam_role.dd-log-lambda.name
64-
policy_arn = aws_iam_policy.datadog-logshipping.arn
65-
}
66-
67-
resource "aws_iam_role_policy_attachment" "datadog-logshipping-lambda-attach2" {
68-
role = aws_iam_role.dd-log-lambda.name
69-
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
70-
}
71-
72-
resource "aws_iam_role_policy_attachment" "datadog-logshipping-lambda-attach3" {
73-
role = aws_iam_role.dd-log-lambda.name
74-
policy_arn = "arn:aws:iam::aws:policy/AWSXrayWriteOnlyAccess"
75-
}
76-
77-
resource "aws_lambda_function" "dd-log" {
78-
filename = "${path.module}/files/aws-dd-forwarder-3.5.0.zip"
79-
function_name = "${local.stack_prefix}DatadogLambdaFunction"
80-
role = aws_iam_role.dd-log-lambda.arn
81-
handler = "lambda_function.lambda_handler"
82-
description = "This lambda function will export logs to our orgs Datadog events"
83-
84-
source_code_hash = filebase64sha256("${path.module}/files/aws-dd-forwarder-3.5.0.zip")
85-
86-
runtime = "python3.7"
87-
memory_size = "1024"
88-
timeout = "120"
89-
90-
# This brings in requirements for the lambda to run (imports modules)
91-
# This allows the dd_log_lambda.zip to be very small https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html
92-
# This specific layer is: https://github.com/DataDog/datadog-lambda-layer-python
93-
layers = [
94-
"arn:aws:lambda:${var.aws_region}:464622532012:layer:Datadog-Python27:11",
95-
"arn:aws:lambda:${var.aws_region}:464622532012:layer:Datadog-Trace-Forwarder-Python37:5"
96-
]
97-
98-
environment {
99-
variables = {
100-
DD_API_KEY = var.datadog_api_key
101-
DD_ENHANCED_METRICS = "false"
102-
DD_TAGS = "namespace:${var.namespace},env:${var.env}"
103-
EXCLUDE_AT_MATCH = var.log_exclude_at_match
104-
}
1+
resource "aws_cloudformation_stack" "datadog-forwarder" {
2+
name = "datadog-forwarder"
3+
capabilities = ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
4+
parameters = {
5+
DdApiKey = var.datadog_api_key
6+
DdTags = "namespace:${var.namespace},env:${var.env}"
7+
ExcludeAtMatch = var.log_exclude_at_match
8+
FunctionName = "datadog-forwarder"
1059
}
10+
template_url = "https://datadog-cloudformation-template.s3.amazonaws.com/aws/forwarder/latest.yaml"
10611
}

logshipping_cloudtrail.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ resource "aws_lambda_permission" "allow-ctbucket-trigger" {
33
count = var.cloudtrail_bucket_id != "" ? 1 : 0
44
statement_id = "AllowExecutionFromCTBucket"
55
action = "lambda:InvokeFunction"
6-
function_name = aws_lambda_function.dd-log.arn
6+
function_name = aws_cloudformation_stack.datadog-forwarder.outputs.DatadogForwarderArn
77
principal = "s3.amazonaws.com"
88
source_arn = var.cloudtrail_bucket_arn
99
}
@@ -14,7 +14,7 @@ resource "aws_s3_bucket_notification" "ctbucket-notification-dd-log" {
1414
bucket = var.cloudtrail_bucket_id
1515

1616
lambda_function {
17-
lambda_function_arn = aws_lambda_function.dd-log.arn
17+
lambda_function_arn = aws_cloudformation_stack.datadog-forwarder.outputs.DatadogForwarderArn
1818
events = ["s3:ObjectCreated:*"]
1919
}
2020
}

logshipping_cloudwatch_log.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ resource "aws_cloudwatch_log_subscription_filter" "test_lambdafunction_logfilter
33
name = "${var.cloudwatch_log_groups[count.index]}-filter"
44
log_group_name = var.cloudwatch_log_groups[count.index]
55
filter_pattern = ""
6-
destination_arn = aws_lambda_function.dd-log.arn
6+
destination_arn = aws_cloudformation_stack.datadog-forwarder.outputs.DatadogForwarderArn
77
distribution = "Random"
88
}
99

1010
resource aws_lambda_permission "allow_cloudwatch_logs_to_call_dd_lambda_handler" {
1111
count = length(var.cloudwatch_log_groups)
1212
statement_id = "${replace(var.cloudwatch_log_groups[count.index], "/", "_")}-AllowExecutionFromCloudWatchLogs"
1313
action = "lambda:InvokeFunction"
14-
function_name = aws_lambda_function.dd-log.function_name
14+
function_name = aws_cloudformation_stack.datadog-forwarder.outputs.DatadogForwarderArn
1515
principal = "logs.${var.aws_region}.amazonaws.com"
1616
source_arn = "arn:aws:logs:${var.aws_region}:${var.aws_account_id}:log-group:${var.cloudwatch_log_groups[count.index]}:*"
1717
}

logshipping_elb.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ resource "aws_lambda_permission" "allow-elblog-trigger" {
33
count = var.create_elb_logs_bucket ? 1 : 0
44
statement_id = "AllowExecutionFromELBLogBucket"
55
action = "lambda:InvokeFunction"
6-
function_name = aws_lambda_function.dd-log.arn
6+
function_name = aws_cloudformation_stack.datadog-forwarder.outputs.DatadogForwarderArn
77
principal = "s3.amazonaws.com"
88
source_arn = aws_s3_bucket.elb_logs[0].arn
99
}
@@ -14,7 +14,7 @@ resource "aws_s3_bucket_notification" "elblog-notification-dd-log" {
1414
bucket = aws_s3_bucket.elb_logs[0].id
1515

1616
lambda_function {
17-
lambda_function_arn = aws_lambda_function.dd-log.arn
17+
lambda_function_arn = aws_cloudformation_stack.datadog-forwarder.outputs.DatadogForwarderArn
1818
events = ["s3:ObjectCreated:*"]
1919
}
2020
}

outputs.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
output "datadog_log_shipping_lambda_function_name" {
2-
value = aws_lambda_function.dd-log.function_name
2+
value = aws_cloudformation_stack.datadog-forwarder.outputs.DatadogForwarderArn
33
}
44
output "datadog_iam_role" {
55
value = var.enable_datadog_aws_integration ? aws_iam_role.datadog-integration[0].name : ""

0 commit comments

Comments
 (0)