AWS创建失败:服务已存在。(服务:AWSServiceDiscovery;状态码:400;错误代码:ServiceAlreadyExists;请求ID)

17

我刚接触 AWS,在尝试创建 ECS 集群中的 EC2 服务时遇到了一些问题。

我已经成功地在 cluster1 中创建了一个全新的服务 (service1),但之后我决定删除 cluster1 并创建 cluster2。当我尝试在 cluster2 中重新创建 service1 时出现了问题。每当我尝试添加该服务时,都会出现以下错误:

creation failed: Service already exists. (Service: AWSServiceDiscovery; Status Code: 400; Error Code: ServiceAlreadyExists; Request ID: d854025e-ebcc-11e8-84ab-b3bac906f2ef)

我该如何解决这个问题?我已经尝试注销任务定义,但没有用。 cluster1 已被删除,cluster2 中也没有服务。


1
你尝试过使用不同的名称创建服务吗? - mohit
@DJ_ 看起来你已经创建了 AWS Fargate 类型的服务?如果是的话,在你创建并启用了服务发现后,Route 53 下的托管区域(我猜是私有的)就会创建一个条目。然后请前往 Route 53 并删除清理与 ECS 服务相关的域区。 - Imran
@TenorFlyy,我可以知道在哪里可以找到自动缩放关联组吗?我已经检查了AWS CloudFormation堆栈,只有cluster2在其中,所以我认为问题可能不是来自那里? - DJ_
@Imran,我该如何通过命令行实现它?我已经尝试了一些命令,来自 https://docs.aws.amazon.com/cli/latest/reference/route53/index.html 但是没有一个能够给我提供服务发现数据。 - DJ_
@DJ_请检查我添加的完整答案。 - Imran
显示剩余5条评论
3个回答

30
这是完整的答案。当您创建 AWS ECS 服务并选择了可选的 ServiceDiscovery,它也会在 Route53 中创建一个命名空间(.local)和一个同名的服务(与ECS服务名称相同)。
当您删除 ECS 服务和集群时,它不会自动删除 Route53 命名空间/服务条目。现在,您会收到“Service already exists”错误,因为您的新 ECS 服务与 ServiceDiscovery 服务的同名匹配。您有三个选项。1. 清理 Route53 命名空间和服务。2. 如果要继续使用 ServiceDiscovery 功能,请重用 Route53 服务。3. 创建 ECS 服务时不启用服务发现集成。
选项1 -

{ "Services": [ { "Id": "srv-x4acveybedar32mv",

"Arn": "arn:aws:servicediscovery:us-east-1:1234567890:service/srv-x4acveybedar32mv", "Name": "nginx" } ] }

  • aws servicediscovery list-namespaces

{ "Namespaces": [ { "Id": "ns-3yd7pskwsxhwlq67", "Arn": "arn:aws:servicediscovery:us-east-1:1234567890:namespace/ns-3yd7pskwsxhwlq67", "Name": "local", "Type": "DNS_PRIVATE" } ] }

  • 首先,使用以下命令删除服务:aws servicediscovery delete-service --id "srv-x4acveybedar32mv"。CLI的结果为空响应。
  • 然后,使用以下命令删除命名空间:aws servicediscovery delete-namespace --id "ns-3yd7pskwsxhwlq67"

{ "OperationId": "s573v5dr62yee5d7vbfvsy5h65ybxmoh-jossalgs" }

  • 现在,您可以重新创建所需的ECS服务。

注意 -

有时,DNS清理操作需要几分钟才能正确反映,因此请等待一段时间后重试。

选项2 -

  • 通过选择现有服务而不是创建具有相同名称的服务,可以重复使用Route53服务。

enter image description here


您无法通过控制台删除Route53 ServiceDiscovery命名空间和服务,这让我有点困惑。感谢CLI命令,非常好用。 - Ilya Luzyanin
以前没有通过控制台删除资源的选项,但现在删除ECS服务时可能会有这个功能。 - Imran

1
应从AWS Cloud Map服务中删除。 使用AWS Cloud Map的ECS服务发现(基于DNS)。
这个问题的用例是,使用服务发现(基于DNS),删除ECS服务但不删除服务发现(在控制台中,您没有设置删除DNS私有区域中的整个复选框)。 尝试使用现有的整个创建服务。
AWS Cloud Map管理服务发现(和DNS私有区域)。
步骤:
1. 进入AWS Cloud Map 输入图像描述
2. 删除输入图像描述 输入图像描述

2
请问您能否指定删除的步骤或者相应的代码行/方法? - Pimenta
这对你有帮助吗? - Tomer

0

我使用的另一种简单方法如下:

  • 首先创建另一个服务(仅当您没有任何其他可见服务时),将其命名为“temp-service”
  • 在控制台中进入您拥有的服务(temp或任何...)
  • 现在您在浏览器中拥有完整的URL
  • 因此,只需将URL中您的服务名称替换为现有且不可见的服务即可
  • 然后,您可以轻松地更新或删除该服务

1: https://ap-northeast-1.console.aws.amazon.com/ecs/v2/clusters/mm-prod-ecs/services/mm-prod-aggregation-service/deployments?region=ap-northeast-1

2: https://ap-northeast-1.console.aws.amazon.com/ecs/v2/clusters/mm-prod-ecs/services/mm-prod-aggregation-service-lost/deployments?region=ap-northeast-1


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