AWS Elastic Beanstalk: 无法通过EB CLI部署到工作环境

8
我已经为我的eb应用程序创建了一个工作环境,以利用其使用cron.yaml的“定期任务”功能(位于应用程序根目录中)。它是一个简单的sinatra应用程序(目前只有这样),我想使用它向相应的Web服务器环境发出请求。
但是,我在通过eb cli部署时遇到了问题。下面是当我运行“eb deploy”时发生的情况。
╰─➤  eb deploy
Creating application version archive "4882".
Uploading myapp/4882.zip to S3. This may take a while.
Upload Complete.
INFO: Environment update is starting.
ERROR: Service:AmazonCloudFormation, Message:Stack named 'awseb-e-1a2b3c4d5e-stack'
aborted operation. Current state: 'UPDATE_ROLLBACK_IN_PROGRESS'
Reason: The following resource(s) failed to create: [AWSEBWorkerCronLeaderRegistry].

我已经查看了CloudFormation仪表板以检查可能的错误。在阅读有关AWSEBWorkerCronLeaderRegistry的信息时,我发现它很可能是一个被更新/创建的DynamoDB表格。但是,当我查看DynamoDB仪表板时,没有列出任何表格。如往常一样,感谢任何帮助、反馈或指导。

实例配置文件是否具有DynamoDB权限? - Nick Humrich
我通过EB Web控制台创建了环境。我假设(也许是错误的?)安装过程会创建访问dynamodb所需的权限。我该如何授予环境安全组/角色的访问权限? - Kurt Mueller
2
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.iam.roles.apps.html - Nick Humrich
4个回答

3

1
我们遇到了同样的问题,并通过将AmazonDynamoDBFullAccess附加到Elastic Beanstalk角色(在我们的情况下命名为aws-elasticbeanstalk-ec2-role)来解决它。

很遗憾,我刚刚尝试了相同的方法,但对我来说并没有解决问题。 - Kylotan

1
我正在使用 Codepipeline 部署我的 worker,但一直遇到同样的错误。最终,我尝试为 AWS-CodePipeline-Service 提供 AmazonDynamoDBFullAccess 策略,似乎解决了这个问题。

1
根据Anthony的建议,从其他服务(例如CodePipeline)触发部署时,其服务角色需要具有dynamodb:CreateTable权限才能在DynamoDB中创建Leader Registry表(有关更多信息,请参见下文)。添加Full Access权限是一种不好的做法,应该避免。另外,托管策略AWSElasticBeanstalkWorkerTier没有适当的权限,因为它是为了让worker访问DynamoDB并检查它们是否是当前领导者而设计的。
1. 找到试图创建表格的角色:
- 进入CloudTrail > Event History - 过滤事件名称: CreateTable - 确保错误代码为AccessDenied - 定位角色名称(如AWSCodePipelineServiceRole-us-east-1-dev):

Cloud Trail Screenshot CloudTrail Error Details

2. 添加权限:

  • 前往IAM > 角色
  • 在列表中找到相应的角色
  • 附加一个策略:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "CreateCronLeaderTable",
            "Effect": "Allow",
            "Action": "dynamodb:CreateTable",
            "Resource": "arn:aws:dynamodb:*:*:table/*-stack-AWSEBWorkerCronLeaderRegistry*"
        }
    ]
}

3. 检查结果:

  1. 通过触发流水线进行重新部署
  2. 检查 Elasticbeanstalk 是否有错误
  3. 可选地,前往 CloudTrail 并确保此次请求成功。

您可以在任何时候使用此技术,以确保附加到何种权限上。

关于 Cron Leader 表格

来自 定期任务文档

Elastic Beanstalk 使用领导者选举来确定工作环境中的哪个实例将周期性任务排队。每个实例都尝试通过写入 Amazon DynamoDB 表格来成为领导者。第一个成功的实例是领导者,并且必须继续写入表格以维护领导者状态。如果领导者停止服务,则另一个实例会迅速取代它。

对于那些想知道的人,此 DynamoDB 表格使用 10 RCU 和 5 WCU,已由始终免费的套餐覆盖。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接