Skip to content

Commit ce341bf

Browse files
authored
fix: update CDK stack to support Aurora Serverless v2 (#311)
1 parent 5ee7ea3 commit ce341bf

File tree

2 files changed

+54
-62
lines changed

2 files changed

+54
-62
lines changed

stack/hlsconstructs/rds.py

Lines changed: 32 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import os
22

3-
from aws_cdk import Aws, Fn, aws_ec2, aws_iam, aws_rds, aws_secretsmanager
3+
from aws_cdk import RemovalPolicy, SecretValue, aws_ec2, aws_iam, aws_rds, aws_secretsmanager
44
from constructs import Construct
55
from hlsconstructs.network import Network
66

@@ -55,53 +55,45 @@ def __init__(
5555
),
5656
)
5757

58-
self.database = aws_rds.CfnDBCluster(
58+
self.database_name = "hls"
59+
self.database = aws_rds.DatabaseCluster(
5960
self,
6061
"RdsCluster",
61-
engine="aurora-postgresql",
62-
engine_mode="serverless",
63-
engine_version="13.12",
64-
database_name="hls",
65-
db_subnet_group_name=self.subnet_group.ref,
66-
enable_http_endpoint=True,
67-
db_cluster_identifier=f"rds-{os.getenv('HLS_STACKNAME')}",
68-
master_username=Fn.join(
69-
"",
70-
[
71-
"{{resolve:secretsmanager:",
72-
self.secret.secret_arn,
73-
":SecretString:username}}",
74-
],
62+
engine=aws_rds.DatabaseClusterEngine.aurora_postgres(
63+
version=aws_rds.AuroraPostgresEngineVersion.VER_13_12,
7564
),
76-
master_user_password=Fn.join(
77-
"",
78-
[
79-
"{{resolve:secretsmanager:",
80-
self.secret.secret_arn,
81-
":SecretString:password}}",
82-
],
65+
default_database_name=self.database_name,
66+
enable_data_api=True,
67+
cluster_identifier=f"rds-{os.getenv('HLS_STACKNAME')}",
68+
serverless_v2_min_capacity=min_capacity,
69+
serverless_v2_max_capacity=max_capacity,
70+
writer=aws_rds.ClusterInstance.serverless_v2(
71+
id="serverless-1",
72+
instance_identifier=f"rds-{os.getenv('HLS_STACKNAME')}-serverless-1",
8373
),
84-
vpc_security_group_ids=[self.security_group.ref],
85-
serverless_v2_scaling_configuration=aws_rds.CfnDBCluster.ServerlessV2ScalingConfigurationProperty(
86-
max_capacity=max_capacity,
87-
min_capacity=min_capacity,
88-
seconds_until_auto_pause=600,
74+
credentials=aws_rds.Credentials.from_password(
75+
username="master",
76+
password=SecretValue.secrets_manager(secret_id=self.secret.secret_arn),
8977
),
78+
vpc=network.vpc,
79+
subnet_group=self.subnet_group,
80+
security_groups=[self.security_group],
81+
removal_policy=RemovalPolicy.RETAIN,
9082
)
9183

92-
self.database_instance = aws_rds.CfnDBInstance(
93-
self,
94-
"AuroraPostgresV2Instance",
95-
db_cluster_identifier=self.database.ref,
96-
engine="aurora-postgresql",
97-
db_instance_class="db.serverless", # Required for Serverless v2
98-
)
84+
# Only set auto-pause if min_capacity is 0 as Aurora Serverless v2 doesn't
85+
# support auto-pausing with >0 min capacity
86+
if min_capacity == 0:
87+
# CDK doesn't yet support "SecondsUntilAutoPause" but there is work in
88+
# progress to add it,
89+
# issue: https://github.com/aws/aws-cdk/issues/32280
90+
# PR: https://github.com/aws/aws-cdk/pull/32787
91+
self.database.node.default_child.add_property_override(
92+
"ServerlessV2ScalingConfiguration.SecondsUntilAutoPause",
93+
600,
94+
)
9995

100-
region = Aws.REGION
101-
accountid = Aws.ACCOUNT_ID
102-
self.arn = Fn.join(
103-
":", ["arn:aws:rds", region, accountid, "cluster", self.database.ref]
104-
)
96+
self.arn = self.database.cluster_arn
10597

10698
self.policy_statement = aws_iam.PolicyStatement(
10799
resources=[self.arn, self.secret.secret_arn],

stack/stack.py

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
239239
code_file="setupdb.py",
240240
env={
241241
"HLS_SECRETS": self.rds.secret.secret_arn,
242-
"HLS_DB_NAME": self.rds.database.database_name,
242+
"HLS_DB_NAME": self.rds.database_name,
243243
"HLS_DB_ARN": self.rds.arn,
244244
},
245245
timeout=300,
@@ -345,7 +345,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
345345
code_file="landsat_mgrs_logger.py",
346346
env={
347347
"HLS_SECRETS": self.rds.secret.secret_arn,
348-
"HLS_DB_NAME": self.rds.database.database_name,
348+
"HLS_DB_NAME": self.rds.database_name,
349349
"HLS_DB_ARN": self.rds.arn,
350350
},
351351
timeout=120,
@@ -357,7 +357,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
357357
code_file="landsat_mgrs_logger.py",
358358
env={
359359
"HLS_SECRETS": self.rds.secret.secret_arn,
360-
"HLS_DB_NAME": self.rds.database.database_name,
360+
"HLS_DB_NAME": self.rds.database_name,
361361
"HLS_DB_ARN": self.rds.arn,
362362
"HISTORIC": "historic",
363363
},
@@ -370,7 +370,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
370370
code_file="mgrs_logger.py",
371371
env={
372372
"HLS_SECRETS": self.rds.secret.secret_arn,
373-
"HLS_DB_NAME": self.rds.database.database_name,
373+
"HLS_DB_NAME": self.rds.database_name,
374374
"HLS_DB_ARN": self.rds.arn,
375375
},
376376
timeout=120,
@@ -383,7 +383,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
383383
code_file="landsat_ac_logger.py",
384384
env={
385385
"HLS_SECRETS": self.rds.secret.secret_arn,
386-
"HLS_DB_NAME": self.rds.database.database_name,
386+
"HLS_DB_NAME": self.rds.database_name,
387387
"HLS_DB_ARN": self.rds.arn,
388388
},
389389
timeout=120,
@@ -396,7 +396,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
396396
code_file="landsat_logger.py",
397397
env={
398398
"HLS_SECRETS": self.rds.secret.secret_arn,
399-
"HLS_DB_NAME": self.rds.database.database_name,
399+
"HLS_DB_NAME": self.rds.database_name,
400400
"HLS_DB_ARN": self.rds.arn,
401401
},
402402
timeout=120,
@@ -408,7 +408,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
408408
code_file="landsat_logger.py",
409409
env={
410410
"HLS_SECRETS": self.rds.secret.secret_arn,
411-
"HLS_DB_NAME": self.rds.database.database_name,
411+
"HLS_DB_NAME": self.rds.database_name,
412412
"HLS_DB_ARN": self.rds.arn,
413413
"HISTORIC": "historic",
414414
},
@@ -421,7 +421,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
421421
code_file="landsat_pathrow_status.py",
422422
env={
423423
"HLS_SECRETS": self.rds.secret.secret_arn,
424-
"HLS_DB_NAME": self.rds.database.database_name,
424+
"HLS_DB_NAME": self.rds.database_name,
425425
"HLS_DB_ARN": self.rds.arn,
426426
},
427427
timeout=120,
@@ -447,7 +447,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
447447
code_file="sentinel_logger.py",
448448
env={
449449
"HLS_SECRETS": self.rds.secret.secret_arn,
450-
"HLS_DB_NAME": self.rds.database.database_name,
450+
"HLS_DB_NAME": self.rds.database_name,
451451
"HLS_DB_ARN": self.rds.arn,
452452
},
453453
timeout=120,
@@ -459,7 +459,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
459459
code_file="sentinel_logger.py",
460460
env={
461461
"HLS_SECRETS": self.rds.secret.secret_arn,
462-
"HLS_DB_NAME": self.rds.database.database_name,
462+
"HLS_DB_NAME": self.rds.database_name,
463463
"HLS_DB_ARN": self.rds.arn,
464464
"HISTORIC": "historic",
465465
},
@@ -472,7 +472,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
472472
code_file="sentinel_ac_logger.py",
473473
env={
474474
"HLS_SECRETS": self.rds.secret.secret_arn,
475-
"HLS_DB_NAME": self.rds.database.database_name,
475+
"HLS_DB_NAME": self.rds.database_name,
476476
"HLS_DB_ARN": self.rds.arn,
477477
},
478478
timeout=800,
@@ -485,7 +485,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
485485
code_file="sentinel_ac_logger.py",
486486
env={
487487
"HLS_SECRETS": self.rds.secret.secret_arn,
488-
"HLS_DB_NAME": self.rds.database.database_name,
488+
"HLS_DB_NAME": self.rds.database_name,
489489
"HLS_DB_ARN": self.rds.arn,
490490
},
491491
timeout=800,
@@ -505,7 +505,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
505505
code_file="check_landsat_pathrow_complete.py",
506506
env={
507507
"HLS_SECRETS": self.rds.secret.secret_arn,
508-
"HLS_DB_NAME": self.rds.database.database_name,
508+
"HLS_DB_NAME": self.rds.database_name,
509509
"HLS_DB_ARN": self.rds.arn,
510510
},
511511
timeout=900,
@@ -517,7 +517,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
517517
# code_file="put_exit_code_cw_metric.py",
518518
# env={
519519
# "HLS_SECRETS": self.rds.secret.secret_arn,
520-
# "HLS_DB_NAME": self.rds.database.database_name,
520+
# "HLS_DB_NAME": self.rds.database_name,
521521
# "HLS_DB_ARN": self.rds.arn,
522522
# "JOB_ID": f"{STACKNAME}_landsat_ac",
523523
# "TABLE_NAME": "landsat_ac_granule_log",
@@ -530,7 +530,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
530530
# code_file="put_exit_code_cw_metric.py",
531531
# env={
532532
# "HLS_SECRETS": self.rds.secret.secret_arn,
533-
# "HLS_DB_NAME": self.rds.database.database_name,
533+
# "HLS_DB_NAME": self.rds.database_name,
534534
# "HLS_DB_ARN": self.rds.arn,
535535
# "JOB_ID": f"{STACKNAME}_landsat_tile",
536536
# "TABLE_NAME": "landsat_mgrs_granule_log",
@@ -543,7 +543,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
543543
# code_file="put_exit_code_cw_metric.py",
544544
# env={
545545
# "HLS_SECRETS": self.rds.secret.secret_arn,
546-
# "HLS_DB_NAME": self.rds.database.database_name,
546+
# "HLS_DB_NAME": self.rds.database_name,
547547
# "HLS_DB_ARN": self.rds.arn,
548548
# "JOB_ID": f"{STACKNAME}_sentinel",
549549
# "TABLE_NAME": "sentinel_granule_log",
@@ -862,7 +862,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
862862
cron_str=LANDSAT_INCOMPLETE_CRON,
863863
env_vars={
864864
"HLS_SECRETS": self.rds.secret.secret_arn,
865-
"HLS_DB_NAME": self.rds.database.database_name,
865+
"HLS_DB_NAME": self.rds.database_name,
866866
"HLS_DB_ARN": self.rds.arn,
867867
"DAYS_PRIOR": LANDSAT_DAYS_PRIOR,
868868
"RETRY_LIMIT": LANDSAT_RETRY_LIMIT,
@@ -880,7 +880,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
880880
cron_str=LANDSAT_HISTORIC_INCOMPLETE_CRON,
881881
env_vars={
882882
"HLS_SECRETS": self.rds.secret.secret_arn,
883-
"HLS_DB_NAME": self.rds.database.database_name,
883+
"HLS_DB_NAME": self.rds.database_name,
884884
"HLS_DB_ARN": self.rds.arn,
885885
"HOURS_PRIOR": LANDSAT_HISTORIC_HOURS_PRIOR,
886886
"RETRY_LIMIT": LANDSAT_RETRY_LIMIT,
@@ -899,7 +899,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
899899
cron_str=LANDSAT_AC_ERRORS_CRON,
900900
env_vars={
901901
"HLS_SECRETS": self.rds.secret.secret_arn,
902-
"HLS_DB_NAME": self.rds.database.database_name,
902+
"HLS_DB_NAME": self.rds.database_name,
903903
"HLS_DB_ARN": self.rds.arn,
904904
"RETRY_LIMIT": LANDSAT_RETRY_LIMIT,
905905
},
@@ -916,7 +916,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
916916
cron_str=LANDSAT_HISTORIC_AC_ERRORS_CRON,
917917
env_vars={
918918
"HLS_SECRETS": self.rds.secret.secret_arn,
919-
"HLS_DB_NAME": self.rds.database.database_name,
919+
"HLS_DB_NAME": self.rds.database_name,
920920
"HLS_DB_ARN": self.rds.arn,
921921
"RETRY_LIMIT": LANDSAT_RETRY_LIMIT,
922922
"HISTORIC": "historic",
@@ -933,7 +933,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
933933
cron_str=SENTINEL_ERRORS_CRON,
934934
env_vars={
935935
"HLS_SECRETS": self.rds.secret.secret_arn,
936-
"HLS_DB_NAME": self.rds.database.database_name,
936+
"HLS_DB_NAME": self.rds.database_name,
937937
"HLS_DB_ARN": self.rds.arn,
938938
"RETRY_LIMIT": SENTINEL_RETRY_LIMIT,
939939
"HISTORIC": "no",
@@ -950,7 +950,7 @@ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
950950
cron_str=SENTINEL_ERRORS_CRON,
951951
env_vars={
952952
"HLS_SECRETS": self.rds.secret.secret_arn,
953-
"HLS_DB_NAME": self.rds.database.database_name,
953+
"HLS_DB_NAME": self.rds.database_name,
954954
"HLS_DB_ARN": self.rds.arn,
955955
"RETRY_LIMIT": SENTINEL_RETRY_LIMIT,
956956
"HISTORIC": "historic",

0 commit comments

Comments
 (0)