Skip to content

Commit 1d36fa5

Browse files
authored
More terraform migration (#221)
1 parent 7182fd2 commit 1d36fa5

File tree

10 files changed

+119
-81
lines changed

10 files changed

+119
-81
lines changed

Makefile

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ deploy_prod: check_account_prod
9393
sam deploy $(common_params) --parameter-overrides $(run_env)=prod $(set_application_prefix)=$(application_key) $(set_application_name)="$(application_name)" S3BucketPrefix="$(s3_bucket_prefix)"
9494
@echo "Deploying Terraform..."
9595
$(eval MAIN_DISTRIBUTION_ID := $(shell aws cloudformation describe-stacks --stack-name $(application_key) --query "Stacks[0].Outputs[?OutputKey=='CloudfrontDistributionId'].OutputValue" --output text))
96-
terraform -chdir=terraform/envs/prod init
96+
terraform -chdir=terraform/envs/prod init -lockfile=readonly
9797
terraform -chdir=terraform/envs/prod apply -auto-approve -var main_cloudfront_distribution_id="$(MAIN_DISTRIBUTION_ID)"
9898
make postdeploy
9999

@@ -102,7 +102,7 @@ deploy_dev: check_account_dev
102102
sam deploy $(common_params) --parameter-overrides $(run_env)=dev $(set_application_prefix)=$(application_key) $(set_application_name)="$(application_name)" S3BucketPrefix="$(s3_bucket_prefix)"
103103
@echo "Deploying Terraform..."
104104
$(eval MAIN_DISTRIBUTION_ID := $(shell aws cloudformation describe-stacks --stack-name $(application_key) --query "Stacks[0].Outputs[?OutputKey=='CloudfrontDistributionId'].OutputValue" --output text))
105-
terraform -chdir=terraform/envs/qa init
105+
terraform -chdir=terraform/envs/qa init -lockfile=readonly
106106
terraform -chdir=terraform/envs/qa apply -auto-approve -var main_cloudfront_distribution_id="$(MAIN_DISTRIBUTION_ID)"
107107
make postdeploy
108108

@@ -119,21 +119,25 @@ invalidate_cloudfront:
119119
aws cloudfront wait invalidation-completed --distribution-id $(DISTRIBUTION_ID_2) --id $(INVALIDATION_ID_2)
120120
@echo "CloudFront invalidation completed!"
121121

122+
init_terraform:
123+
terraform -chdir=terraform/envs/qa init
124+
terraform -chdir=terraform/envs/prod init
125+
122126
install:
123127
yarn -D
124128
pip install cfn-lint
125-
terraform -chdir=terraform/envs/qa init
126-
terraform -chdir=terraform/envs/prod init
127129

128130
test_live_integration: install
129131
yarn test:live
130132

131133
test_unit: install
132134
yarn lint
133135
cfn-lint cloudformation/**/*
136+
terraform -chdir=terraform/envs/qa init -reconfigure -backend=false -upgrade
134137
terraform -chdir=terraform/envs/qa fmt -check
135-
terraform -chdir=terraform/envs/prod fmt -check
136138
terraform -chdir=terraform/envs/qa validate
139+
terraform -chdir=terraform/envs/prod init -reconfigure -backend=false
140+
terraform -chdir=terraform/envs/prod fmt -check
137141
terraform -chdir=terraform/envs/prod validate
138142
yarn prettier
139143
yarn test:unit
@@ -149,3 +153,7 @@ dev_health_check:
149153

150154
prod_health_check:
151155
curl -f https://core.acm.illinois.edu/api/v1/healthz && curl -f https://core.acm.illinois.edu
156+
157+
lock_terraform: init_terraform
158+
terraform -chdir=terraform/envs/qa providers lock -platform=windows_amd64 -platform=darwin_amd64 -platform=darwin_arm64 -platform=linux_amd64 -platform=linux_arm64
159+
terraform -chdir=terraform/envs/prod providers lock -platform=windows_amd64 -platform=darwin_amd64 -platform=darwin_arm64 -platform=linux_amd64 -platform=linux_arm64

cloudformation/main.yml

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,6 @@ Parameters:
2222
Description: How long the SQS lambda is permitted to run (in seconds)
2323
Default: 180
2424
Type: Number
25-
SqsMessageTimeout:
26-
Description: MessageVisibilityTimeout for the SQS Lambda queue (should be at least (numMaxRetry + 1)*SqsLambdaTimeout)
27-
Default: 720
28-
Type: Number
2925
S3BucketPrefix:
3026
Description: S3 bucket prefix which will ensure global uniqueness
3127
Type: String
@@ -86,22 +82,14 @@ Resources:
8682
RunEnvironment: !Ref RunEnvironment
8783
LambdaFunctionName: !Sub ${ApplicationPrefix}-lambda
8884
SesEmailDomain: !FindInMap [General, !Ref RunEnvironment, SesDomain]
89-
SqsQueueArn: !GetAtt AppSQSQueues.Outputs.MainQueueArn
85+
SqsQueueArn: !Sub "arn:aws:sqs:${AWS::Region}:${AWS::AccountId}:infra-core-api-sqs"
9086
LinkryKvArn: !GetAtt LinkryRecordsCloudfrontStore.Arn
9187

9288
AppLogGroups:
9389
Type: AWS::Serverless::Application
9490
Properties:
9591
Location: ./logs.yml
9692

97-
AppSQSQueues:
98-
Type: AWS::Serverless::Application
99-
Properties:
100-
Location: ./sqs.yml
101-
Parameters:
102-
QueueName: !Sub ${ApplicationPrefix}-sqs
103-
MessageTimeout: !Ref SqsMessageTimeout
104-
10593
LinkryRecordSetv4:
10694
Condition: IsDev
10795
Type: AWS::Route53::RecordSet
@@ -319,7 +307,7 @@ Resources:
319307
- AppSqsLambdaFunction
320308
Properties:
321309
BatchSize: 5
322-
EventSourceArn: !GetAtt AppSQSQueues.Outputs.MainQueueArn
310+
EventSourceArn: !Sub "arn:aws:sqs:${AWS::Region}:${AWS::AccountId}:infra-core-api-sqs"
323311
FunctionName: !Sub ${ApplicationPrefix}-sqs-lambda
324312
FunctionResponseTypes:
325313
- ReportBatchItemFailures
@@ -330,7 +318,7 @@ Resources:
330318
- AppSqsLambdaFunction
331319
Properties:
332320
BatchSize: 5
333-
EventSourceArn: !GetAtt AppSQSQueues.Outputs.SalesEmailQueueArn
321+
EventSourceArn: !Sub "arn:aws:sqs:${AWS::Region}:${AWS::AccountId}:infra-core-api-sqs-sales"
334322
FunctionName: !Sub ${ApplicationPrefix}-sqs-lambda
335323
FunctionResponseTypes:
336324
- ReportBatchItemFailures
@@ -1011,4 +999,4 @@ Outputs:
1011999

10121000
SalesEmailQueueArn:
10131001
Description: Sales Email Queue Arn
1014-
Value: !GetAtt AppSQSQueues.Outputs.SalesEmailQueueArn
1002+
Value: !Sub "arn:aws:sqs:${AWS::Region}:${AWS::AccountId}:infra-core-api-sqs-sales"

cloudformation/sqs.yml

Lines changed: 0 additions & 59 deletions
This file was deleted.

cspell.config.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ ignorePaths:
66
dictionaryDefinitions: []
77
dictionaries: []
88
words:
9+
- redrive
910
- UIUC
1011
ignoreWords: []
1112
import: []

terraform/envs/prod/.terraform.lock.hcl

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

terraform/envs/prod/main.tf

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
data "aws_caller_identity" "current" {}
2+
locals {
3+
account_id = data.aws_caller_identity.current.account_id
4+
}
5+
16
terraform {
27
required_providers {
38
aws = {
@@ -7,6 +12,12 @@ terraform {
712
}
813

914
required_version = ">= 1.2"
15+
backend "s3" {
16+
bucket = "298118738376-terraform"
17+
key = "infra-core-api"
18+
region = "us-east-1"
19+
use_lockfile = true
20+
}
1021
}
1122

1223
provider "aws" {
@@ -17,7 +28,6 @@ provider "aws" {
1728
}
1829
}
1930
}
20-
2131
import {
2232
to = aws_cloudwatch_log_group.main_app_logs
2333
id = "/aws/lambda/${var.ProjectId}-lambda"
@@ -34,3 +44,8 @@ module "app_alarms" {
3444
priority_sns_arn = var.GeneralSNSAlertArn
3545
standard_sns_arn = var.PrioritySNSAlertArn
3646
}
47+
48+
module "sqs_queues" {
49+
source = "../../modules/sqs"
50+
resource_prefix = var.ProjectId
51+
}

terraform/envs/qa/.terraform.lock.hcl

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

terraform/envs/qa/main.tf

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@ terraform {
77
}
88

99
required_version = ">= 1.2"
10+
11+
backend "s3" {
12+
bucket = "427040638965-terraform"
13+
key = "infra-core-api"
14+
region = "us-east-1"
15+
use_lockfile = true
16+
}
1017
}
1118

1219
provider "aws" {
@@ -17,7 +24,15 @@ provider "aws" {
1724
}
1825
}
1926
}
27+
import {
28+
to = aws_cloudwatch_log_group.main_app_logs
29+
id = "/aws/lambda/${var.ProjectId}-lambda"
30+
}
2031
resource "aws_cloudwatch_log_group" "main_app_logs" {
2132
name = "/aws/lambda/${var.ProjectId}-lambda"
2233
retention_in_days = var.LogRetentionDays
2334
}
35+
module "sqs_queues" {
36+
source = "../../modules/sqs"
37+
resource_prefix = var.ProjectId
38+
}

terraform/modules/sqs/main.tf

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
terraform {
2+
required_providers {
3+
aws = {
4+
source = "hashicorp/aws"
5+
}
6+
}
7+
}
8+
9+
resource "aws_sqs_queue" "app_dlq" {
10+
name = "${var.resource_prefix}-sqs-dlq"
11+
visibility_timeout_seconds = var.sqs_message_timeout
12+
message_retention_seconds = 1209600
13+
}
14+
15+
resource "aws_sqs_queue" "app_queue" {
16+
name = "${var.resource_prefix}-sqs"
17+
visibility_timeout_seconds = var.sqs_message_timeout
18+
redrive_policy = jsonencode({
19+
deadLetterTargetArn = aws_sqs_queue.app_dlq.arn
20+
maxReceiveCount = 3
21+
})
22+
}
23+
24+
resource "aws_sqs_queue" "sales_email_queue" {
25+
name = "${var.resource_prefix}-sqs-sales"
26+
visibility_timeout_seconds = var.sqs_message_timeout
27+
redrive_policy = jsonencode({
28+
deadLetterTargetArn = aws_sqs_queue.app_dlq.arn
29+
maxReceiveCount = 3
30+
})
31+
}
32+
33+
output "main_queue_arn" {
34+
description = "Main Queue Arn"
35+
value = aws_sqs_queue.app_queue.arn
36+
}
37+
38+
output "dlq_arn" {
39+
description = "Dead-letter Queue Arn"
40+
value = aws_sqs_queue.app_dlq.arn
41+
}
42+
43+
output "sales_email_queue_arn" {
44+
description = "Sales Email Queue Arn"
45+
value = aws_sqs_queue.sales_email_queue.arn
46+
}

terraform/modules/sqs/variables.tf

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
variable "resource_prefix" {
2+
type = string
3+
description = "Prefix before each resource"
4+
}
5+
6+
variable "sqs_message_timeout" {
7+
type = number
8+
description = "SQS Message timeout in seconds"
9+
default = 720
10+
}
11+
12+
variable "dlq_message_retention" {
13+
type = number
14+
description = "DLQ Message retention in seconds"
15+
default = 1209600
16+
}

0 commit comments

Comments
 (0)