Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ jobs:
docker push "$IMAGE_LATEST"
docker push "$IMAGE_SHA"

# 배포에 필요한 설정 5개(nginx conf·provision 스크립트·alloy 공용 블록 2파일·healthcheck 블록) SSH 연결
# 배포에 필요한 설정(nginx conf·provision 스크립트·alloy 공용 블록 3파일·healthcheck·슬롯 블록) SSH 연결
# 1회로 함께 올린다. 각각 scp 하면 핸드셰이크·액션 셋업이 반복돼 수십 초라 한 임시 집결 디렉토리
# (/tmp/piki-deploy)에 안착시킨다 — strip_components: 2 로 depth-3 소스는 파일명만 남고, alloy 블록
# (depth-4)은 alloy/ 하위(/tmp/piki-deploy/alloy/*)로 남아 provision-runtime.sh 가 그 경로로 호출한다(#743).
Expand All @@ -219,6 +219,7 @@ jobs:
infra/scripts/provision-runtime.sh,
shared-infra/blocks/alloy/config.alloy,
shared-infra/blocks/alloy/provision-alloy.sh,
shared-infra/blocks/alloy/provision-alloy-ssm.sh,
shared-infra/blocks/healthcheck.sh,
shared-infra/blocks/run_container.sh,
shared-infra/blocks/slot_decide.sh,
Expand Down
23 changes: 7 additions & 16 deletions infra/scripts/provision-runtime.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@
# docker 명령은 sudo 없이(ubuntu 가 docker 그룹), 시스템·nginx 는 sudo 로 — deploy.yml 기존 패턴과 동일.
set -euo pipefail

# dockerized aws-cli — mysql(3절)·alloy(4절)의 SSM pull 이 공유한다. 박스엔 aws cli 가 없다.
# dockerized aws-cli — mysql(3절)의 SSM pull 이 쓴다. 박스엔 aws cli 가 없다.
# 이미지 핀은 deploy.yml 의 SSM pull 과 같은 버전을 쓴다.
# (alloy(4절)는 공용 블록 provision-alloy-ssm.sh 가 자기 핀으로 조회하므로 이 값을 쓰지 않는다.)
AWSCLI_IMAGE="public.ecr.aws/aws-cli/aws-cli:2.35.21"

# 1) swap — 메모리 906Mi 라 1G swap 이 필수다. 없을 때만 생성하고 fstab 에 등록해 재부팅에도 유지되게 한다.
Expand Down Expand Up @@ -133,20 +134,10 @@ fi
# validate 게이트·--network host·호스트 마운트·Running 확인은 전부 블록이 책임진다.
# 자격증명(GRAFANA_*)은 SSM 공유 경로(/piki/observability/grafana-*)에서 박스가 직접 읽는다(#771) —
# 세 서비스 박스가 같은 경로를 읽어 토큰 회전이 1곳 put-parameter 로 끝난다. GH secrets 경유 폐기.
# 필수 5종(metrics·logs URL/USER, token) 실패는 즉시 중단, traces 2종은 빈 값 허용(블록이 더미로 무해 처리).
obs_param() {
docker run --rm --network host "$AWSCLI_IMAGE" ssm get-parameter --name "/piki/observability/$1" --with-decryption --region ap-northeast-2 --query Parameter.Value --output text
}
GRAFANA_METRICS_URL="$(obs_param grafana-metrics-url)" || { echo "[alloy] SSM grafana-metrics-url 조회 실패 — IAM(app_ssm_read)·파라미터 존재 확인"; exit 1; }
GRAFANA_METRICS_USER="$(obs_param grafana-metrics-user)" || { echo "[alloy] SSM grafana-metrics-user 조회 실패"; exit 1; }
GRAFANA_LOGS_URL="$(obs_param grafana-logs-url)" || { echo "[alloy] SSM grafana-logs-url 조회 실패"; exit 1; }
GRAFANA_LOGS_USER="$(obs_param grafana-logs-user)" || { echo "[alloy] SSM grafana-logs-user 조회 실패"; exit 1; }
GRAFANA_CLOUD_TOKEN="$(obs_param grafana-cloud-token)" || { echo "[alloy] SSM grafana-cloud-token 조회 실패"; exit 1; }
GRAFANA_TRACES_URL="$(obs_param grafana-traces-url)" || GRAFANA_TRACES_URL=""
GRAFANA_TRACES_USER="$(obs_param grafana-traces-user)" || GRAFANA_TRACES_USER=""
export GRAFANA_METRICS_URL GRAFANA_METRICS_USER GRAFANA_LOGS_URL GRAFANA_LOGS_USER
export GRAFANA_TRACES_URL GRAFANA_TRACES_USER GRAFANA_CLOUD_TOKEN
echo "[alloy] Grafana 자격 SSM 로드 완료 (/piki/observability/grafana-*)"
# **그 조회 자체도 공용 블록(provision-alloy-ssm.sh) 소관이다** — 예전엔 이 스크립트가 직접 읽었으나
# 같은 로직이 extractor·renderer 에도 복제돼 있어, 경로나 실패 정책이 바뀌면 세 곳을 함께 고쳐야 하고
# 하나만 빠뜨리면 그 박스만 조용히 어긋났다(TeamPiKi/infra#50 에서 블록으로 추출).
# 필수 5종(metrics·logs URL/USER, token) 실패는 즉시 중단, traces 2종은 빈 값 허용 — 블록이 판정한다.
# 수집 대상은 컨테이너 label opt-in(piki.observe 등, contracts/observability.md) — 서비스 열거 regex 와
# cross-box scrape(EXTRACTOR_METRICS_TARGET)는 폐기됐다(extractor prod 박스는 자체 Alloy 가 수집).
# 전환기 잔재 정리: 구 수집기(team3-alloy)·구 config 경로가 남으면 새 수집기(piki-alloy, 블록이 기동)와
Expand All @@ -158,7 +149,7 @@ if docker inspect team3-alloy >/dev/null 2>&1; then
|| { echo "[alloy] 구 수집기(team3-alloy) 제거 실패 - 이중 수집 방지를 위해 중단"; exit 1; }
fi
sudo rm -rf /etc/alloy-team3
bash /tmp/piki-deploy/alloy/provision-alloy.sh \
bash /tmp/piki-deploy/alloy/provision-alloy-ssm.sh \
--config /tmp/piki-deploy/alloy/config.alloy \
--name piki-alloy \
--environment "${ENVIRONMENT:?ENVIRONMENT 미주입 — deploy.yml envs 확인}" \
Expand Down
Loading