Удаление служб ECS с помощью Ansible

#amazon-web-services #ansible #yaml #amazon-ecs

Вопрос:

Я пытаюсь удалить четыре службы ECS с помощью Ansible 2.9.13. Я знаю, что Ansible не может удалять службы ECS с запущенными задачами, поэтому я попытался установить значение desire_count равным «0», а затем удалить его:

 - name: Set Service Tasks to 0
  ecs_service:
    name:  "{{service}}"
    state: present
    desired_count: 0
    cluster:  "{{cluster_name}}"
    task_definition: "{{service_data.services[0].taskDefinition}}"
    region: "{{region}}"

- name: Delete OLD ECS service
  ecs_service:
    state: absent
    name:  "{{service}}"
    cluster:  "{{cluster_name}}"
    region: "{{region}}"
 

Это сработало для первой службы, но не сработало на второй с этой ошибкой:

 "msg": "It is not possible to update the load balancers of an existing service"
 

Кто-нибудь сталкивался с этой проблемой? Есть какие-нибудь предложения, как это обойти?

Комментарии:

1. Немного из Google-Fu сказал, что целое число порта контейнера иногда читается как строка. Я уточнил это, получив информацию и добавив ее обратно в код, containerPort: "{{service_data.services[0].loadBalancers[0].containerPort | int}}" но я все равно получаю ту же ошибку. 🙁

2. Привет, сначала удалите правило ALB, затем целевую группу, затем службу AWS ECS.

Ответ №1:

Ладно, думаю, я все понял. Он продолжал думать, что я пытаюсь изменить балансировщик нагрузки, но это было не так. Понятия не имею, почему. Поэтому я решил захватить всю информацию об ALB и просто передать ее непосредственно в модуль. Это сделало свое дело.

Поскольку только две из четырех служб фактически имеют балансировщик нагрузки, это создало еще одну проблему. Это не сработало бы на тех, кто БЕЗ. Обошел это, добавив условное условие. Итак, вот последний беспорядок:

 - name: Get Service Data
  ecs_service_info:
    cluster: "{{cluster_name}}"
    region: "{{region}}"
    service: "{{service}}"
    details: true
  register: service_data

- set_fact: with_lb=true
  when: service_data.services[0].loadBalancers|length == 1

- set_fact: with_lb=false
  when: service_data.services[0].loadBalancers|length == 0

- name: Set Tasks with ALB to 0
  ecs_service:
    name: "{{service}}"
    state: present
    desired_count: 0
    cluster: "{{cluster_name}}"
    load_balancers:
      - containerPort: "{{service_data.services[0].loadBalancers[0].containerPort | int}}"
        containerName: "{{service_data.services[0].loadBalancers[0].containerName}}"
        targetGroupArn: "{{service_data.services[0].loadBalancers[0].targetGroupArn}}"
    task_definition: "{{service_data.services[0].taskDefinition}}"
    region: "{{region}}"
  when: with_lb|bool

- name: Set Remaining Tasks to 0
  ecs_service:
    name: "{{service}}"
    state: present
    desired_count: 0
    cluster: "{{cluster_name}}"
    task_definition: "{{service_data.services[0].taskDefinition}}"
    region: "{{region}}"
  when: not with_lb|bool

- name: Delete OLD ECS service
  ecs_service:
    state: absent
    name:  "{{service}}"
    cluster:  "{{cluster_name}}"
    region: "{{region}}"
 

Ваше здоровье!