이는 모두 온프레미스에서 호스팅되는 AWX 내에서 실행됩니다. AWS 내에서 일부 EC2 인스턴스를 관리하려고 합니다. 요새 점프를 설정했고 다른 모든 플레이가 올바르게 작동하도록 할 수 있습니다.
그러나 몇몇 개발자에게 제공하고 싶은 간단한 작업 템플릿이 하나 있습니다. 기본적으로 코드를 변경하면 opcache가 지워지고 CloudFront의 특정 파일이 무효화됩니다.
CloudFront API 호출(cloudfront_invalidations 모듈)이 AWX를 로컬에서 실행하고 이것이 성공하면 두 웹 서버 인스턴스에 PHP 및 Apache 프로세스를 다시 시작하도록 알리고 싶습니다.
---
- name: Restart httpd and php-fpm
remote_user: ec2-user
hosts: all
become: true
tasks:
- name: Invalidate paths in CloudFront
cloudfront_invalidation:
distribution_id: "{{ distribution_id }}"
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
target_paths: "{{ cloudfront_invalidations.split('\n') }}"
delegate_to: 127.0.0.1
notify:
- Restart service httpd
- Restart service php-fpm
handlers:
- name: Restart service httpd
service:
name: httpd
state: restarted
- name: Restart service php-fpm
service:
name: php-fpm
state: restarted
그러나 플레이를 실행할 때 'delegate_to' 작업을 무시하고 대신 각 호스트에 대해 무효화를 두 번 실행하는 것으로 보입니다. 실제로 로컬에서 실행되는지 확실하지 않습니다. run_once 플래그를 추가하려고 시도했지만 이는 한 호스트에서만 httpd + PHP를 다시 시작했습니다.
어떤 아이디어가 있나요?
답변1
모든 작업은 localhost에 위임하더라도 모든 호스트에 적용됩니다. 호스트가 2개라면 작업은 localhost에서 두 번 실행됩니다. run_once
"all"의 첫 번째 호스트에만 작업을 적용하는 데 사용할 수 있습니다 .
tasks:
- name: Invalidate paths in CloudFront
cloudfront_invalidation:
distribution_id: "{{ distribution_id }}"
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
target_paths: "{{ cloudfront_invalidations.split('\n') }}"
delegate_to: 127.0.0.1
run_once: true
notify:
- Restart service httpd
- Restart service php-fpm