You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python CDK为Elastic Beanstalk应用负载均衡器配置HTTPS

通过CDK为Elastic Beanstalk ALB配置HTTPS监听器的方案

方案一:直接在EB环境中配置HTTPS监听器

不需要提前创建独立ALB,通过CDK定义EB环境时,指定负载均衡器的HTTPS配置参数即可:

  • 确保已在AWS Certificate Manager(ACM)中持有目标域名的SSL证书
  • 在CDK中创建EB环境时,添加OptionSetting配置项,针对aws:elbv2:listener:443命名空间设置以下参数:
    • ListenerEnabled: true
    • Protocol: HTTPS
    • SSLCertificateArns: 你的ACM证书ARN
    • DefaultProcess: default(或自定义进程名)
    • 可选:设置aws:elbv2:listener:80的ListenerEnabled为false,禁用HTTP访问

示例CDK代码(TypeScript):

import * as cdk from 'aws-cdk-lib';
import * as elasticbeanstalk from 'aws-cdk-lib/aws-elasticbeanstalk';
import * as acm from 'aws-cdk-lib/aws-acm';

export class EbHttpsStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // 引用已存在的ACM证书,或在此创建新证书
    const sslCert = acm.Certificate.fromCertificateArn(this, 'SslCert', 'arn:aws:acm:us-east-1:123456789012:certificate/xxxx-xxxx-xxxx-xxxx');

    const app = new elasticbeanstalk.CfnApplication(this, 'MyApp', {
      applicationName: 'MyEBApp',
    });

    const env = new elasticbeanstalk.CfnEnvironment(this, 'MyEnv', {
      applicationName: app.applicationName,
      solutionStackName: '64bit Amazon Linux 2 v3.4.10 running Node.js 16', // 根据你的运行时选择对应栈
      optionSettings: [
        // 配置HTTPS监听器
        {
          namespace: 'aws:elbv2:listener:443',
          optionName: 'ListenerEnabled',
          value: 'true',
        },
        {
          namespace: 'aws:elbv2:listener:443',
          optionName: 'Protocol',
          value: 'HTTPS',
        },
        {
          namespace: 'aws:elbv2:listener:443',
          optionName: 'SSLCertificateArns',
          value: sslCert.certificateArn,
        },
        {
          namespace: 'aws:elbv2:listener:443',
          optionName: 'DefaultProcess',
          value: 'default',
        },
        // 可选:禁用HTTP 80端口
        {
          namespace: 'aws:elbv2:listener:80',
          optionName: 'ListenerEnabled',
          value: 'false',
        },
        // 指定负载均衡器类型为Application Load Balancer
        {
          namespace: 'aws:elasticbeanstalk:environment',
          optionName: 'LoadBalancerType',
          value: 'application',
        },
      ],
    });
  }
}

方案二:提前创建独立ALB并关联到EB环境

如果需要对ALB做更复杂的自定义配置(比如额外监听器、WAF关联等),可以提前创建ALB并关联到EB环境:

  1. 提前创建ALB、目标组和HTTPS监听器:在CDK中独立创建ALB,关联ACM证书配置HTTPS监听器,并创建对应目标组
  2. 配置EB环境使用自定义负载均衡器:通过EB选项设置指定已创建的ALB和目标组ARN,同时确保EB实例端口与目标组匹配

注意事项:

  • 提前创建的ALB需与EB环境在同一VPC,子网配置匹配
  • EB的Auto Scaling Group会自动注册到指定目标组,无需手动关联
  • 确保ALB安全组允许EB实例的应用端口流量(如5000/8080)

示例CDK代码片段:

import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as elbv2 from 'aws-cdk-lib/aws-elasticloadbalancingv2';

// 引用现有VPC
const vpc = ec2.Vpc.fromLookup(this, 'Vpc', { vpcId: 'vpc-xxxxxx' });

// 提前创建ALB
const alb = new elbv2.ApplicationLoadBalancer(this, 'CustomALB', {
  vpc: vpc,
  internetFacing: true,
});

// 创建EB实例对应的目标组
const targetGroup = new elbv2.ApplicationTargetGroup(this, 'EbTargetGroup', {
  vpc: vpc,
  port: 80,
  protocol: elbv2.ApplicationProtocol.HTTP,
  targetType: elbv2.TargetType.INSTANCE,
});

// 添加HTTPS监听器
alb.addListener('HttpsListener', {
  port: 443,
  protocol: elbv2.ApplicationProtocol.HTTPS,
  certificates: [elbv2.ListenerCertificate.fromCertificateArn(sslCert.certificateArn)],
  defaultAction: elbv2.ListenerAction.forward([targetGroup]),
});

// 创建EB环境并关联自定义ALB
const env = new elasticbeanstalk.CfnEnvironment(this, 'MyEnv', {
  applicationName: app.applicationName,
  solutionStackName: '64bit Amazon Linux 2 v3.4.10 running Node.js 16',
  optionSettings: [
    {
      namespace: 'aws:elasticbeanstalk:environment',
      optionName: 'LoadBalancerType',
      value: 'application',
    },
    {
      namespace: 'aws:elbv2:loadbalancer',
      optionName: 'LoadBalancerArn',
      value: alb.loadBalancerArn,
    },
    {
      namespace: 'aws:elbv2:targetgroup',
      optionName: 'TargetGroupArn',
      value: targetGroup.targetGroupArn,
    },
    // 配置EB实例端口与目标组一致
    {
      namespace: 'aws:elasticbeanstalk:environment:process:default',
      optionName: 'Port',
      value: '80',
    },
  ],
});

关键说明

  • 方案一操作更简洁,无需管理独立ALB,所有配置通过EB选项完成,EB会自动维护ALB与ASG的关联
  • 方案二适合需要高度自定义ALB配置的场景

内容的提问来源于stack exchange,提问作者schierkolk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 07:57:18