Amazon ECS 服务配置 return 恰好有 1 个结果,但得到 > '0'

Amazon ECS Service configuration return exactly 1 result, but got > '0'

我正在尝试使用 bamboo 更新 ECS 服务并收到以下错误:

Failed to fetch resource from AWS!

java.lang.RuntimeException: Expected DescribeServiceRequest for service 'my-service' to return exactly 1 result, but got '0' at net.utoolity.atlassian.bamboo.taws.aws.ECS.getSingleService(ECS.java:674) at net.utoolity.atlassian.bamboo.taws.ECSServiceTask.executeUpdate(ECSServiceTask.java:311) at net.utoolity.atlassian.bamboo.taws.ECSServiceTask.execute(ECSServiceTask.java:133) at net.utoolity.atlassian.bamboo.taws.AWSTask.execute(AWSTask.java:164) at com.atlassian.bamboo.task.TaskExecutorImpl.lambda$executeTasks(TaskExecutorImpl.java:319) at com.atlassian.bamboo.task.TaskExecutorImpl.executeTaskWithPrePostActions(TaskExecutorImpl.java:252) at com.atlassian.bamboo.task.TaskExecutorImpl.executeTasks(TaskExecutorImpl.java:319) at com.atlassian.bamboo.task.TaskExecutorImpl.execute(TaskExecutorImpl.java:112) at com.atlassian.bamboo.build.pipeline.tasks.ExecuteBuildTask.call(ExecuteBuildTask.java:73) at com.atlassian.bamboo.v2.build.agent.DefaultBuildAgent.executeBuildPhase(DefaultBuildAgent.java:203) at com.atlassian.bamboo.v2.build.agent.DefaultBuildAgent.build(DefaultBuildAgent.java:175) at com.atlassian.bamboo.v2.build.agent.BuildAgentControllerImpl.lambda$waitAndPerformBuild[=12=](BuildAgentControllerImpl.java:129) at com.atlassian.bamboo.variable.CustomVariableContextImpl.withVariableSubstitutor(CustomVariableContextImpl.java:185) at com.atlassian.bamboo.v2.build.agent.BuildAgentControllerImpl.waitAndPerformBuild(BuildAgentControllerImpl.java:123) at com.atlassian.bamboo.v2.build.agent.DefaultBuildAgent.run(DefaultBuildAgent.java:126) at com.atlassian.bamboo.utils.BambooRunnables.run(BambooRunnables.java:48) at com.atlassian.bamboo.security.ImpersonationHelper.runWith(ImpersonationHelper.java:26) at com.atlassian.bamboo.security.ImpersonationHelper.runWithSystemAuthority(ImpersonationHelper.java:17) at com.atlassian.bamboo.security.ImpersonationHelper.run(ImpersonationHelper.java:41) at java.lang.Thread.run(Thread.java:745)

我正在使用 Force new deployment 设置。

有什么想法吗?

我们无法立即识别我们代码库中的错误,这似乎是正在发生的事情:

为了将进度消息附加到 Bamboo 构建日志,我们需要调用 DescribeServices API action before the call to the actual UpdateService API 操作,当且仅当找不到目标服务时才会抛出异常。

所以乍一看 可能 是一个微妙的配置问题,当我使用 Bamboo 变量从前面的任务引用资源时,我时不时会遇到这种情况,它是例如,容易不小心复制和粘贴错误的变量名。

Amazon ECS 服务任务的 Update Service 操作的以下任何参数中的错误引用都会产生响应。任务操作失败并显示手头的错误消息,因为 DescribeServices API 调用本身会成功,但无法识别目标服务:

  • 连接器
  • 地区
  • 服务名称

例如,我刚刚使用不存在的服务名称重现了该问题:

24-Oct-2019 17:37:05    Starting task 'Update sample ECS service (w/ ELB) - 2 instances' of type 'net.utoolity.atlassian.bamboo.tasks-for-aws:aws.ecs.service'
24-Oct-2019 17:37:05    Setting maxErrorRetry=7 and awaitTransitionInterval=15000
24-Oct-2019 17:37:05    Using session credentials provided by Identity Federation for AWS app (connector variable: 6f6fc85d-4ea5-43ce-8e70-25aba33a5fda).
24-Oct-2019 17:37:05    Selecting region eu-west-1
24-Oct-2019 17:37:05    Updating service 'NOT-A-SERVICE' on cluster 'TAWS-IT270-100-ubot':
24-Oct-2019 17:37:06    Failed to fetch resource from AWS!
24-Oct-2019 17:37:06    java.lang.RuntimeException: Expected DescribeServiceRequest for service 'NOT-A-SERVICE' to return exactly 1 result, but got '0'
...

当然,错误消息在这里并不是很有帮助,我们需要考虑如何在我们的各种任务中更好地处理这种日志模式——实际的 UpdateServiceAPI 操作会产生在这种情况下更合适 ServiceNotFoundException 异常。

所以假设 'my-service' 已经启动并且 运行 在调用 'Update Service' 任务操作之前,请检查失败的 Bamboo 构建日志是否表明了这个特定问题,例如,偶然瞄准另一个地区?

我可以使用 Shell Script Task 解决问题,并在导出密钥后编写了一个 aws-cli 命令。此解决方法解决了问题:

aws ecs update-service --cluster my-cluster --service my-service --task-definition my-task-definition

所以 AWS ECS 工作正常,应该是 Bamboo 模块中的错误或配置错误。

但是正如另一个答案中提到的,最好的方法是检查配置是否正确。