首页 文章

AWS Elastic Beanstalk部署失败

提问于
浏览
4

当我尝试将Java Web应用程序部署到Elastic Beanstalk Tomcat容器时,它失败并出现以下错误:

Service:AmazonCloudFormation, Message:TemplateURL must reference a valid S3 object to which you have access.

请注意以下几点:

  • 通过在EC2服务器上运行的Jenkins自动部署 .

  • 此错误不是一个持续的问题 . 有时它已成功部署,但有时它因上述错误而失败 .

5 回答

  • 4

    我有这个确切的问题,从我可以说它是完全随机但它结果与IAM角色相关联 . 一切都运行良好,直到我添加 .ebextensions 与数据库迁移脚本,之后,我无法't get my Bamboo builder to work again. However I managed to figure it out (No thanks to Amazon'关于EB需要什么权限的不存在的文档 .

    我根据这个要点制定了IAM政策:https://gist.github.com/magnetikonline/5034bdbb049181a96ac9

    但是我不得不做一些修改 . 这个具体问题是由于S3的限制性政策过于严重,所以我只是替换了提供的那个

    {
        "Action": [
            "s3:Get*"
        ],
        "Effect": "Allow",
        "Resource": [
            "arn:aws:s3:::elasticbeanstalk-*/*"
        ]
    },
    

    这允许具有策略的用户对存储桶执行各种Get操作,因为我无法找到需要哪个特定的操作 .

  • 1

    上传到beanstalk包括将压缩的工件发送到S3以及修改cloudformation模板(这部分是免提) .

    可能附加到jenkins运行程序(或访问凭据)的IAM角色无法访问相关的S3存储桶 . 通过IAM确保这一点 . 见:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.iam.html

  • 0

    这是一个边缘案例,但我想在这里捕捉它为后代 . 有时可以将此错误消息作为一般错误消息返回 . 我花了很多时间与AWS一起解决这个错误,发现它与安全令牌服务(STS)凭据到期有关 . 生成STS凭据时,会话的最长持续时间为36小时 . 如果生成36小时密钥,则Elastic Beanstalk使用的某些服务不会考虑此会话长度并认为会话已过期 . 要解决此问题,我们不再允许会话长度超过2小时的STS凭据 .

  • -1

    我也在努力解决这个问题,就像Rick's case一样,它结果是一个权限问题 . 但他的解决方案对我没用 .

    我已经修好了

    服务:AmazonCloudFormation,消息:TemplateURL必须引用您有权访问的有效S3对象 .

    单独添加 "s3:Get*" 是不够的,我还需要 "s3:List*" .

    有趣的是,我只针对三个EB环境中的问题 . 事实证明,其他环境确实同时部署到所有节点,而有问题的环境已启用滚动更新(显然,执行其他操作,添加新实例等) .

    以下是最终的IAM策略:gist: IAM policy to allow Continuous Integration user to deploy to AWS Elastic Beanstalk

  • 0

    我遇到过同样的问题 . 根据我从AWS支持中收集的内容,IAM用户需要完全访问S3才能执行部署等操作 . 这是因为EB使用CloudFormation,它使用S3来存储模板 . 您需要将托管策略“AWSElasticBeanstalkFullAccess”附加到执行部署的IAM用户,或者创建如下所示的策略并将其附加到用户 .

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "s3:*",
                "Resource": "*"
            }
        ]
    }
    

    理想情况下,亚马逊应该有一种方法将资源限制为特定的存储桶,但它看起来不像现在可行!

相关问题