코드 생성 없이 기획 및 정책 만 정의. 구현은 별도 단계에서 진행.
현재 적용 : Policy B — production만 적용. 단일 버킷 logpush-r2, 단일 Job newsfork-seeds-workers, 시크릿 LOGPUSH_R2_ACCESS_KEY / LOGPUSH_R2_SECRET_KEY 2개만 사용. See LOGPUSH_UNIFY_PLAN.md .
validate → provision (D1, KV, Queues) → deploy [→ deploy-production]
provision : D1·KV 병렬 생성 → wrangler.jsonc 갱신 → Queues 생성 → artifact 업로드
deploy : artifact 다운로드 → wrangler deploy → wrangler tail (선택)
환경 : dev(기본), staging, production (wrangler env)
구조화 로깅 : src/lib/logger.ts — JSON 로그, Logpush 연동을 염두에 둔 설계
tech-stack : Cloudflare Logpush 명시
docs : DEBUGGING_IMPROVEMENTS.md에 Logpush 수동/자동 설정 개요 존재
Logpush Job 생성/관리 자동화
환경별 Logpush 대상(R2 버킷/prefix) 정책
provision/verify 단계에 Logpush 포함
Logpush용 시크릿·권한 정책 문서화
항목 내용 API 범위 Account 레벨: GET/POST /accounts/{account_id}/logpush/jobs Workers 로그 데이터셋 workers_trace_events (Workers Paid 플랜 필요) 대상 R2, S3, GCS, HTTP 등. 본 프로젝트는 R2 전제 인증 API Token에 Logs Write 권한 필요. R2 사용 시 R2 API Token(Access Key + Secret) 별도
r2://<BUCKET_PATH>/{DATE}?account-id=<ACCOUNT_ID>&access-key-id=<R2_ACCESS_KEY_ID>&secret-access-key=<R2_SECRET_ACCESS_KEY>
{DATE}: 일별 폴더 분리 권장 (예: 2026-01-29)
버킷은 미리 생성되어 있어야 함
R2 API Token은 Logpush Job 생성 시 destination_conf에 포함 (시크릿 관리 정책 필요)
EventTimestampMs, Outcome, Exceptions, Logs, ScriptName, CPUTimeMs, WallTimeMs, EventType, ScriptVersion 등
output_options.field_names로 푸시 필드 선택 가능
이미 logger.ts에서 내보내는 JSON 구조와 조합해 분석·보관 정책 설계 가능
provision 단계
기존: D1, KV, Queues
추가: Logpush용 R2 버킷 확인/생성 , Logpush Job 생성/갱신
verify 단계
기존: D1, KV, Queues 존재 여부
추가: Logpush Job 존재 여부 및 enabled 여부
환경 Logpush 적용 R2 버킷 비고 dev Skip — — staging Skip — — production 단일 Job logpush-r2Provision/Verify는 production 배포 시에만 실행 (Policy B)
Job 이름 : 단일 newsfork-seeds-workers (환경 접미사 없음).
시크릿 : LOGPUSH_R2_ACCESS_KEY, LOGPUSH_R2_SECRET_KEY 2개만 사용.
provision
기존 D1/KV/Queues 유지
(선택) Logpush용 R2 버킷 생성 또는 기존 버킷명 확인
Logpush API로 Job 생성 또는 업데이트
destination_conf에 환경별 버킷/prefix
dataset: workers_trace_events
output_options: 필드·timestamp 형식 등 (팀 정책에 따라 고정)
wrangler.jsonc는 리소스 ID만 갱신하는 현재 방식 유지
Logpush Job ID는 wrangler에 없으므로, 필요 시 별도 artifact(예: logpush-job-ids-${{ env }}.json)로 전달 가능
verify
기존 D1/KV/Queues 검증 유지
GET /accounts/{account_id}/logpush/jobs로 해당 환경용 Job 존재 및 enabled: true 확인
deploy
변경 없음. Worker 배포 후 로그는 기존처럼 Logpush가 R2로 푸시
Logpush Job 생성/수정 실패 시: provision 실패로 처리 (현재 D1/KV 실패와 동일)
verify에서 Logpush Job 없음/비활성: verify 실패로 처리
R2 버킷 부재: provision 단계에서 버킷 생성 또는 명시적 실패로 종료
정책 항목 dev staging production Logpush Job 생성 Skip Skip 생성 R2 로그 버킷 — — logpush-r2 (단일)verify에서 Logpush 검사 Skip Skip 수행
production만 : Provision/Verify는 DEPLOY_ENV=production 일 때만 실행.
Cloudflare API Token
기존: CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID (GitHub Secrets)
추가 권한: Logs Write (Logpush Job 생성/수정용)
R2 API Token (Logpush 전용)
wrangler.jsonc·소스코드에 넣지 않음
GitHub Secrets: 2개만 사용
LOGPUSH_R2_ACCESS_KEY (Access Key ID 값)
LOGPUSH_R2_SECRET_KEY (Secret Access Key 값)
R2 토큰 권한: 버킷 logpush-r2 에 대한 쓰기 만 부여 (최소 권한)
R2 버킷 : logpush-r2 (단일, Cloudflare에서 미리 생성)
Logpush Job 이름 : newsfork-seeds-workers (단일, 환경 접미사 없음)
Logpush는 wrangler 리소스 가 아님.
D1/KV/Queues처럼 wrangler.jsonc에 binding으로 들어가지 않음
따라서:
wrangler.jsonc에는 Logpush 설정을 넣지 않음
Job ID·destination_conf는 provision 스크립트 + API 로만 관리
필요 시 “provision 결과”를 artifact로 남기고(예: Job ID), deploy에서는 사용하지 않아도 됨
README 또는 OPERATIONS.md
Logpush 활성화 환경: staging, production
필요한 GitHub Secrets: Cloudflare (Logs Write), Logpush용 R2 (Access Key ID / Secret)
로그 보관 위치: R2 버킷명 및 path 규칙 ({DATE} 등)
docs/DEBUGGING_IMPROVEMENTS.md
“5. Cloudflare Logpush 통합”을 이 기획 문서(LOGPUSH_INTEGRATION_PLAN.md)로 링크하고, “자동화는 LOGPUSH_INTEGRATION_PLAN 기준으로 구현” 명시
.github/scripts/steps/provision-logpush.sh
환경 변수: DEPLOY_ENV, CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_API_TOKEN, LOGPUSH_R2_ACCESS_KEY, LOGPUSH_R2_SECRET_KEY
production일 때만 실행. R2 버킷 logpush-r2 존재 확인 → Logpush Job newsfork-seeds-workers 생성/업데이트
.github/scripts/lib/logpush-api.sh
Logpush API 호출 공통 함수 (list jobs, create job 등)
.github/scripts/steps/verify-resources.sh
기존 검증 뒤 “Logpush Job 존재 및 enabled” 검사 추가 (production만 )
provision-resources.sh
D1/KV/Queues 이후 provision-logpush.sh 호출 (환경이 production일 때만 )
구분 내용 워크플로우 provision에서 production일 때만 Logpush Job 생성/갱신, verify에서 production일 때만 Job 검증. deploy는 변경 없음. 환경 production만 Logpush 적용. dev/staging은 Skip.시크릿 LOGPUSH_R2_ACCESS_KEY, LOGPUSH_R2_SECRET_KEY 2개만. Cloudflare Token에 Logs Write.리소스 R2 버킷 logpush-r2 (단일), Job 이름 newsfork-seeds-workers. wrangler.jsonc에는 Logpush 미포함. 규칙 cloudflare-logpush.mdc, deployment.mdc에 Logpush 단계 명시.
이 문서는 기획·정책 을 정의하며, 구현은 .github/scripts/ 및 .cursor/rules/ 에 반영되어 있다.
bash -n .github/scripts/lib/logpush-api.sh
bash -n .github/scripts/steps/provision-logpush.sh
bash -n .github/scripts/steps/provision-resources.sh
bash -n .github/scripts/steps/verify-resources.sh
# dev / staging: Logpush 스킵 (exit 0)
DEPLOY_ENV = dev bash .github/scripts/steps/provision-logpush.sh
DEPLOY_ENV = staging bash .github/scripts/steps/provision-logpush.sh
# production + CLOUDFLARE_ACCOUNT_ID 없음 → exit 1 (Account ID 필요)
DEPLOY_ENV = production bash .github/scripts/steps/provision-logpush.sh
# production + Account ID 있음 + R2 시크릿 없음 → exit 1 (LOGPUSH_R2_ACCESS_KEY / LOGPUSH_R2_SECRET_KEY 필요)
CLOUDFLARE_ACCOUNT_ID = test DEPLOY_ENV = production bash .github/scripts/steps/provision-logpush.sh