【问题标题】: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 或 typescript)创建 Aurora Serverless 数据库集群,另外连接 lambda 以查询一些数据?
【发布时间】:2019-03-06 08:30:12
【问题描述】:

我正在寻找一个示例来创建使用新 AWS-CDK(基于 Java 或 typescript)创建的 Aurora Serverless 数据库集群。此外,该示例应使用与数据库集群的连接创建一个 lambda 函数并查询一些数据。

【问题讨论】:

    标签: aws-serverless amazon-aurora aws-cdk


    【解决方案1】:

    我的第一次尝试是使用

    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。另请参阅打开 cdk 问题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());
    

    另见:

    Creating an Aurora Serverless Cluster from cloudformation?

    AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html

    https://awslabs.github.io/aws-cdk/refs/_aws-cdk_aws-rds.html

    【讨论】:

      【解决方案2】:

      我知道您要求提供 Java 或 TypeScript 示例,但我的母语是 Python,所以我只有一个 Python 示例供您参考。亚马逊文档确实提供了有关如何将 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)",
              )
      

      【讨论】:

      • 这没有回答问题 - OP 正在寻找如何创建 Aurora Serverless 集群,但您的示例显示了一个普通的 Aurora 集群
      猜你喜欢
      • 2021-08-19
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 2019-01-23
      • 2020-10-16
      • 2021-02-22
      • 2020-01-07
      • 1970-01-01
      相关资源
      最近更新 更多