Skip to content

Commit 3fb0821

Browse files
authored
Setup lambda for operation in us-west-2 and us-east-2 (#358)
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Region can be set via AWS_REGION (fallback us-east-2); services and queue endpoints now follow that region. * Lambdas support an explicit region and primary-region gating for deployments. * QA environment adds multi-region failover with a us-west-2 deployment for Lambdas and queues. * DynamoDB tables enable streams and cross-region replication driven by a replication-regions list. * **Chores** * Storage modules consolidated to use a primary bucket prefix. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
1 parent a68b9a8 commit 3fb0821

File tree

9 files changed

+263
-89
lines changed

9 files changed

+263
-89
lines changed

src/common/config.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ const genericConfig: GenericConfigType = {
8888
EntraSecretName: "infra-core-api-entra",
8989
EntraReadOnlySecretName: "infra-core-api-ro-entra",
9090
UpcomingEventThresholdSeconds: 1800, // 30 mins
91-
AwsRegion: "us-east-2",
91+
AwsRegion: process.env.AWS_REGION ?? "us-east-2",
9292
SesRegion: "us-east-1",
9393
EntraTenantId: "c8d9148f-9a59-4db3-827d-42ea0c2b6e2e",
9494
MerchStorePurchasesTableName: "infra-merchstore-purchase-history",
@@ -131,7 +131,7 @@ const environmentConfig: EnvironmentConfigType = {
131131
PasskitSerialNumber: "0",
132132
EmailDomain: "aws.qa.acmuiuc.org",
133133
SqsQueueUrl:
134-
"https://sqs.us-east-2.amazonaws.com/427040638965/infra-core-api-sqs",
134+
`https://sqs.${genericConfig.AwsRegion}.amazonaws.com/427040638965/infra-core-api-sqs`,
135135
PaidMemberGroupId: "9222451f-b354-4e64-ba28-c0f367a277c2",
136136
PaidMemberPriceId: "price_1S5eAqDGHrJxx3mKZYGoulj3",
137137
AadValidReadOnlyClientId: "2c6a0057-5acc-496c-a4e5-4adbf88387ba",
@@ -163,7 +163,7 @@ const environmentConfig: EnvironmentConfigType = {
163163
PasskitSerialNumber: "0",
164164
EmailDomain: "acm.illinois.edu",
165165
SqsQueueUrl:
166-
"https://sqs.us-east-2.amazonaws.com/298118738376/infra-core-api-sqs",
166+
`https://sqs.${genericConfig.AwsRegion}.amazonaws.com/298118738376/infra-core-api-sqs`,
167167
PaidMemberGroupId: "172fd9ee-69f0-4384-9786-41ff1a43cf8e",
168168
PaidMemberPriceId: MembershipPriceIdStripe,
169169
AadValidReadOnlyClientId: "2c6a0057-5acc-496c-a4e5-4adbf88387ba",

terraform/envs/prod/main.tf

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,24 +32,25 @@ data "aws_caller_identity" "current" {}
3232
data "aws_region" "current" {}
3333

3434
locals {
35-
bucket_prefix = "${data.aws_caller_identity.current.account_id}-${data.aws_region.current.region}"
35+
primary_bucket_prefix = "${data.aws_caller_identity.current.account_id}-${data.aws_region.current.region}"
3636
queue_arns = {
3737
main = module.sqs_queues.main_queue_arn
3838
sqs = module.sqs_queues.sales_email_queue_arn
3939
}
40-
LinkryReplicationRegions = toset(["us-west-2"])
40+
DynamoReplicationRegions = toset(["us-west-2"])
4141
}
4242

4343
module "sqs_queues" {
44+
region = "us-east-2"
4445
source = "../../modules/sqs"
4546
resource_prefix = var.ProjectId
4647
core_sqs_consumer_lambda_name = module.lambdas.core_sqs_consumer_lambda_name
4748
}
4849

4950
module "dynamo" {
50-
source = "../../modules/dynamo"
51-
ProjectId = var.ProjectId
52-
LinkryReplicationRegions = local.LinkryReplicationRegions
51+
source = "../../modules/dynamo"
52+
ProjectId = var.ProjectId
53+
ReplicationRegions = local.DynamoReplicationRegions
5354
}
5455

5556
module "origin_verify" {
@@ -78,7 +79,7 @@ module "archival" {
7879
source = "../../modules/archival"
7980
ProjectId = var.ProjectId
8081
RunEnvironment = "dev"
81-
BucketPrefix = local.bucket_prefix
82+
BucketPrefix = local.primary_bucket_prefix
8283
LogRetentionDays = var.LogRetentionDays
8384
MonitorTables = ["${var.ProjectId}-audit-log", "${var.ProjectId}-events", "${var.ProjectId}-room-requests"]
8485
TableDeletionDays = tomap({
@@ -89,6 +90,7 @@ module "archival" {
8990
}
9091

9192
module "lambdas" {
93+
region = "us-east-2"
9294
source = "../../modules/lambdas"
9395
ProjectId = var.ProjectId
9496
RunEnvironment = "prod"
@@ -97,12 +99,11 @@ module "lambdas" {
9799
PreviousOriginVerifyKeyExpiresAt = module.origin_verify.previous_invalid_time
98100
LogRetentionDays = var.LogRetentionDays
99101
EmailDomain = var.EmailDomain
100-
LinkryReplicationRegions = local.LinkryReplicationRegions
101102
}
102103

103104
module "frontend" {
104105
source = "../../modules/frontend"
105-
BucketPrefix = local.bucket_prefix
106+
BucketPrefix = local.primary_bucket_prefix
106107
CoreLambdaHost = module.lambdas.core_function_url
107108
OriginVerifyKey = module.origin_verify.current_origin_verify_key
108109
ProjectId = var.ProjectId
@@ -116,7 +117,7 @@ module "frontend" {
116117

117118
module "assets" {
118119
source = "../../modules/assets"
119-
BucketPrefix = local.bucket_prefix
120+
BucketPrefix = local.primary_bucket_prefix
120121
AssetsPublicDomain = var.AssetsPublicDomain
121122
ProjectId = var.ProjectId
122123
CoreCertificateArn = var.CoreCertificateArn

terraform/envs/qa/main.tf

Lines changed: 47 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,28 +32,33 @@ data "aws_caller_identity" "current" {}
3232
data "aws_region" "current" {}
3333

3434
locals {
35-
LinkryReplicationRegions = toset(["us-west-2"])
35+
DynamoReplicationRegions = toset(["us-west-2"])
3636
}
3737

3838

3939
module "sqs_queues" {
40+
region = "us-east-2"
4041
depends_on = [module.lambdas]
4142
source = "../../modules/sqs"
4243
resource_prefix = var.ProjectId
4344
core_sqs_consumer_lambda_name = module.lambdas.core_sqs_consumer_lambda_name
4445
}
4546
locals {
46-
bucket_prefix = "${data.aws_caller_identity.current.account_id}-${data.aws_region.current.region}"
47+
primary_bucket_prefix = "${data.aws_caller_identity.current.account_id}-${data.aws_region.current.region}"
4748
queue_arns = {
4849
main = module.sqs_queues.main_queue_arn
4950
sqs = module.sqs_queues.sales_email_queue_arn
5051
}
52+
queue_arns_usw2 = {
53+
main = module.sqs_queues_usw2.main_queue_arn
54+
sqs = module.sqs_queues_usw2.sales_email_queue_arn
55+
}
5156
}
5257

5358
module "dynamo" {
54-
source = "../../modules/dynamo"
55-
ProjectId = var.ProjectId
56-
LinkryReplicationRegions = local.LinkryReplicationRegions
59+
source = "../../modules/dynamo"
60+
ProjectId = var.ProjectId
61+
ReplicationRegions = local.DynamoReplicationRegions
5762
}
5863

5964
module "origin_verify" {
@@ -84,7 +89,7 @@ module "archival" {
8489
RunEnvironment = "dev"
8590
LogRetentionDays = var.LogRetentionDays
8691
MonitorTables = ["${var.ProjectId}-audit-log", "${var.ProjectId}-events", "${var.ProjectId}-room-requests"]
87-
BucketPrefix = local.bucket_prefix
92+
BucketPrefix = local.primary_bucket_prefix
8893
TableDeletionDays = tomap({
8994
"${var.ProjectId}-audit-log" : 15,
9095
"${var.ProjectId}-room-requests" : 15
@@ -94,6 +99,7 @@ module "archival" {
9499
}
95100

96101
module "lambdas" {
102+
region = "us-east-2"
97103
source = "../../modules/lambdas"
98104
ProjectId = var.ProjectId
99105
RunEnvironment = "dev"
@@ -102,12 +108,11 @@ module "lambdas" {
102108
PreviousOriginVerifyKeyExpiresAt = module.origin_verify.previous_invalid_time
103109
LogRetentionDays = var.LogRetentionDays
104110
EmailDomain = var.EmailDomain
105-
LinkryReplicationRegions = local.LinkryReplicationRegions
106111
}
107112

108113
module "frontend" {
109114
source = "../../modules/frontend"
110-
BucketPrefix = local.bucket_prefix
115+
BucketPrefix = local.primary_bucket_prefix
111116
CoreLambdaHost = module.lambdas.core_function_url
112117
CoreSlowLambdaHost = module.lambdas.core_slow_function_url
113118
OriginVerifyKey = module.origin_verify.current_origin_verify_key
@@ -121,11 +126,44 @@ module "frontend" {
121126

122127
module "assets" {
123128
source = "../../modules/assets"
124-
BucketPrefix = local.bucket_prefix
129+
BucketPrefix = local.primary_bucket_prefix
125130
AssetsPublicDomain = var.AssetsPublicDomain
126131
ProjectId = var.ProjectId
127132
CoreCertificateArn = var.CoreCertificateArn
128133
}
134+
135+
// Multi-Region Failover: US-West-2
136+
137+
module "lambdas_usw2" {
138+
region = "us-west-2"
139+
source = "../../modules/lambdas"
140+
ProjectId = var.ProjectId
141+
RunEnvironment = "dev"
142+
CurrentOriginVerifyKey = module.origin_verify.current_origin_verify_key
143+
PreviousOriginVerifyKey = module.origin_verify.previous_origin_verify_key
144+
PreviousOriginVerifyKeyExpiresAt = module.origin_verify.previous_invalid_time
145+
LogRetentionDays = var.LogRetentionDays
146+
EmailDomain = var.EmailDomain
147+
}
148+
149+
module "sqs_queues_usw2" {
150+
region = "us-west-2"
151+
depends_on = [module.lambdas_usw2]
152+
source = "../../modules/sqs"
153+
resource_prefix = var.ProjectId
154+
core_sqs_consumer_lambda_name = module.lambdas_usw2.core_sqs_consumer_lambda_name
155+
}
156+
157+
resource "aws_lambda_event_source_mapping" "queue_consumer_usw2" {
158+
region = "us-west-2"
159+
depends_on = [module.lambdas_usw2, module.sqs_queues_usw2]
160+
for_each = local.queue_arns_usw2
161+
batch_size = 5
162+
event_source_arn = each.value
163+
function_name = module.lambdas_usw2.core_sqs_consumer_lambda_arn
164+
function_response_types = ["ReportBatchItemFailures"]
165+
}
166+
129167
// QA only - setup Route 53 records
130168
resource "aws_route53_record" "assets" {
131169
for_each = toset(["A", "AAAA"])

0 commit comments

Comments
 (0)