如何配置 ElasticBeanstalk 来存储经典 ELB 的访问日志

How to configure ElasticBeanstalk to store access logs for classic ELB

我正在使用 Terraform 来配置 ElasticBeanstalk 应用程序。 EC2 实例被放入 Auto Scaling 组并通过(经典)Elastic Load Balancer 访问。

现在我需要在 S3 中存储对该负载均衡器的访问日志。 我看到可以从 Web 控制台手动执行(EC2/Load Balancers/Description/Attributes/Access 日志)。 Terraform 还允许为 aws_elb 配置访问日志(如果它不是由 ElasticBeanstalk 创建的)。 但是,ElasticBeanstalk 不允许仅针对应用程序负载均衡器配置经典负载均衡器(see docs)的访问日志。

所以问题是:如何配置 ElasticBeanstalk 来存储 经典负载均衡器 的访问日志?

我知道我可以更改平衡器类型,但我想避免这种情况。

您可以通过在部署包的根目录中创建一个 .ebextensions 目录并在其中保存一个配置文件来实现。这是我们使用的文件,它将 ELB 配置为每 5 分钟保存一次日志:

Resources:
  AWSEBLoadBalancer:
    Type: AWS::ElasticLoadBalancing::LoadBalancer
    Properties:
      AccessLoggingPolicy:
        EmitInterval: 5
        Enabled: true
        S3BucketName: "example-elb-logs"
        S3BucketPrefix: { "Fn::Sub" : "example/${AWSEBEnvironmentName}" }

如果您认为 "this looks a lot like a CloudFormation template" 您是对的:Beanstalk 将此目录中的片段添加到其基本模板中。

有关 .ebextensions 的更多信息:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions.html