【问题标题】:AWS CDK Athena Data SourceAWS CDK Athena 数据源
【发布时间】:2021-12-14 20:41:25
【问题描述】:

如何在 AWS CDK 中创建 Athena 数据源,它是使用 AthenaJdbcConnector 与 MySQL 数据库的 JDBC 连接?

我相信我可以使用aws-samCfnApplication 来创建AthenaJdbcConnector Lambda,但是如何将它连接到Athena?

我注意到 CDK 中的许多 Glue 支持将转移到 Athena(数据目录),并且在 QuickSight 等其他模块中有几个 CfnDataSource 类型,但我在 CDK 中的 Athena 下没有看到任何内容。

请参阅下面的图片和参考资料。

参考资料:

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-athena aws-cdk aws-sam


    【解决方案1】:

    我一直在玩同样的问题。这是我为联合查询(Typescript)创建 Lambda 所做的:

        const vpc = ec2.Vpc.fromLookup(this, 'my-project-vpc', {
            vpcId: props.vpcId
        });
    
        const cluster = new rds.ServerlessCluster(this, 'AuroraCluster', {
            engine: rds.DatabaseClusterEngine.AURORA_POSTGRESQL,
            parameterGroup: rds.ParameterGroup.fromParameterGroupName(this, 'ParameterGroup', 'default.aurora-postgresql10'),
            defaultDatabaseName: 'MyDB',
            vpc,
            vpcSubnets: {
                onePerAz: true
            },
            scaling: {autoPause: cdk.Duration.seconds(0)} // Optional. If not set, then instance will pause after 5 minutes
        });
    
        let password = cluster.secret!.secretValueFromJson('password').toString()
    
        let spillBucket = new Bucket(this, "AthenaFederatedSpill")
    
    
        let lambdaApp = new CfnApplication(this, "MyDB", {
            location: {
                applicationId: "arn:aws:serverlessrepo:us-east-1:292517598671:applications/AthenaJdbcConnector",
                semanticVersion: "2021.42.1"
            },
            parameters: {
                DefaultConnectionString: `postgres://jdbc:postgresql://${cluster.clusterEndpoint.hostname}/MyDB?user=postgres&password=${password}`,
                LambdaFunctionName: "crossref_federation",
                SecretNamePrefix: `${cluster.secret?.secretName}`,
                SecurityGroupIds: `${cluster.connections.securityGroups.map(value => value.securityGroupId).join(",")}`,
                SpillBucket: spillBucket.bucketName,
                SubnetIds: vpc.privateSubnets[0].subnetId
            }
        })
    

    如果您使用 Athena 中的 AWS 控制台向导连接到数据源,这将创建具有默认连接字符串的 lambda。不幸的是,不可能通过 CDK 添加 Athena 目录特定的连接字符串。它应该在 Lambda 上设置为环境变量,但我发现没有办法做到这一点。应用程序模板根本不允许这样做,所以这是一个手工的后期处理。如果他们有解决方案,我肯定想听听任何人的意见!

    还请注意,我直接在 jdbc URL 中添加了用户/密码。我想使用 SecretsManager,但由于 Lambda 部署在 VPC 中,它只是拒绝连接到 secretsmanager。我认为这可以通过向 SSM 添加私有 VPN 连接来解决。再说一次 - 我想听听任何尝试过的人。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 2021-04-02
    • 2021-10-05
    • 2020-11-22
    • 2021-06-01
    相关资源
    最近更新 更多