如何使用 AWS-CDK(java 或 typescript)创建一个 Aurora Serverless 数据库集群,另外连接 lambda 来查询一些数据?
How to create an Aurora Serverless DB cluster using AWS-CDK (java or typescript) aditionally connected with lambda to query some data?
我正在寻找一个示例来创建使用新的 AWS-CDK(基于 Java 或打字稿)创建的 Aurora Serverless 数据库集群。此外,该示例应使用与数据库集群的连接创建一个 lambda 函数并查询一些数据。
我的第一次尝试是用
创建这个
software.amazon.awscdk.services.rds.DatabaseCluster
例如
DatabaseCluster databaseCluster = new DatabaseCluster(this, "myDbCluster",
DatabaseClusterProps.builder()
.withEngine(DatabaseClusterEngine.Aurora)
但是根据cloudformation,你必须将属性 engineMode
设置为serverless
。 CDK 版本 0.24.1 不支持 属性 engineMode
。另见 open cdk Issue 929.
我的解决方法是使用 software.amazon.awscdk.services.rds.CfnDBCluster
创建结构。参见示例代码:
new CfnDBCluster(this, "myDBCluster", CfnDBClusterProps.builder()
.withEngine("aurora")
.withEngineMode("serverless")
.withPort(3306)
.withMasterUsername("masterUserName")
.withMasterUserPassword("***********************")
.withScalingConfiguration(ScalingConfigurationProperty.builder()
.withAutoPause(true)
.withMinCapacity(2)
.withMaxCapacity(16)
.withSecondsUntilAutoPause(300)
.build())
.build());
另请参阅:
AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html
https://awslabs.github.io/aws-cdk/refs/_aws-cdk_aws-rds.html
我知道您要 Java 或 TypeScript 示例,但我的母语是 Python,所以我只有一个 Python 示例给您。 Amazon 文档确实提供了有关如何 "translate" CDK 代码从一种语言到另一种语言的更多详细信息 - 它相当简单。参见 https://docs.aws.amazon.com/cdk/latest/guide/multiple_languages.html
以下示例使用 PostgreSQL 引擎创建一个 Aurora 集群。它使用从(先前创建的)SSM 安全字符串参数中检索到的密码创建管理员用户 ('admin')。它还在名为 'MyDatabase' 的集群中创建了一个初始数据库。
它还(首先)创建了一个 Lambda,假设处理程序的代码已经在 lambda-handler.py
中,将其放入安全组并确保 Aurora 将数据库端口公开给 lambda 安全组。
所有这些都在 VPC 的上下文中。
代码如下:
from aws_cdk import aws_ec2 as ec2
from aws_cdk import aws_rds as rds
from aws_cdk import aws_lambda as lambda_
from aws_cdk import core
class DataProcessingRTStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)
vpc = ec2.Vpc.from_lookup(self, 'VPC', vpc_name="my_vpc")
lambda_sg = kwargs.pop('lambda_sg', None)
with open("lambda-handler.py", encoding="utf8") as fp:
handler_code = fp.read()
lambda_fn = lambda_.Function(
self, "DB_Lambda",
code=lambda_.InlineCode(handler_code),
handler="index.main",
timeout=core.Duration.seconds(300),
runtime=lambda_.Runtime.PYTHON_3_7,
security_group=lambda_sg,
)
aurora_sg = ec2.SecurityGroup(
self, 'AUPG-SG',
vpc=vpc,
description="Allows PosgreSQL connections from Lambda SG",
)
aurora_cluster = rds.DatabaseCluster(
self, "AUPG-CLUSTER-1",
engine=rds.DatabaseClusterEngine.AURORA_POSTGRESQL,
engine_version="10.7",
master_user=rds.Login(
username='admin',
password=core.SecretValue.ssm_secure('AUPG.AdminPass', version='1'),
),
default_database_name='MyDatabase',
instance_props=rds.InstanceProps(
instance_type=ec2.InstanceType.of(
ec2.InstanceClass.MEMORY5, ec2.InstanceSize.XLARGE,
),
vpc=vpc,
security_group=aurora_sg,
),
parameter_group=\
rds.ClusterParameterGroup.from_parameter_group_name(
self, "AUPG-ParamGroup-1",
parameter_group_name="default.aurora-postgresql10",
)
)
aurora_cluster.connections.allow_from(
connectors_sg, ec2.Port.tcp(3306),
"Allow MySQL access from Lambda (because Aurora actually exposes PostgreSQL on port 3306)",
)
我正在寻找一个示例来创建使用新的 AWS-CDK(基于 Java 或打字稿)创建的 Aurora Serverless 数据库集群。此外,该示例应使用与数据库集群的连接创建一个 lambda 函数并查询一些数据。
我的第一次尝试是用
创建这个software.amazon.awscdk.services.rds.DatabaseCluster
例如
DatabaseCluster databaseCluster = new DatabaseCluster(this, "myDbCluster",
DatabaseClusterProps.builder()
.withEngine(DatabaseClusterEngine.Aurora)
但是根据cloudformation,你必须将属性 engineMode
设置为serverless
。 CDK 版本 0.24.1 不支持 属性 engineMode
。另见 open cdk Issue 929.
我的解决方法是使用 software.amazon.awscdk.services.rds.CfnDBCluster
创建结构。参见示例代码:
new CfnDBCluster(this, "myDBCluster", CfnDBClusterProps.builder()
.withEngine("aurora")
.withEngineMode("serverless")
.withPort(3306)
.withMasterUsername("masterUserName")
.withMasterUserPassword("***********************")
.withScalingConfiguration(ScalingConfigurationProperty.builder()
.withAutoPause(true)
.withMinCapacity(2)
.withMaxCapacity(16)
.withSecondsUntilAutoPause(300)
.build())
.build());
另请参阅:
AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html
https://awslabs.github.io/aws-cdk/refs/_aws-cdk_aws-rds.html
我知道您要 Java 或 TypeScript 示例,但我的母语是 Python,所以我只有一个 Python 示例给您。 Amazon 文档确实提供了有关如何 "translate" CDK 代码从一种语言到另一种语言的更多详细信息 - 它相当简单。参见 https://docs.aws.amazon.com/cdk/latest/guide/multiple_languages.html
以下示例使用 PostgreSQL 引擎创建一个 Aurora 集群。它使用从(先前创建的)SSM 安全字符串参数中检索到的密码创建管理员用户 ('admin')。它还在名为 'MyDatabase' 的集群中创建了一个初始数据库。
它还(首先)创建了一个 Lambda,假设处理程序的代码已经在 lambda-handler.py
中,将其放入安全组并确保 Aurora 将数据库端口公开给 lambda 安全组。
所有这些都在 VPC 的上下文中。
代码如下:
from aws_cdk import aws_ec2 as ec2
from aws_cdk import aws_rds as rds
from aws_cdk import aws_lambda as lambda_
from aws_cdk import core
class DataProcessingRTStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)
vpc = ec2.Vpc.from_lookup(self, 'VPC', vpc_name="my_vpc")
lambda_sg = kwargs.pop('lambda_sg', None)
with open("lambda-handler.py", encoding="utf8") as fp:
handler_code = fp.read()
lambda_fn = lambda_.Function(
self, "DB_Lambda",
code=lambda_.InlineCode(handler_code),
handler="index.main",
timeout=core.Duration.seconds(300),
runtime=lambda_.Runtime.PYTHON_3_7,
security_group=lambda_sg,
)
aurora_sg = ec2.SecurityGroup(
self, 'AUPG-SG',
vpc=vpc,
description="Allows PosgreSQL connections from Lambda SG",
)
aurora_cluster = rds.DatabaseCluster(
self, "AUPG-CLUSTER-1",
engine=rds.DatabaseClusterEngine.AURORA_POSTGRESQL,
engine_version="10.7",
master_user=rds.Login(
username='admin',
password=core.SecretValue.ssm_secure('AUPG.AdminPass', version='1'),
),
default_database_name='MyDatabase',
instance_props=rds.InstanceProps(
instance_type=ec2.InstanceType.of(
ec2.InstanceClass.MEMORY5, ec2.InstanceSize.XLARGE,
),
vpc=vpc,
security_group=aurora_sg,
),
parameter_group=\
rds.ClusterParameterGroup.from_parameter_group_name(
self, "AUPG-ParamGroup-1",
parameter_group_name="default.aurora-postgresql10",
)
)
aurora_cluster.connections.allow_from(
connectors_sg, ec2.Port.tcp(3306),
"Allow MySQL access from Lambda (because Aurora actually exposes PostgreSQL on port 3306)",
)