【问题标题】:Spring Cloud AWS and FargateSpring Cloud AWS 和 Fargate
【发布时间】:2019-08-18 03:53:13
【问题描述】:

我将使用 Spring Cloud AWS (2.1.0.RELEASE) 的应用程序从 ECS/EC2 实例移动到 ECS/Fargate,它在启动时崩溃,无法从实例中检索凭据。

EC2 实例没有凭据,所以这是一个意外。在这两种情况下,角色都应提供所需的所有权限。应用程序本质上需要访问参数存储,仅此而已。

任何人都可以确认这应该工作/正常工作吗?我不确定要调试什么。

编辑:我被要求提供示例代码。我没有编写任何 Java 代码,所以我在下面分享了配置。

我的pom.xml 包括:

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-aws-parameter-store-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-aws-autoconfigure</artifactId>
        </dependency>

src/main/resources/bootstrap.yml 内我有:

spring:
  application:
    name: myapp
  cloud:
    consul:
      enabled: false
      config:
        enabled: false
aws:
  paramstore:
    enabled: false
cloud:
  aws:
    stack:
      auto: false
    credentials:
      instance-profile: false
    region:
      static: eu-west-2
      auto: false

src/main/resources/bootstrap-aws.yml 内(通过命令行上的aws 配置文件激活):

aws:
  paramstore:
    prefix: /services/app
    default-context: common
    profile-separator: '_'
    fail-fast: true
    enabled: true

【问题讨论】:

  • 能显示相关代码吗?
  • 不确定您要的是什么 - 不涉及 Java 代码。该库会根据检测到的环境执行此操作。
  • 您真的希望有人在不提供有关您应用的任何详细信息的情况下帮助您吗?!回答您的问题:是的,我可以确认 Spring Cloud AWS 正在与 Fargate 合作。

标签: amazon-web-services spring-boot spring-cloud


【解决方案1】:

我现在与 Fargate 合作。它与 Java 应用程序无关,它与 ECS 部署权限有关,我将尝试解释。

ECS:EC2

ECS 默认使用 EC2 实例来部署任务(持有容器)。它在每个 EC2 实例上使用一个 ECS 代理来执行此操作,这反过来又与 Docker 引擎联系;默认情况下,此 ECS 代理没有权限,这意味着它无法下载私有映像(例如从 ECR),也无法将日志写入 CloudWatch(例如)。

为了解决这个问题,我们创建了一个 IAM 角色并使用 ExecutionRoleArn(在 CloudFormation 中)引用它来启动任务。 IAM 角色需要 ecr 权限和日志权限。

现在,我匆匆忙忙地为此添加了参数存储权限,没有多加考虑,嘿,我的应用程序正在愉快地运行并获取参数存储值。 事实证明在 EC2 模式下,授予 ECS 代理的权限由正在运行的容器(我的应用程序)继承。

ECS:Fargate

切换到 Fargate,上述中断。 ExecutionRoleArn 仍然相关,但不被正在运行的容器继承。所以没有必要为其提供参数存储权限。

添加到任务定义TaskRoleArn 并将其指向另一个角色。这次在这个新角色中提供调用您的容器(应用程序)所需的 AWS 服务的权限 - 参数存储、S3、SQS 等。

完成此操作后,我的应用程序很满意。如有任何更正,请随时更新,因为这是我迄今为止的理解和经验所写的。

ExecutionRoleArn 命名为AgentRoleArn 和将TaskRoleArn 命名为ApplicationRoleArn 可能更好,但这只是我的观点。

【讨论】:

    猜你喜欢
    • 2021-03-29
    • 2019-05-06
    • 2022-12-06
    • 2018-07-01
    • 1970-01-01
    • 2022-07-28
    • 2020-12-09
    • 2016-09-14
    • 2021-05-27
    相关资源
    最近更新 更多