Установка экземпляра EC2 обратно в ELB работала в 90% случаев. К сожалению, в последнее время регулярное развертывание не удается со следующей ошибкой:
15:51:59 TASK: [Start the app] *********************************************************
15:51:59 changed: [app-01a] => {"changed": true, "enabled": true, "name": "app", "state": "started"}
15:51:59
15:51:59 TASK: [Wait for the app to be ready] ******************************************
15:52:17 ok: [app-01a] => {"changed": false, "elapsed": 17, "path": null, "port": 8080, "search_regex": null, "state": "started"}
15:52:17
15:52:17 TASK: [Check health check on localhost] ***************************************
15:52:22 ok: [app-01a] => {"cache_control": "must-revalidate,no-cache,no-..."status": 200,...
15:52:22
15:52:22 TASK: [Exit if health check fails] ********************************************
15:52:22 skipping: [app-01a]
15:52:22
15:52:22 TASK: [Register restapp instance back into load balancer] *********************
15:52:39 failed: [app-01a -> 127.0.0.1] => (item=app-ELB) => {"failed": true, "item": "app-ELB"}
15:52:39 msg: The instance i-b1234567 could not be put in service on LoadBalancer:app-ELB. Reason: Instance has not passed the configured HealthyThreshold number of health checks consecutively.
15:52:39
15:52:39 FATAL: all hosts have already failed -- aborting
Это код Ansible:
- name: Start the app
service: name={{ app_name }} state=started enabled=yes
- name: Wait for the app to be ready
wait_for: port={{ app_port }} state=started timeout=120
- name: Check health check on localhost
action: uri url=http://localhost:8081/healthcheck
register: webpage
- name: Exit if health check fails
command: /bin/false
when: webpage.status != 200
- name: Register restapp instance back into load balancer
sudo: false
local_action:
module: ec2_elb
instance_id: "{{ appInstanceId }}"
ec2_elbs: "{{ item }}"
state: 'present'
region: "eu-west-1"
with_items: appLoadBalancer
Настройки ELB:
Вероятно, вам нужно изменить цель ping с HTTP: 8081 / pin (обрезано) на HTTP: 8081 / healthcheck, как в вашей игре с Ansible.
Это ожидаемое поведение AWS. Если вы исправите свое приложение, ELB повторно включит трафик для вашей конечной точки. Попытка принудительно запустить автономный хост идет вразрез с тем, что пытаются выполнить проверки работоспособности.
Вы не можете сделать это в консоли ELB, и даже удаление и повторное добавление хоста потребует от вас дождаться прохождения проверки работоспособности, прежде чем будет передан трафик.
Если вы хотите, чтобы хост возвращался к работе быстрее, измените допуски проверки работоспособности.