部署 ruby​​-on-rails 项目时出现错误“属性侦听器不能为空”

问题描述

我是 AWS Cloudformation 的新手。我的 Elastic Beanstalk Worker 使用 Ruby on Rails。 EB 是一个基于 cloudformation 模板的 Stack。 不知道为什么,最近部署(eb deploy)时,Event报错如下:

enter image description here

AWSEBLoadBalancer 不在模板的 Resources: 中。但我在源代码.ebextensions 中找到了它。

Resources:
  AWSEBLoadBalancer:
    Properties:
      AccessLoggingPolicy:
        EmitInterval: 5
        Enabled: true
        S3BucketName:
          Ref: LogsBucket
    Type: "AWS::ElasticLoadBalancing::LoadBalancer"
    DependsOn: "LogsBucketPolicy"

  LogsBucket:
    DeletionPolicy: Retain
    Type: "AWS::S3::Bucket"

  LogsBucketPolicy:
    Properties:
      Bucket:
        Ref: LogsBucket
      PolicyDocument:
        Statement:
          -
            Action:
              - "s3:PutObject"
            Effect: Allow
            Principal:
              AWS:
                ? "Fn::FindInMap"
                :
                  - Region2ELBAccountId
                  -
                    Ref: "AWS::Region"
                  - AccountId
            Resource:
              ? "Fn::Join"
              :
                - ""
                -
                  - "arn:aws:s3:::"
                  -
                    Ref: LogsBucket
                  - /AWSLogs/
                  -
                    Ref: "AWS::AccountId"
        

你能给我一些解决这个问题的提示吗?

解决方法

错误消息指出您缺少 Listeners。使用 Listeners,您的平衡器定义将类似于(需要修改为您自己的设置):

  AWSEBLoadBalancer:
    Properties:
      Listeners:
        - InstancePort: 80
          InstanceProtocol: HTTP
          LoadBalancerPort: 80
          #PolicyNames: 
          #  - String
          Protocol: HTTP
          #SSLCertificateId: String
      AccessLoggingPolicy:
        EmitInterval: 5
        Enabled: true
        S3BucketName:
          Ref: LogsBucket
    Type: "AWS::ElasticLoadBalancing::LoadBalancer"
    DependsOn: "LogsBucketPolicy"