使用 AWS CodeBuild 和 EB CLI 部署到 AWS Elastic Beanstalk

Posted

技术标签:

【中文标题】使用 AWS CodeBuild 和 EB CLI 部署到 AWS Elastic Beanstalk【英文标题】:Deploying to AWS Elastic Beanstalk using AWS CodeBuild and EB CLI 【发布时间】:2019-02-14 11:11:02 【问题描述】:

我正在尝试设置 AWS Codebuild 以将应用程序部署到 AWS Elastic Beanstalk。

问题在于,AWS CodeBuild 似乎无法使用 EB CLI(似乎应该阅读此内容...https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli-codebuild.html

所以当我在 CodeBuild 上指定 eb cli 命令时:

version: 0.2

phases:
  install:
    commands:
      - echo Logging into Amazon ECR...
      - eb init --platform "multi-container-docker-18.03.1-ce-(generic)" --region us-west-1 application

我明白了:

/codebuild/output/tmp/script.sh: eb: not found

我还尝试使用以下命令安装 CLI:

- pip install --upgrade awsebcli awscli
- eb init --platform "multi-container-docker-18.03.1-ce-(generic)" --region us-west-1 application

并扩展生成的 AWS CodeBuild 角色,使其具有对 Elastic Beanstalk 的完全访问权限

但我收到此错误:

ERROR: NotAuthorizedError - Operation Denied. Access Denied

我在命令中添加了--debug 标志,这就是确切的错误:

2018-09-10 13:33:55,151 (DEBUG) ebcli.lib.aws : Making api call: (elasticbeanstalk, describe_configuration_settings) to region: us-west-1 with args:'ApplicationName': 'application', 'EnvironmentName': 'staging'
2018-09-10 13:33:55,495 (DEBUG) ebcli.lib.aws : Response: 'Error': 'Type': 'Sender', 'Code': 'InsufficientPrivilegesException', 'Message': 'Access Denied', 'ResponseMetadata': 'RequestId': '32f4e739-1694-4aa2-9e2e-076ec4861ae7', 'HTTPStatusCode': 403, 'date': 'Mon, 10 Sep 2018 13:33:55 GMT', 'RetryAttempts': 0
2018-09-10 13:33:55,495 (DEBUG) ebcli.lib.aws : API call finished, status = 403

我错过了什么吗?如何正确使用 CodeBuild 中的 EB CLI?

【问题讨论】:

你什么时候收到NotAuthorizedError @progfan 我在调用eb init后收到错误消息 你能做到eb init --debug吗?这将显示堆栈跟踪,但在导致它的行中,还应该指示哪个 API 调用失败。这可能是Making api call: (<service name>, <operation>) 类型的最后一个调试日志语句。您可能需要向您的用户角色授予该服务 + 操作的权限。 @progfan 我添加了调试标志,我可以看到更精确的错误,我用错误更新了问题。我可以看到“DescribeConfigurationSettings”端点正在返回 403 状态,但我已经将该策略附加到服务角色(通过授予完全访问权限)。 是否有可能因为 CodeBuild 服务和 beanstalk 应用程序位于不同的区域而发生此错误? 【参考方案1】:

事实证明,EBCLI 需要的不仅仅是 Elastic Beanstalk 策略。这就是为什么即使我为 Elastic Beanstalk 附加了完全访问策略,我仍然收到身份验证错误。

我为了解所需策略所做的是创建一个对所有服务具有完全访问权限的 IAM 角色,并将其附加到 AWS CodeBuild 项目。

然后,转到IAM Roles -> Role name -> Access advisor,您可以准确查看项目使用的策略,以便为服务创建适当的角色。

注意事项:

最近的活动通常会在 4 小时内出现。 (您可能不会立即看到 Access Advisor 中使用的所有服务) 您可以首先使用 AWSElasticBeanstalkFullAccess 内置策略而不是 AdministratorAccess 策略来确定 eb 客户端正在使用哪些服务

【讨论】:

以上是关于使用 AWS CodeBuild 和 EB CLI 部署到 AWS Elastic Beanstalk的主要内容,如果未能解决你的问题,请参考以下文章

Newman:未知编码:在 AWS CodeBuild 上运行 Newman cli 时弹出 latin1

AWS EB CLI Django

在 Mac OS 上安装 aws eb cli

AWS:使用 Elastic Beanstalk 命令行界面 (EB CLI) 3.x SSH 到 EC2

aws elasticbeanstalk:无法通过 eb cli 部署到工作环境

如何在 EB CLI 中更改用户?