Ops 자동화 및 스크립트
1) 운영을 자동화하는 이유
MTTR/인적 오류를 줄이고 방출 및 반응을 가속화합니다.
행동을 반복 및 감사 가능하게 만듭니다 (규정 준수).
일상적인 것이 아니라 개선을위한 엔지니어의 시간을 확보하십시오
2) 기본 원칙
1. 이념성: 재실행 → 동일한 결과.
2. 안전 난간: 드라이 런, 확인, 한계, 자동 롤백.
3. 관찰 가능성: 로그/메트릭/트레일은 각 스크립트/파이프 라인에 내장되어 있습니다.
4. 설정> 코드의 상수: 모두 매개 변수/표시를 통해.
5. GitOps/Docs-as-Code: 트랜잭션 코드는 다양하고 검토되며 테스트됩니다.
6. 작은 단계: 카나리아 로브, 배치, 예산으로 재배치.
7. 리포지토리에는 비밀이 없습니다. 비밀 저장소를 통해서만 가
3) 자동화 작업 클래스
개선 및 사고: 롤백, 공급자 스위치, 저하 기능 플래그.
계획된 작업: 인증서/키의 회전, 데이터베이스 마이그레이션 (확장 → 마이그레이션 → 계약).
인프라 관리: IaC (Terraform), 구성 (Ansible), K8이 나타납니다.
데이터 및 DataOps: 백필, ETL, 품질 검증.
Xaoc/DR 연습: 보안 게이트가있는 고장 시뮬레이션.
4) 도구 선택 방법
배쉬-짧은 접착제 스크립트, CLI 오케스트레이션.
파이썬 - 논리/SDK, retrai, API는 JSON/YAML과 협력합니다.
불가능한-dempotent 구성, 에이전트가 필요하지 않습니다.
Terraform은 선언적 인프라입니다.
Kubernetes Jobs/CronJobs-배치 작업/스케줄링.
Argo/Airflow-종속 DAG 및 오케스트레이션.
ChatOps-감사와의 대화에서 안전하게 시작합니다.
5) 자동화 아키텍처 (참조)
CLI/ChatOps → 컨트롤러 (GitOps/오케 스트레이터) → 공연자 (Ansible/Terraform/K8s Job) → 모니터링 (로그/메트릭/트레일) → 감사/발권 → 도킹 아티팩트 (증거).
6) 이념과 상태 관리
"확인, 변경": 감지-행동 (이미 괜찮은 경우-아무것도하지 마십시오).
긴 절차를 위해 "상태/잠금" 을 저장하십시오.
반복적 인 실행 가능성으로 절차를 원자 단계로 나눕니다.
7) 버그, 퇴각 및 롤백
지수 지연 및 지터가있는 Retrai.
작동 시간 예산 (작업 당 총 SLA).
롤백 및 회로 차단기는 항상 제공됩니다.
명시 적 반환 코드 및 구조화 된 오류.
8) 보안 및 비밀
RBAC/ABAC, 최소 권한, 임시 토큰 (JIT/JEA).
Vault/KMS/Cloud Secret Manager의 비밀; 키가 회전합니다.
"직무 분리": 누가 글을 쓰는지는 승인하고 시작하는 사람이 아닙니다.
감사 로그: 결과가 누구/언제/무엇인지.
9) GitOps! ChatOps
PR → 테스트 → 검토 → 자동 프로모션을 환경에 병합합니다.
채팅에서 명령 (예: '/ops 배포 체크 아웃-카나리아 5% ') 으로 인해 파이프 라인이 발생합니다. 봇은 증거와 링크를 대시 보드에 적용합니다.
10) 계획 및 오케스트레이션
종속성과 마감일이있는 CronJobs/DAG.
경쟁: 작업에 따라 '금지', '교체', '허용' (K8).
prod를 "먹지" 않기위한 자원 정책/할당량.
11) 자동화의 관찰 가능성
메트릭: 성공/오류, 지속 시간, 배상, 영향을받는 객체.
로그: 오류시 구조화 된 상관 관계 ID, 빨간색 줄.
추적: 긴 작업 단계는 분산 추적으로 표시됩니다.
경고: 증상 (SLO) 및 기술 지표 (마감일, 오류의%).
12) 테스트 및 시뮬레이션
논리 및 아티팩트 파서의 단위 테스트.
샌드 박스 및 카나리아의 통합 테스트.
"시뮬레이터" (드라이 런 + 더미 제공 업체) 는 실제 시나리오를 재생합니다.
운동: 명확한 목표, 보안 게이트, AAR → RCA → CAPA.
13) 코드 템플릿
배쉬 (난간이있는 골격)
bash
!/usr/bin/env bash set -Eeuo pipefail trap 'echo "[ERR] line $LINENO"; exit 1' ERR
log(){ printf '%s %s\n' "$(date -Iseconds)" "$"; }
DRY=${DRY_RUN--true}
ensure_dep(){ command -v "$1" >/dev/null { echo "need $1"; exit 2; }; }
apply_change(){
local target="$1"
if [[ "$DRY" == "true" ]]; then log "[DRY] would update $target"
else kubectl apply -f "$target"
fi
}
main(){
ensure_dep kubectl for f in manifests/.yaml; do apply_change "$f"
done log "done"
}
main "$@"
파이썬 (Retrai + Idempotency)
python import argparse, time, json, sys from pathlib import Path import requests
def with_retries(fn, attempts=5, base=0. 2):
for i in range(attempts):
try:
return fn()
except Exception as e:
sleep = base (2i)
time. sleep(sleep)
raise
def already_done(marker):
return Path(marker). exists()
def mark_done(marker):
Path(marker). write_text("ok")
def main():
ap = argparse. ArgumentParser()
ap. add_argument("--endpoint", required=True)
ap. add_argument("--marker", default="/tmp/op. marker")
args = ap. parse_args()
if already_done(args. marker):
print("idempotent: nothing to do"); return
def call():
r = requests. post(args. endpoint, json={"action":"rotate"})
r. raise_for_status()
return r. json()
resp = with_retries(call)
print(json. dumps(resp))
mark_done(args. marker)
if __name__ == "__main__":
sys. exit(main())
불가능한 (demempotent 작업)
yaml
- hosts: web become: true tasks:
- name: Ensure nginx present and enabled ansible. builtin. package:
name: nginx state: present
- name: Deploy config ansible. builtin. template:
src: nginx. conf. j2 dest: /etc/nginx/nginx. conf mode: '0644'
notify: restart nginx handlers:
- name: restart nginx ansible. builtin. service:
name: nginx state: restarted
Kubernetes CronJob (계획된 회전)
yaml apiVersion: batch/v1 kind: CronJob metadata:
name: cert-rotate spec:
schedule: "0 3 "
concurrencyPolicy: Forbid jobTemplate:
spec:
template:
spec:
serviceAccountName: ops-automation restartPolicy: OnFailure containers:
- name: rotator image: registry/ops/rotator:1. 2. 3 args: ["--rotate", "--budget-ms=60000"]
envFrom:
- secretRef: { name: rotator-secrets }
GitHub 작업 (ChatOps 트리거)
yaml name: ops-deploy on:
workflow_dispatch:
inputs:
service: {required: true}
canary: {required: false, default: "5"}
jobs:
deploy:
runs-on: ubuntu-latest steps:
- uses: actions/checkout@v4
- run:./scripts/deploy. sh "${{ inputs. service }}" --canary "${{ inputs. canary }}"
14) 구현 점검표
- 각 작업마다 도구가 선택되고 런북이 설명됩니다.
- 드라이 런, 확인 및 한계 (난간) 가 있습니다.
- 로그가 구조화되고 메트릭과 경고가 연결됩니다.
- 스토리지의 비밀, 최소 및 임시 액세스.
- 테스트 (단위/통합/카나리아) 및 시뮬레이션 수행.
- GitOps/PR 검토가 필요하며 감사가 있습니다.
- 롤백 계획 및 성공 기준이 문서화되었습니다.
- 자동화는 SLO/오류 예산과 관련이 있습니다.
15) 반 패턴
dempotency 및 롤백이없는 스크립트.
"코드의 비밀" 수퍼 관리자가 모든 것을 설명합니다.
감사없이 판매에서 수동 편집.
선언적 IaC 대신 청키 배쉬 동물원.
코드에서 "보호 된" 매개 변수 - 재사용 금지.
드라이 런/카나리아 → 큰 폭발은 없습니다.
구조와 상관 관계없이 "사람을위한" 로그.
16) Ops 자동화 성숙도 지표
적용 범위: 자동화 및 런북 작업의%.
자동 작업의 성공률/재시도 속도.
평균 실행 시간 및 정시.
자동화 전/후 실패율 변경.
감사 완료: 완전한 증거가있는 운영의%.
보안: 키/인증서 회전 시간, JIT 액세스 공유.
17) 결론
Ops 자동화는 이질적인 스크립트 세트가 아니라 시스템입니다. 이러한 시스템에서 운영은 빠르고 예측 가능하며 감사 할 수있게되며 비즈니스는 안정적인 릴리스와 사고 위험이 낮습니다.