Cloud Functions 또는 Cloud Run 호출

HTTP 요청을 통해 Workflows에서 Cloud Functions 또는 Cloud Run과 같은 Google Cloud 서비스를 호출할 수 있습니다. 가장 일반적인 HTTP 요청 메서드에는 호출 단축키(예: http.gethttp.post)가 있지만, call 필드를 http.request로 설정하고 method 필드를 사용해 요청 유형을 지정하여 모든 유형의 HTTP 요청을 수행할 수 있습니다. 자세한 내용은 HTTP 요청 수행을 참조하세요.

인증된 요청을 보내려면 다음 안내를 따르세요.

  • 필요한 권한이 포함된 Identity and Access Management(IAM) 역할이 하나 이상 부여된 서비스 계정과 워크플로가 연결되어야 합니다.

  • 워크플로 정의에 인증 정보를 명시적으로 추가해야 합니다. 기본적으로 HTTP 요청은 보안상의 이유로 ID 또는 액세스 토큰을 포함하지 않습니다.

자세한 내용은 워크플로에 Google Cloud 리소스에 대한 액세스 권한 부여를 참조하세요.

서비스를 호출해야 하는 경우

Workflows 구문을 사용하여 YAML 또는 JSON에서 단계를 만들어야 하거나 대신 작업을 수행하기 위해 Cloud Run 서비스 또는 Cloud 함수와 같은 서비스를 만들어야 하는 경우를 어떻게 알 수 있나요?

Workflows를 사용하여 워크플로 자체에서 서비스를 호출하고 결과를 처리하며 HTTP 호출과 같은 간단한 태스크를 실행합니다. Workflows는 서비스를 호출하고 응답을 파싱하며 다른 연결된 서비스의 입력을 구성할 수 있습니다. 서비스를 호출하면 추가 호출, 추가 종속 항목, 서비스 호출 서비스의 복잡성을 방지할 수 있습니다.

Workflows 표현식과 표준 라이브러리에서 지원하지 않는 재사용 가능한 비즈니스 로직, 복잡한 계산 또는 변환을 구현하는 등 Workflows에서 복잡한 작업을 수행할 수 있도록 서비스를 만듭니다. 복잡한 사례에서는 일반적으로 YAML 또는 JSON과 Workflows 구문을 사용하는 대신 코드로 구현하기가 더 쉽습니다.

내부 인그레스로 제한된 서비스 호출

Workflows는 동일한 Google Cloud 프로젝트에서 내부 트래픽으로 제한된 인그레스가 있는 Cloud Functions 또는 Cloud Run 서비스를 호출할 수 있습니다. 이 구성을 사용하면 인터넷에서 서비스에 연결할 수 없지만 Workflows에서 연결할 수 있습니다.

이러한 제한사항을 적용하려면 서비스 또는 함수의 인그레스 설정을 조정해야 합니다. Cloud Run 서비스는 커스텀 도메인이 아닌 run.app URL로 연결되어야 합니다. 자세한 내용은 인그레스 제한(Cloud Run용) 및 네트워크 설정 구성(Cloud Functions용)을 참조하세요. 워크플로에서 다른 변경사항은 필요하지 않습니다.

필요한 권한이 있는 서비스 계정 사용

다른 Google Cloud 서비스에 요청을 수행할 때는 요청된 리소스에 액세스하기 위해 필요한 올바른 권한이 있는 서비스 계정에 워크플로를 연결해야 합니다. 기존 워크플로와 연결된 서비스 계정에 대해 알아보려면 워크플로의 연결된 서비스 계정 확인을 참조하세요.

서비스 계정을 설정할 때 액세스 권한을 부여할 리소스와 요청 ID를 연결하고 요청 ID를 리소스의 주 구성원으로 만든 후 적절한 역할을 할당합니다. 역할은 리소스 컨텍스트에서 ID의 권한을 정의합니다.

예를 들어 특정 호출 함수 또는 서비스의 요청을 수락하도록 수신 Cloud 함수를 구성하려면 호출자의 서비스 계정을 수신 함수의 주구성원으로 추가하고 이 주 구성원에 Cloud Functions 호출자(roles/cloudfunctions.invoker) 역할을 부여해야 합니다. 마찬가지로, Cloud Run용 서비스 계정을 설정하려면 해당 서비스 계정에 Cloud Run 호출자(roles/run.invoker) 역할을 부여합니다. 자세한 내용은 Cloud Functions 인증 정보 또는 Cloud Run 인증 개요를 참조하세요.

Cloud Functions(2세대) 호출

Cloud Functions(2세대)에서 기본 Cloud Run 서비스를 관리하여 호출 권한을 사용할 수 있습니다. 워크플로가 Cloud Functions(2세대) 서비스를 호출하는 경우 호출자의 서비스 계정에 Cloud Functions 호출자(roles/cloudfunctions.invoker) 역할을 부여할 필요가 없습니다. 대신 Cloud Run 호출자(roles/run.invoker) 역할을 부여해야 합니다.

자세한 내용은 Cloud Functions 버전 비교를 참조하세요.

워크플로에 인증 정보 추가

Cloud Functions 또는 Cloud Run에 요청을 수행할 때 OIDC를 사용하여 인증합니다.

OIDC를 사용하여 HTTP 요청을 수행하려면 URL을 지정한 후 워크플로 정의의 args 섹션에 auth 섹션을 추가합니다. 이 예시에서는 Cloud Functions 호출을 위해 요청이 전송됩니다.

YAML

  - step_A:
      call: http.get
      args:
          url: https://us-central1-project.cloudfunctions.net/functionA
          query:
              firstNumber: 4
              secondNumber: 6
              operation: sum
          auth:
              type: OIDC
              audience: OIDC_AUDIENCE
    

JSON

    [
      {
        "step_A": {
          "call": "http.get",
          "args": {
            "url": "https://us-central1-project.cloudfunctions.net/functionA",
            "query": {
              "firstNumber": 4,
              "secondNumber": 6,
              "operation": "sum"
            },
            "auth": {
              "type": "OIDC",
              "audience": "OIDC_AUDIENCE"
            }
          }
        }
      }
    ]
      
audience 매개변수는 토큰에 대해 OIDC 대상을 지정하는 데 사용될 수 있습니다. 기본적으로 url과 동일한 값으로 설정되지만 서비스의 루트 URL로 설정되어야 합니다. 예를 들면 https://region-project.cloudfunctions.net/hello_world입니다.

응답 데이터의 미디어 유형 지정

응답의 Content-Type 헤더가 application/json 미디어 유형을 지정하면 변수에 저장된 JSON 응답이 액세스 가능한 맵으로 자동 변환됩니다.

필요한 경우 Content-Type 응답 헤더에 application/json 미디어 유형을 지정하도록 호출되는 API를 수정합니다. 그렇지 않으면 json.decodetext.encode 함수를 사용하여 응답 본문을 맵으로 변환합니다. 예를 들면 다음과 같습니다.

json.decode(text.encode(RESPONSE_FROM_API))

자세한 내용은 변수에 저장된 HTTP 응답 데이터 액세스를 참조하세요.

Cloud Run 작업 실행

Cloud Run 서비스와 달리 Cloud Run 작업은 HTTP 요청을 리슨하거나 제공하지 않습니다. 워크플로에서 Cloud Run 작업을 실행하려면 Cloud Run Admin API 커넥터를 사용합니다.

작업에 환경 변수로 전달된 데이터를 처리하는 Cloud Run 작업을 실행하는 엔드 투 엔드 예시는 Workflows를 사용하여 Cloud Run 작업 실행을 참조하세요.

고객 관리 암호화 키(CMEK)를 사용하여 데이터를 암호화할 수 있도록 해주는 Cloud Storage 버킷에 저장된 데이터를 처리하는 Cloud Run 작업을 실행하는 엔드 투 엔드 예시는 Cloud Storage에서 이벤트 데이터를 처리하는 Cloud Run 작업 실행을 참조하세요.

다음 단계