UploadCpcLogWorker::perform | error on job 88615 - Function not found: arn:aws:lambda:eu-central-1:0
RCA: UploadCpcLogWorker - Function not found: cupix-json-collector-dc96
Error Log#
UploadCpcLogWorker::perform | error on job 88615 - Function not found: arn:aws:lambda:eu-central-1:002596530511:function:cupix-json-collector-dc96:$LATEST
Impact#
- Service:
cupixworks-worker - 발생 횟수: 46
- 최초 발생: 2026-04-06T07:47:10.310Z
- 최근 발생: 2026-04-07T06:41:47.385Z
Root Cause Summary#
EU 리전(eu-central-1)의 AWS Lambda 함수 cupix-json-collector-dc96가 존재하지 않거나 삭제되어, UploadCpcLogWorker가 create_capture_3d_reconstruction 종류의 job을 처리할 때 CPC JSON collector Lambda를 호출하면 Function not found 에러가 발생합니다. aws.yaml 설정에서 production-eu-central-1 환경의 cpc_json_collector_function_name이 cupix-json-collector-dc96으로 지정되어 있으나, 해당 Lambda 함수가 실제 AWS 계정의 eu-central-1 리전에 존재하지 않습니다. 이 에러는 EU 리전에서만 발생하며, 다른 리전(US, AU, CA 등)에서는 정상 동작합니다. 에러가 rescue StandardError로 잡혀서 Sidekiq retry 없이 무시되므로, 영향받는 capture의 CPC JSON 수집이 수행되지 않습니다.
Technical Analysis#
Code Path#
- Entry point:
app/workers/upload_cpc_log_worker.rb:5—perform(id)메서드 - Job 조회 후
jobable_type == 'Capture'인 경우만 처리 (upload_cpc_log_worker.rb:7-9) job.upload_cpc_part_log호출 후 (upload_cpc_log_worker.rb:11), job의 kind가create_capture_3d_reconstruction인 경우 Lambda 호출 진행 (upload_cpc_log_worker.rb:13-19)- Failure point:
lib/cupix/aws/lambda.rb:43—lambda_client.invoke()호출 시 AWS SDK가ResourceNotFoundException(Function not found) 발생
# app/workers/upload_cpc_log_worker.rb:5-25
def perform(id)
Cupix::Logger.info("UploadCpcLogWorker::perform | begins on job #{id}")
job = ::Job.find_by_id(id)
return if job.nil?
return if job.jobable_type != 'Capture'
job.upload_cpc_part_log
if job.kind == 'create_capture_3d_reconstruction'
capture_id = job.jobable_id
Cupix::Logger.info("UploadCpcLogWorker::perform | run cpc json collector on job #{id}, capture #{capture_id}")
Cupix::Aws::Lambda.run_cpc_json_collector(
model_name: 'captures',
model_key: capture_id
)
end
Cupix::Logger.info("UploadCpcLogWorker::perform | done on job #{id}")
rescue StandardError => e
Cupix::Logger.error("UploadCpcLogWorker::perform | error on job #{id} - #{e.message}")
end
Lambda 호출 코드에서 $AWS[:lambda][:cpc_json_collector_function_name] 값을 function name으로 사용:
# lib/cupix/aws/lambda.rb:39-59
def run_cpc_json_collector(opts = {})
raise Cupix::Errors::Argument.new(code: 'ARG10001', reason: 'model_name is blank') if opts[:model_name].blank?
raise Cupix::Errors::Argument.new(code: 'ARG10001', reason: 'model_key is blank') if opts[:model_key].blank?
resp = lambda_client.invoke(
function_name: $AWS[:lambda][:cpc_json_collector_function_name],
invocation_type: 'RequestResponse',
payload: {
bucket_name: $AWS[:s3][:cpc_results_bucket_name],
service_name: Cupix::Tesla.service_name,
model_name: opts[:model_name],
model_key: opts[:model_key]
}.to_json
)
resp
rescue => e
raise e
else
resp
end
Lambda client는 CUPIX_REGION 환경변수로 리전을 결정:
# app/models/concerns/aws_adapter/lambda.rb:8-10
def lambda_client
Aws::Lambda::Client.new region: ENV['CUPIX_REGION'] || 'us-west-2'
end
config/aws.yaml에서 production-eu-central-1 환경은 cupix-json-collector-dc96을 function name으로 지정:
# config/aws.yaml:501-502
lambda:
cpc_json_collector_function_name: 'cupix-json-collector-dc96'
기대 동작: Lambda client가 eu-central-1 리전에서 cupix-json-collector-dc96 함수를 invoke하면 CPC JSON 데이터가 수집됨.
실제 동작: AWS SDK가 ResourceNotFoundException을 반환 — 해당 함수가 eu-central-1 리전에 존재하지 않음. 에러가 rescue StandardError로 잡혀 로그만 남기고 worker가 종료됨.
Log Evidence#
사용한 Datadog 쿼리:
service:cupixworks-worker status:error "UploadCpcLogWorker" "Function not found"
Time range: 2026-04-06T06:00:00Z to 2026-04-07T07:30:00Z
46건 모두 동일한 에러 패턴 — 모두 eu-central-1 리전의 cupix-json-collector-dc96 Lambda:
2026-04-06T07:47:10.310Z ERROR UploadCpcLogWorker::perform | error on job 88615 - Function not found: arn:aws:lambda:eu-central-1:002596530511:function:cupix-json-collector-dc96:$LATEST
2026-04-06T08:08:22.523Z ERROR UploadCpcLogWorker::perform | error on job 88607 - Function not found: arn:aws:lambda:eu-central-1:002596530511:function:cupix-json-collector-dc96:$LATEST
2026-04-06T12:33:20.142Z ERROR UploadCpcLogWorker::perform | error on job 88648 - Function not found: arn:aws:lambda:eu-central-1:002596530511:function:cupix-json-collector-dc96:$LATEST
2026-04-06T17:33:36.899Z ERROR UploadCpcLogWorker::perform | error on job 88672 - Function not found: arn:aws:lambda:eu-central-1:002596530511:function:cupix-json-collector-dc96:$LATEST
2026-04-07T00:36:34.128Z ERROR UploadCpcLogWorker::perform | error on job 88697 - Function not found: arn:aws:lambda:eu-central-1:002596530511:function:cupix-json-collector-dc96:$LATEST
2026-04-07T06:41:47.385Z ERROR UploadCpcLogWorker::perform | error on job 88702 - Function not found: arn:aws:lambda:eu-central-1:002596530511:function:cupix-json-collector-dc96:$LATEST
실패 job 중 하나(88702)의 전체 lifecycle — begins, Lambda 호출 시도, 에러 발생이 동일 초에 기록됨:
2026-04-07T06:41:47Z INFO UploadCpcLogWorker::perform | begins on job 88702
2026-04-07T06:41:47Z INFO UploadCpcLogWorker::perform | run cpc json collector on job 88702, capture 33175
2026-04-07T06:41:47Z ERROR UploadCpcLogWorker::perform | error on job 88702 - Function not found: arn:aws:lambda:eu-central-1:002596530511:function:cupix-json-collector-dc96:$LATEST
참고: 성공하는 job(다른 리전 또는 create_capture_3d_reconstruction이 아닌 kind)은 "done" 로그까지 정상 출력:
2026-04-07T07:29:39Z INFO UploadCpcLogWorker::perform | begins on job 31962
2026-04-07T07:29:39Z INFO UploadCpcLogWorker::perform | done on job 31962
Fix Recommendation#
즉시 조치 (Critical)#
-
Lambda 함수 복원: AWS Console 또는 Terraform으로
eu-central-1리전에cupix-json-collector-dc96Lambda 함수를 재배포합니다.- 인프라 코드:
cupix-infrastructure/cupix-service/cpc-collector/main.tf - Lambda 소스:
cupix-infrastructure/cupix-service/cpc-collector/code/cupix-json-collector.py - Terraform의
random_string.service_key가dc96을 생성했으므로, 기존 Terraform state에서 해당 workspace를 확인하고terraform apply를 실행해야 합니다.
- 인프라 코드:
-
영향받은 capture 재처리: Lambda가 복원된 후, 실패한 job들의 capture에 대해 CPC JSON 수집을 재실행해야 합니다. 영향받은 capture ID 목록을 Datadog 로그에서 추출할 수 있습니다 (예: capture 33175, 33185, 33186, 33098 등).
단기 개선 (1주 이내)#
-
에러 핸들링 개선 (
app/workers/upload_cpc_log_worker.rb:23-24): 현재rescue StandardError로 모든 에러를 잡아 로그만 남기므로, Lambda 호출 실패가 무시됩니다.ResourceNotFoundException과 같은 인프라 에러는 별도로 분류하여 알림을 보내거나, retry 대상에서 분리해야 합니다. -
Lambda 존재 여부 헬스체크: worker 시작 시 또는 주기적으로 설정된 Lambda 함수의 존재 여부를 확인하는 로직 추가를 고려합니다.
장기 개선 (재발 방지)#
- 인프라 배포 검증: 각 리전별 Terraform apply 후 Lambda 함수 존재 여부를 자동으로 검증하는 CI/CD 파이프라인 단계 추가.
- 리전별 인프라 일관성 모니터링: 모든 production 리전에서 필수 Lambda 함수들이 존재하는지 주기적으로 확인하는 모니터링 추가.
Monitoring#
- Lambda 함수 호출 실패 알림 추가:
service:cupixworks-worker status:error "Function not found" "cupix-json-collector"
- AWS CloudWatch에서 Lambda invoke 에러 메트릭 모니터링:
aws.lambda.errors{functionname:cupix-json-collector-dc96, region:eu-central-1}
Risk Assessment#
- Risk level: medium
- 예상 복잡도: standard — Lambda 함수 재배포로 즉시 해결 가능하나, 영향받은 capture의 CPC JSON 데이터가 누락된 상태이므로 재처리가 필요합니다. EU 리전의
create_capture_3d_reconstructionjob만 영향을 받으며 (46건), 다른 리전은 정상입니다.