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

如何为ECS Fargate负载均衡器绑定自定义安全组或集成CloudFront

解决方案

一、为自动创建的负载均衡器绑定自定义安全组

Docker Compose部署ECS Fargate时,自动生成的Application Load Balancer可通过x-aws-cloudformation字段覆盖配置,添加自定义安全组。修改你的docker-compose.yml,在x-aws-cloudformation.Resources下新增ApplicationLoadBalancer配置:

services:
  application:
    image: 000.dkr.ecr.us-east-1.amazonaws.com/org/pos:latest
    platform: linux/amd64
    env_file: .env.${ENV}
    build:
      context: "."
    ports:
      - 80:80
    restart: always
    networks:
      - mail
      - app_network
  postfix:
    image: 000.dkr.ecr.us-east-1.amazonaws.com/org/postfix:latest
    platform: linux/amd64
    build:
      context: "postfix"
    container_name: postfix
    networks:
      - mail
      - app_network
    hostname: postfix
    restart: always
networks:
  app_network:
      name: tcetra_network
  mail:
    name: postfix-mail
x-aws-cloudformation:
  Resources:
    ApplicationLoadBalancer:
      Properties:
        SecurityGroups:
          - sg-0828b05baf4899773
    ApplicationTCP80Listener:
      Properties:
        Certificates:
          - CertificateArn: "arn:aws:acm:us-east-1:088048903606:certificate/d7a330ce-77d6-4753-bcf0-913f8ac0cee3"
        Protocol: HTTPS
        Port: 443
    ApplicationTCP80TargetGroup:
      Properties:
        HealthCheckPath: /health.html
        Matcher:
          HttpCode: 200-499

关键说明:

  • ApplicationLoadBalancer是Docker Compose自动生成的负载均衡器资源固定名称,直接覆盖其SecurityGroups属性即可绑定指定安全组。
  • 需确保自定义安全组sg-0828b05baf4899773已配置入站规则,放行来自CloudFront的流量(可使用AWS前缀列表com.amazonaws.global.cloudfront.origin-facing批量允许所有CloudFront源站IP)。

二、在Docker Compose中通过CloudFormation创建CloudFront分发

若需直接在配置中创建CloudFront分发,可在x-aws-cloudformation.Resources中添加CloudFrontDistribution资源,配置指向负载均衡器的源站、缓存规则等:

x-aws-cloudformation:
  Resources:
    ApplicationLoadBalancer:
      Properties:
        SecurityGroups:
          - sg-0828b05baf4899773
    ApplicationTCP80Listener:
      Properties:
        Certificates:
          - CertificateArn: "arn:aws:acm:us-east-1:088048903606:certificate/d7a330ce-77d6-4753-bcf0-913f8ac0cee3"
        Protocol: HTTPS
        Port: 443
    ApplicationTCP80TargetGroup:
      Properties:
        HealthCheckPath: /health.html
        Matcher:
          HttpCode: 200-499
    CloudFrontDistribution:
      Type: AWS::CloudFront::Distribution
      Properties:
        DistributionConfig:
          Enabled: true
          Origins:
            - Id: ECSALBOrigin
              DomainName: !GetAtt ApplicationLoadBalancer.DNSName
              CustomOriginConfig:
                HTTPPort: 80
                HTTPSPort: 443
                OriginProtocolPolicy: https-only
          DefaultCacheBehavior:
            TargetOriginId: ECSALBOrigin
            ViewerProtocolPolicy: redirect-to-https
            AllowedMethods:
              - GET
              - HEAD
              - OPTIONS
              - POST
              - PUT
              - PATCH
              - DELETE
            CachedMethods:
              - GET
              - HEAD
              - OPTIONS
            DefaultTTL: 3600
            ForwardedValues:
              QueryString: true
              Cookies:
                Forward: all
          ViewerCertificate:
            AcmCertificateArn: "arn:aws:acm:us-east-1:088048903606:certificate/d7a330ce-77d6-4753-bcf0-913f8ac0cee3"
            SslSupportMethod: sni-only
            MinimumProtocolVersion: TLSv1.2_2021

关键说明:

  • 使用!GetAtt ApplicationLoadBalancer.DNSName自动引用负载均衡器的域名,无需手动填写。
  • CloudFront要求关联的ACM证书必须部署在us-east-1区域,确保你的证书符合该要求。
  • 可根据业务需求调整缓存行为、允许的HTTP方法、TTL等配置项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:20:28