如何通过AWS CDK为Kinesis Data Analytic应用添加VPC配置
AWS CDK部署VPC内KDA应用实现方案
当前CDK的Kinesis Data Analytics L2高级构造确实没有封装VPC配置参数,直接使用L1级CloudFormation资源CfnApplication即可完成配置,L1资源和AWS API、CloudFormation的能力完全对齐,不需要等待CDK官方更新L2层封装。
前置准备
- 提前规划KDA应用部署的VPC、子网、安全组:如果使用私有子网,需要确保子网有公网出口(NAT网关)或配置了对应AWS服务的VPC端点,避免KDA无法拉取依赖、上报运行状态。
- 给KDA绑定的执行角色提前授权EC2网络接口相关操作权限,包括
ec2:CreateNetworkInterface、ec2:DescribeNetworkInterfaces、ec2:DeleteNetworkInterface,否则应用启动时会因为无法创建弹性网卡报错。
代码示例(TypeScript CDK)
import * as cdk from 'aws-cdk-lib'; import * as ec2 from 'aws-cdk-lib/aws-ec2'; import * as kda from 'aws-cdk-lib/aws-kinesisanalyticsv2'; import { Construct } from 'constructs'; export class KdaVpcStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // 引用已有VPC、安全组,也可以根据需求在栈内新建 const targetVpc = ec2.Vpc.fromLookup(this, 'WorkVpc', { vpcId: 'vpc-替换为你的VPCID' }); const kdaSg = ec2.SecurityGroup.fromSecurityGroupId(this, 'KdaSg', 'sg-替换为你的安全组ID'); const deploySubnets = targetVpc.selectSubnets({ subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS }).subnetIds; // 创建VPC内的KDA Flink应用 new kda.CfnApplication(this, 'VpcKdaApp', { runtimeEnvironment: 'FLINK-1_18', // 按需替换为你使用的Flink版本 serviceExecutionRole: 'arn:aws:iam::替换为你的账号ID:role/kda-execution-role', applicationName: 'vpc-inner-kda-demo', applicationConfiguration: { // Flink作业基础配置 flinkApplicationConfiguration: { parallelismConfiguration: { configurationType: 'CUSTOM', parallelism: 2, autoScalingEnabled: false }, checkpointConfiguration: { configurationType: 'CUSTOM', checkpointingEnabled: true, checkpointInterval: 60000 } }, // 作业代码配置,以下示例为从S3加载Jar包 applicationCodeConfiguration: { codeContentType: 'ZIPFILE', codeContent: { s3ContentLocation: { bucketArn: 'arn:aws:s3:::替换为存作业代码的S3桶名', fileKey: 'your-flink-job.jar' } } }, // 核心VPC配置,和AWS SDK参数完全一致 vpcConfigurations: [ { subnetIds: deploySubnets, securityGroupIds: [kdaSg.securityGroupId] } ] } }); } }
补充说明
- 如果你使用的是KDA SQL版本,只需要将
runtimeEnvironment替换为对应SQL版本标识,把flinkApplicationConfiguration替换为sqlApplicationConfiguration即可,vpcConfigurations配置块完全通用。 - L1构造创建的资源和L2构造创建的资源没有本质区别,后续如果CDK L2层原生支持VPC配置,可以平滑迁移,不会导致资源重建。
- 部署完成后可以在KDA控制台的网络配置页看到绑定的VPC、子网、安全组信息,和控制台手动配置的效果完全一致。
- 注意:KDA挂载的安全组默认不需要开放入站规则,只需要根据业务访问需求配置出站规则即可。
内容的提问来源于stack exchange,提问作者priyadhingra19
相关产品推荐
相关产品推荐

