如何通过CloudFormation整合.ebextensions实现Elastic Beanstalk HTTP转HTTPS
解决Elastic Beanstalk环境HTTP转HTTPS重定向的CloudFormation整合方案
核心思路
EB的CloudFormation原生资源确实不支持直接配置监器重定向,但可以通过把.ebextensions配置打包进应用版本,让EB环境在创建时自动加载执行这个配置——.ebextensions能自动关联当前EB环境的负载均衡器资源,不需要手动处理ARN的问题。
步骤1:编写.ebextensions重定向配置
在项目根目录创建.ebextensions文件夹,里面新建01-http-to-https.config文件,内容如下(针对应用负载均衡器):
Resources: AWSEBV2LoadBalancerListener: Type: AWS::ElasticLoadBalancingV2::Listener Properties: LoadBalancerArn: Ref: AWSEBV2LoadBalancer Port: 80 Protocol: HTTP DefaultActions: - Type: redirect RedirectConfig: Protocol: HTTPS Port: '443' Host: '#{host}' Path: '/#{path}' Query: '#{query}' StatusCode: HTTP_302
注:如果使用经典负载均衡器,需要替换为对应经典LB的监听器配置逻辑。
步骤2:打包应用版本
把你的应用代码(比如后端服务、静态文件)和.ebextensions文件夹一起打包成ZIP包,确保.ebextensions在ZIP的根目录(不能嵌套在子文件夹里)。然后将这个ZIP上传到你的S3存储桶。
步骤3:在CloudFormation模板中整合
更新你的CloudFormation模板,添加AWS::ElasticBeanstalk::ApplicationVersion资源,并在环境资源中引用它:
Resources: # 假设已存在的EB应用资源 MyEBApplication: Type: AWS::ElasticBeanstalk::Application Properties: ApplicationName: MyApp # 新增应用版本,指向S3中打包好的文件 MyEBAppVersion: Type: AWS::ElasticBeanstalk::ApplicationVersion Properties: ApplicationName: !Ref MyEBApplication SourceBundle: S3Bucket: your-s3-bucket-name S3Key: path/to/your/app-with-ebextensions.zip # EB环境引用该应用版本 MyEBEnvironment: Type: AWS::ElasticBeanstalk::Environment Properties: ApplicationName: !Ref MyEBApplication VersionLabel: !Ref MyEBAppVersion # 你的其他环境配置(平台、实例类型等) SolutionStackName: "64bit Amazon Linux 2 v3.4.9 running Node.js 16" OptionSettings: # 配置HTTPS监听器的ACM证书 - Namespace: aws:elbv2:listener:443 OptionName: SSLCertificateArns Value: arn:aws:acm:us-east-1:123456789012:certificate/your-cert-arn - Namespace: aws:elbv2:listener:443 OptionName: Protocol Value: HTTPS
关键注意事项
- 确保EB环境的负载均衡器类型为应用负载均衡器,经典LB的重定向配置逻辑不同,需调整
.ebextensions中的资源类型。 - 提前在ACM申请并验证SSL证书,并在环境的
OptionSettings中配置443端口的证书。 - 打包ZIP时,
.ebextensions文件夹必须在根目录,EB才会识别并执行里面的配置。 - 若已有环境,更新模板重新部署时,需确保应用版本是新的(修改
VersionLabel或替换S3中的ZIP)。
内容的提问来源于stack exchange,提问作者ed__
相关产品推荐
相关产品推荐

