amazon-web-services - AWS CDK Athena 数据源
问题描述
如何在 AWS CDK 中创建 Athena 数据源,该数据源是使用 JDBC 连接到 MySQL 数据库的AthenaJdbcConnector
?
我相信我可以使用aws-sam
'sCfnApplication
来创建AthenaJdbcConnector
Lambda,但是如何将它连接到 Athena?
我注意到 CDK 中的很多 Glue 支持将转移到 Athena(数据目录),并且在其他模块(例如 QuickSight)中有几种CfnDataSource
类型,但我在 CDK 中的 Athena 下没有看到任何内容。
请参阅下面的图像和参考。
参考:
解决方案
我一直在玩同样的问题。这是我为联合查询(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 连接来解决。再一次 - 我想听听任何尝试过的人。
推荐阅读
- java - 如何从 javadocs 生成 Swagger UI?
- excel - VBA ListView 控件错位在多页内的用户窗体上
- javascript - JavaScript 将参数传递给保持参数数据完整的函数
- javascript - 上传和显示图像 - ReactJs、Node.js
- list - 动态表数据渲染 react native
- function - 当您编写 Powershell 函数时,它在内存中持续多长时间?
- html - 如何更改我在后台找不到的一些文本
- c++ - ArrayFire GFOR 循环意外错误
- apache-spark - 如何在写入数据时使用“Salt”进行火花重新分区
- python - 如何将xml xpath解析为list python