|
9 | 9 | from aws_cdk import aws_neptune_alpha as neptune |
10 | 10 | from aws_cdk import aws_rds as rds |
11 | 11 | from aws_cdk import aws_redshift_alpha as redshift |
| 12 | +from aws_cdk import aws_redshiftserverless as redshiftserverless |
12 | 13 | from aws_cdk import aws_s3 as s3 |
13 | 14 | from aws_cdk import aws_secretsmanager as secrets |
14 | 15 | from aws_cdk import aws_ssm as ssm |
@@ -42,6 +43,7 @@ def __init__( |
42 | 43 | self._set_catalog_encryption() |
43 | 44 | if databases_context["redshift"]: |
44 | 45 | self._setup_redshift() |
| 46 | + self._setup_redshift_serverless() |
45 | 47 | if databases_context["postgresql"]: |
46 | 48 | self._setup_postgresql() |
47 | 49 | if databases_context["mysql"]: |
@@ -297,6 +299,46 @@ def _setup_redshift(self) -> None: |
297 | 299 | CfnOutput(self, "RedshiftSchema", value=schema) |
298 | 300 | CfnOutput(self, "RedshiftRole", value=redshift_role.role_arn) |
299 | 301 |
|
| 302 | + def _setup_redshift_serverless(self) -> None: |
| 303 | + database = "test" |
| 304 | + redshift_cfn_namespace = redshiftserverless.CfnNamespace( |
| 305 | + self, |
| 306 | + "aws-sdk-pandas-redshift-serverless-namespace", |
| 307 | + namespace_name="aws-sdk-pandas-redshift-serverless-namespace", |
| 308 | + admin_username=self.db_username, |
| 309 | + admin_user_password=self.db_password, |
| 310 | + db_name=database, |
| 311 | + ) |
| 312 | + redshift_cfn_workgroup = redshiftserverless.CfnWorkgroup( |
| 313 | + self, |
| 314 | + "aws-sdk-pandas-redshift-serverless-workgroup", |
| 315 | + workgroup_name="aws-sdk-pandas-redshift-serverless-workgroup", |
| 316 | + namespace_name=redshift_cfn_namespace.namespace_name, |
| 317 | + publicly_accessible=True, |
| 318 | + security_group_ids=[self.db_security_group.security_group_id], |
| 319 | + subnet_ids=[subnet.subnet_id for subnet in self.vpc.public_subnets], |
| 320 | + ) |
| 321 | + redshift_cfn_workgroup.node.add_dependency(redshift_cfn_namespace) |
| 322 | + secret = secrets.Secret( |
| 323 | + self, |
| 324 | + "aws-sdk-pandas-redshift-serverless-secret", |
| 325 | + secret_name="aws-sdk-pandas/redshift-serverless", |
| 326 | + description="Redshift Serverless credentials", |
| 327 | + generate_secret_string=secrets.SecretStringGenerator( |
| 328 | + generate_string_key="dummy", |
| 329 | + secret_string_template=json.dumps( |
| 330 | + { |
| 331 | + "username": self.db_username, |
| 332 | + "password": self.db_password, |
| 333 | + "engine": "redshift-serverless", |
| 334 | + } |
| 335 | + ), |
| 336 | + ), |
| 337 | + ) |
| 338 | + CfnOutput(self, "RedshiftServerlessSecretArn", value=secret.secret_arn) |
| 339 | + CfnOutput(self, "RedshiftServerlessWorkgroup", value=redshift_cfn_workgroup.workgroup_name) |
| 340 | + CfnOutput(self, "RedshiftServerlessDatabase", value=database) |
| 341 | + |
300 | 342 | def _setup_postgresql(self) -> None: |
301 | 343 | port = 3306 |
302 | 344 | database = "postgres" |
@@ -483,7 +525,7 @@ def _setup_mysql_serverless(self) -> None: |
483 | 525 | ), |
484 | 526 | backup_retention=Duration.days(1), |
485 | 527 | vpc=self.vpc, |
486 | | - vpc_subnets=ec2.SubnetSelection(subnet_type=ec2.SubnetType.PRIVATE_WITH_NAT), |
| 528 | + vpc_subnets=ec2.SubnetSelection(subnet_type=ec2.SubnetType.PRIVATE_WITH_EGRESS), |
487 | 529 | subnet_group=self.rds_subnet_group, |
488 | 530 | security_groups=[self.db_security_group], |
489 | 531 | enable_data_api=True, |
|
0 commit comments