AWS elastic beanstalk:部署时从 S3 下载文件时出现 Errno 404

Ale*_*erF 6 amazon-s3 amazon-iam elastic-beanstalk

我正在关注有关在将新实例部署到 Elastic beanstalk 时从 s3 获取证书的文档。说明非常简单:在下面创建一个配置文件,app-root/.ebextensions内容如下:

Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Auth:
          type: "s3"
          buckets: ["elasticbeanstalk-us-west-2-123456789012"]
          roleName: 
            "Fn::GetOptionSetting": 
              Namespace: "aws:autoscaling:launchconfiguration"
              OptionName: "IamInstanceProfile"
              DefaultValue: "aws-elasticbeanstalk-ec2-role"
files:
  # Private key
  /etc/pki/tls/certs/server.key:
    mode: "000400"
    owner: root
    group: root
    authentication: "S3Auth"
    source: https://s3-us-west-2.amazonaws.com/elasticbeanstalk-us-west-2-123456789012/server.key
Run Code Online (Sandbox Code Playgroud)

其中链接指向您的证书/密钥/其他内容上的位置。

但是,当我部署应用程序包(zip)时,构建失败,并[Errno 404] HTTP Error 404...提示在指定位置找不到我的文件,这与文件位于精确指定位置的事实相反,因为我可以从命令行(相同)当然是地区)。aws s3 cp s3://<pasted-link-to-file> .

另外,从表面上看,这似乎不是权限问题,因为如果是的话,我预计会出现“拒绝访问”之类的信息;存储桶策略授予以下操作aws-elasticbeanstalk-ec2-role

"Action": [
    "s3:ListBucket",
    "s3:ListBucketVersions",
    "s3:GetObject",
    "s3:GetObjectVersion"
]
Run Code Online (Sandbox Code Playgroud)

aws-elasticbeanstalk-ec2-role我还在IAM 中附加了完整的 s3 访问策略。

但事实上,我可以从 cli 访问这些文件,但aws-elasticbeanstalk-ec2-role找不到它们,这表明 a) 我的设置可能有问题:s3 上的文件、s3 权限、配置.ebextensions或 b) 有关此事的 aws 文档完全不正常。

  • 这是一个有点宽泛的问题,但有人能建议这种设置还会出现什么问题吗?

Ale*_*erF 3

通过明确指定解决了这个问题:

roleName: "aws-elasticbeanstalk-ec2-role"
Run Code Online (Sandbox Code Playgroud)

代替:

roleName: 
  "Fn::GetOptionSetting": 
    Namespace: "aws:autoscaling:launchconfiguration"
    OptionName: "IamInstanceProfile"
    DefaultValue: "aws-elasticbeanstalk-ec2-role"
Run Code Online (Sandbox Code Playgroud)

.ebextensions/my_conf.config

这可能是因为配置文件密钥和 S3 策略引用“roleName”而不是“IamInstanceProfile”。

  • 只是为了添加一点颜色,因为我最近遇到了同样的问题,404 消息的发生是因为为了获取角色的凭据,elastic beanstalk 查询端点。当角色无效/不存在时,该端点将返回 404 并作为错误消息传递。 (2认同)