문제해결

이 페이지에서는 Workflows를 사용할 때 발생할 수 있는 문제를 해결하는 방법을 보여줍니다.

자세한 내용은 Workflows 모니터링디버깅을 참조하세요.

배포 오류

워크플로가 배포될 때 Workflows는 소스 코드에 오류가 없고 언어 구문과 일치하는지 확인합니다. 문제가 있으면 Workflows가 오류를 반환합니다. 배포 오류의 가장 일반적인 유형은 다음과 같습니다.

  • 정의되지 않은 변수, 단계 또는 하위 워크플로 참조
  • 잘못된 구문
    • 잘못된 들여쓰기
    • 누락되었거나 불필요한 {, }, ", -, :

예를 들어 다음 소스 코드는 return 문이 정의되지 않은 변수 varC를 참조하기 때문에 배포 오류를 발생시킵니다.

- step1:
    assign:
    - varA: "Hello"
    - varB: "World"
- step2:
    return: ${varC + varB}

이 잘못된 소스 코드는 다음 Google Cloud 콘솔 및 gcloud CLI 예시에서 사용됩니다.

콘솔

배포 오류가 발생하면 Workflows가 워크플로 수정 페이지의 배너에 오류 메시지를 표시합니다. 배포 오류 이 오류 메시지는 소스 코드의 문제를 플래그로 표시하고, 가능한 경우 오류 원점을 지정합니다.

Could not deploy workflow: failed to build: error in step step2: error
evaluating return value: symbol 'varC' is neither a variable nor a
sub-workflow name (Code: 3)

gcloud

gcloud workflows deploy 명령어를 실행할 때 배포가 실패하면 Workflows가 명령줄에 오류 메시지를 반환합니다. 이 오류 메시지는 소스 코드의 문제를 나타내며, 가능한 경우 오류의 출처를 지정합니다.

ERROR: (gcloud.workflows.deploy) [INVALID_ARGUMENT] failed to build:
error in step step2: error evaluating return value: symbol 'varC' is neither
a variable nor a sub-workflow name

문제를 해결하려면 워크플로의 소스 코드를 수정합니다. 이 경우 varC 대신 varA를 참조하세요.

HTTP 403 서비스 계정 권한 오류

HTTP 서버가 403 오류 코드로 응답하면 워크플로 실행이 실패합니다. 예를 들면 다음과 같습니다.

Permission 'iam.serviceaccounts.actAs' denied on service
account PROJECT_NUMBER-compute@developer.gserviceaccount.com (or it may not exist).

또는

SERVICE_ACCOUNT does not have storage.objects.create access to the Google Cloud
Storage object. Permission 'storage.objects.create' denied on resource (or it may not exist).

모든 워크플로는 워크플로가 생성될 때 IAM 서비스 계정과 연결됩니다. 이 문제를 해결하려면 워크플로 관리에 필요한 최소 권한이 포함된 하나 이상의 IAM 역할을 서비스 계정에 부여해야 합니다. 예를 들어 워크플로에서 Cloud Logging으로 로그를 전송하도록 하려면 워크플로를 실행하는 서비스 계정에 logging.logEntries.create 권한이 포함된 역할이 부여되었는지 확인합니다. 자세한 내용은 리소스에 액세스할 수 있는 워크플로 권한 부여 Google Cloud 를 참조하세요.

HTTP 404 No such object 또는 Not found 오류

Cloud Storage 커넥터를 사용할 때 HTTP 서버가 404 오류 코드로 응답하면 워크플로 실행이 실패합니다. 예를 들면 다음과 같습니다.

HTTP server responded with error code 404
in step "read_input_file", routine "main", line: 13
{
  "body": "Not Found",
  "code": 404,
  ...
}

경로의 안전성을 위해 객체 이름을 URL로 인코딩해야 합니다. url_encodeurl_encode_plus 함수를 사용하여 요청 URL의 객체 이름 또는 쿼리 문자열에 해당 문자가 표시될 때 이를 인코딩할 수 있습니다. 예를 들면 다음과 같습니다.

- init:
    assign:
        - source_bucket: "my-bucket"
        - file_name: "my-folder/my-file.json"
- list_objects:
    call: googleapis.storage.v1.objects.get
    args:
        bucket: ${source_bucket}
        object: ${text.url_encode(file_name)}
        alt: media
    result: r
- returnStep:
    return: ${r}

객체 이름을 URL 인코딩하지 않고 스토리지 버킷에 폴더가 있으면 요청이 실패합니다. 자세한 내용은 URL 경로 부분 인코딩Cloud Storage 이름 지정 고려사항을 참조하세요.

HTTP