1세대 함수를 Cloud Run Functions로 업그레이드
이 가이드에서는 1세대 HTTP 및 Pub/Sub 함수를 Cloud Run에서 실행되는 Cloud Run 함수로 업그레이드하는 방법을 설명합니다. 이 가이드는 Cloud Functions v1 API를 사용하여 만든 1세대 함수에만 적용됩니다. 이 가이드의 안내는 Cloud Functions v2 API 또는 별도의 제품인 Firebase용 Cloud Functions로 만든 2세대 함수에는 적용되지 않습니다.
업그레이드가 완료되면 Cloud Run Admin API 및 Cloud Run 도구를 사용해서만 업그레이드된 함수와 상호작용할 수 있습니다.
제한사항
업그레이드 도구는 현재 HTTP 및 Pub/Sub 트리거 함수 업그레이드만 지원합니다.
업그레이드 절차 개요
다음은 업그레이드 프로세스의 대략적인 개요입니다.
이 프로세스의 세부정보는 다음 섹션에서 설명합니다.
업그레이드 시작 개요
- 업그레이드를 시작하면 (Google Cloud CLI 또는 Google Cloud 콘솔 사용) 업그레이드 도구에서 원래 1세대 함수의 복사본인 임시 2세대 함수를 만듭니다. 이 2세대 함수는 다음을 수행합니다.
- 원래 1세대 함수와 최종적으로 완전히 업그레이드된 함수 간의 브리지 역할을 합니다.
- 원래 1세대 함수와 이름, 코드, 구성이 동일합니다.
- HTTP 함수를 업그레이드하는 경우 원래 1세대 함수와 동일한
cloudfunctions.net
URL이 있으며run.app
Cloud Run URL도 있습니다.- 업그레이드를 시작하면 1세대 함수와 2세대 함수 사본이 모두 동일한
cloudfunctions.net
URL에 할당됩니다.cloudfunctions.net
URL로 요청을 보내면 트래픽이 계속 1세대 함수로 라우팅됩니다. 2세대 함수 복사본에도 Cloud Runrun.app
URL이 있습니다. 다음 단계에서 트래픽을 리디렉션할 때까지는 2세대 함수 URL이 트래픽을 수신하지 않습니다.
- 업그레이드를 시작하면 1세대 함수와 2세대 함수 사본이 모두 동일한
- Pub/Sub 함수를 업그레이드하는 경우 1세대 함수와 동일한 Pub/Sub 주제를 사용하지만 아직 구독이 없습니다.
- HTTP 함수를 업그레이드하는 경우 원래 1세대 함수와 동일한
- 종속 항목을 특정 버전으로 고정하지 않은 경우 새로 생성된 2세대 함수 사본에서 최신 종속 항목 버전을 사용할 수 있습니다.
- 1세대 함수는 1세대 Google Cloud 콘솔에 계속 표시되고 임시 2세대 사본은 Cloud Run 콘솔에 처음 표시됩니다.
예: 이 표는 초기 업그레이드 단계의 HTTP 함수 상태를 보여줍니다.
함수 | 트래픽을 처리하고 있나요? | 콘솔에 표시됨 |
---|---|---|
원래 1세대 함수 | 예, cloudfunctions.net URL에서 |
예, 1세대 콘솔입니다. |
새 2세대 사본 | 아니요. 이 함수에는 cloudfunctions.net 및 run.app URL이 모두 있지만 리디렉션 단계까지는 트래픽을 처리하지 않습니다. |
예, Cloud Run 콘솔입니다. |
트래픽 리디렉션 개요
- 트래픽을 리디렉션할 때 결과는 업그레이드하는 함수가 HTTP 함수인지 Pub/Sub 함수인지에 따라 달라집니다.
- HTTP 함수를 업그레이드하는 경우
cloudfunctions.net
URL로 향하는 트래픽이 2세대 함수로 이동합니다. 1세대 함수는 계속 존재하지만 트래픽을 수신하지 않습니다. - Pub/Sub 함수를 업그레이드하는 경우 2세대 함수 트리거는 동일한 Pub/Sub 주제를 사용하지만 Cloud Run 함수로 메시지를 전송하는 새 구독을 만듭니다. 이전 구독이 삭제됩니다.
- HTTP 함수를 업그레이드하는 경우
- 1세대 콘솔에서 1세대 함수가 사라집니다.
gcloud functions describe
명령어를 실행하면 함수의 환경이 이제 2세대임을 확인할 수 있습니다.- 이 전환 단계에는 특히 Pub/Sub 함수의 경우 다음과 같은 위험이 있습니다.
- 중복 메시지: 이전 구독이 삭제되기 전에 새 구독이 생성됩니다. 이 전환 기간 동안 동일한 Pub/Sub 메시지가 이전 함수와 새 함수 모두에 전송될 수 있습니다.
- 메시지 손실: Pub/Sub 함수를 업그레이드하고 트래픽이 리디렉션된 후 새 함수가 메시지를 처리하지 못하면 Pub/Sub 메시지가 손실될 수 있습니다. 특히 함수에서 재시도가 사용 중지된 경우에 그렇습니다. 자세한 내용은 Pub/Sub 업그레이드를 참고하세요.
예: 이 표는 트래픽 리디렉션 단계에서 HTTP 함수의 상태를 보여줍니다.
함수 | 트래픽을 처리하고 있나요? | 콘솔에 표시됨 |
---|---|---|
원래 1세대 함수 | 아니요. | 1세대 콘솔에는 더 이상 표시되지 않지만 여전히 존재합니다. |
새 2세대 사본 | 예, cloudfunctions.net URL과 run.app Cloud Run URL에서 모두 가능합니다. |
예, Cloud Run 콘솔입니다. |
트래픽 롤백 개요
- 트래픽을 롤백하면 업그레이드 도구가 2세대 함수 사본의 모든 트래픽을 이제 모든 트래픽을 처리하는 1세대 원본 함수로 롤백합니다. 2세대 함수는 계속 테스트할 수 있습니다.
- Pub/Sub 함수를 롤백하는 경우 1세대 함수 구독이 다시 생성되고 2세대 함수 구독이 삭제됩니다.
- 트래픽을 롤백한 후 업그레이드를 진행하려면 먼저 트래픽을 새 2세대 함수로 다시 리디렉션해야 합니다.
예: 트래픽을 롤백하는 경우 HTTP 함수의 상태를 보여주는 표입니다.
함수 | 트래픽을 처리하고 있나요? | 콘솔에 표시됨 |
---|---|---|
원래 1세대 함수 | 예. | 예, 1세대 콘솔입니다. |
새 2세대 사본 | 아니요. | Cloud Run 콘솔에는 더 이상 표시되지 않지만 여전히 존재합니다. |
중단 개요
커밋하기 전에 언제든지 업그레이드를 중단할 수 있습니다. 커밋하면 업그레이드를 되돌릴 수 없습니다.
예: 다음 표는 업그레이드를 중단하는 경우 HTTP 함수의 상태를 보여줍니다.
함수 | 트래픽을 처리하고 있나요? | 콘솔에 표시됨 |
---|---|---|
원래 1세대 함수 | 예. | 예, 1세대 콘솔입니다. |
2세대 복사 | 아니요. | Cloud Run 콘솔에 더 이상 표시되지 않으며 더 이상 존재하지 않습니다. |
커밋 개요 (되돌릴 수 없음)
- 업그레이드를 커밋하면 1세대 함수의 업그레이드 프로세스가 완료됩니다. 이 작업은 되돌릴 수 없습니다.
- 임시 2세대 함수는 Cloud Run Admin API를 기반으로 하는 정식 Cloud Run 함수로 변환됩니다.
- 이는 2세대 함수에서
detach
명령어를 실행하는 것과 같습니다.detach
명령어는 Cloud Functions v2 함수를 기존 API 환경에서 분리합니다. - 앞으로는 Cloud Run Admin API 및 Cloud Run 도구를 사용해서만 업그레이드된 함수와 상호작용할 수 있습니다.
- 이는 2세대 함수에서
- 1세대 함수가 삭제되고 모든 트래픽이 업그레이드된 Cloud Run 함수로 제공됩니다.
예: 다음 표는 업그레이드를 커밋한 후의 HTTP 함수 상태를 보여줍니다.
함수 | 트래픽을 처리하고 있나요? | 콘솔에 표시됨 |
---|---|---|
Cloud Run Admin API를 기반으로 하는 새로운 Cloud Run 함수입니다. | 예, cloudfunctions.net URL과 run.app Cloud Run URL에서 모두 가능합니다. |
예, Cloud Run 콘솔입니다. |
원래 1세대 함수 | 아니요. | 아니요, 더 이상 존재하지 않습니다. |
2세대 복사 | 아니요. | 아니요, 더 이상 존재하지 않습니다. |
테스트 도움말
테스트는 업그레이드 프로세스의 필수 부분입니다.
비프로덕션 함수에서 업그레이드 도구를 테스트하여 도구에 익숙해지는 것이 좋습니다. 프로세스를 숙지하고 일관된 성공을 거두면 프로덕션 기능을 업그레이드할 수 있습니다.
업그레이드 중에 함수를 테스트하는 데 사용할 수 있는 도구와 기법은 다음과 같습니다.
함수의 상태가 변경될 때마다 Google Cloud CLI
describe
명령어를 사용하여 함수가 존재하고 환경과 버전이 예상대로인지 확인합니다. 업그레이드되는 함수의 현재 상태에 따라 다음 중 하나를 사용하세요.Cloud Run:
gcloud run services describe FUNCTION_NAME --format yaml
Cloud Functions:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
1세대 및 Cloud Run 콘솔의 로깅 페이지를 사용하여 함수 트래픽의 세부정보를 확인합니다.
Cloud Run 콘솔을 사용하여 업그레이드 프로세스가 진행되는 동안 2세대 함수 복사본을 확인하고 테스트합니다.
- 업그레이드를 시작한 후 트리거 탭을 사용하여 2세대 함수 사본을 테스트합니다.
- YAML 탭을 사용하여 Cloud Run
run.app
URL을 비롯한 함수에 관한 세부정보를 확인합니다.
시작하기 전에
업그레이드를 시작하기 전에 다음 기본 요건을 충족해야 합니다.
Cloud Run API를 사용 설정했습니다.
gcloud services enable run.googleapis.com
기존 1세대 HTTP 또는 Pub/Sub 함수가 있습니다.
필수 IAM 역할이 있습니다.
- 함수의 서비스 계정에
roles/iam.serviceAccountUser
이 설정되어 있어야 합니다. - 업그레이드를 실행하려면 프로젝트에
roles/cloudfunctions.admin
역할 또는 이에 상응하는 역할이 있어야 합니다. no-retry
설정이 있는 Pub/Sub 함수의 경우roles/serviceusage.consumer
역할 또는serviceusage.services.user
권한이 있는 커스텀 역할이 있습니다.- Pub/Sub 함수 업그레이드를 커밋하려면
roles/pubsub.admin
역할이 있어야 합니다.roles/pubsub.admin
역할은 프로젝트 내의 모든 Pub/Sub 리소스에 대한 관리 액세스 권한을 부여하는 프로젝트 수준 역할입니다.
다음과 같이 함수의 IAM 정책을 볼 수 있습니다.
gcloud functions get-iam-policy FUNCTION_NAME
- 함수의 서비스 계정에
함수의 서비스 계정에
roles/cloudfunctions.admin
권한이 부여되어 있어야 합니다.roles/cloudfunctions.admin
역할을 부여하려면gcloud functions add-iam-policy-binding
명령어를 사용합니다(예:).gcloud functions add-iam-policy-binding FUNCTION_NAME \ --region=REGION \ --member=serviceAccount:SERVICE_ACCOUNT \ --role="roles/cloudfunctions.admin"
이 명령어를 실행하려고 할 때 오류가 발생하면 함수가 조직의 정책을 준수하는지 확인하세요. 예를 들어 조직에서 인증되지 않은 HTTP 함수를 허용하지 않을 수 있습니다.
구성원 및 역할에 대해 자세히 알아보려면 주 구성원 추가 및 역할 부여를 참고하세요.
HTTP 함수 업그레이드
이 섹션에서는 1세대 HTTP 함수를 Cloud Run 함수로 업그레이드하는 방법을 설명합니다. 1세대 Pub/Sub 함수를 업그레이드하는 방법을 알아보려면 나중에 나오는 섹션을 참고하세요.
다음 섹션에 설명된 대로 트래픽을 리디렉션하고 업그레이드를 커밋한 후에도 원래 1세대 HTTP 함수와 연결된 cloudfunctions.net
URL은 계속 작동하며 새 Cloud Run 함수로 트래픽을 라우팅합니다.
HTTP 함수 업그레이드 시작
이 단계에서는 1세대 함수의 2세대 사본이 생성됩니다.
콘솔
Google Cloud 콘솔에서 Functions (1세대) 페이지로 이동합니다.
업그레이드할 1세대 함수를 찾아 업그레이드 상태 열의 상태가 업그레이드 준비됨인지 확인합니다.
함수 이름을 클릭하여 세부정보 페이지를 표시합니다.
함수 세부정보 페이지의 업그레이드 가능에서 업그레이드를 클릭합니다.
안내에 따라 업그레이드 절차를 시작합니다.
이 단계를 완료하면 업그레이드 진행 중 패널이 표시되며, Cloud Run으로 이동 링크를 클릭하여 업그레이드 프로세스를 계속하라는 메시지가 표시됩니다.
gcloud
--setup-config
플래그와 함께 gcloud beta functions upgrade
명령어를 실행합니다.
gcloud beta functions upgrade FUNCTION_NAME --setup-config
FUNCTION_NAME을 1세대 함수의 이름으로 바꿉니다.
업그레이드를 시작한 후에는 다음 단계를 따르세요.
- 1세대 함수는 원래 URL로 계속 트래픽을 처리합니다. Functions (1세대) 콘솔에서 함수의 세부정보 페이지로 이동하여 트리거 탭을 열면 이 URL을 확인할 수 있습니다.
1세대 함수의 사본인 임시 2세대 함수가 생성됩니다. 1세대 함수와 동일한
cloudfunctions.net
URL과 새로운 Cloud Runrun.app
URL이 있습니다. Cloud Run 콘솔에서 함수의 세부정보 페이지로 이동하고 YAML 탭을 열면 이러한 URL을 모두 확인할 수 있습니다. 또는 다음 명령어를 사용할 수 있습니다.gcloud run services describe YOUR_SERVICE_NAME \ --region YOUR_REGION \ --format="value(status.url)"
1세대 함수의 2세대 사본이 있는지 확인할 수 있습니다.
gcloud run services describe FUNCTION_NAME --format yaml
출력에 함수 환경이
1st gen
로 표시되는 1세대 함수 환경을 확인할 수 있습니다.gcloud functions describe --region REGION_NAME FUNCTION_NAME
업그레이드 시작 단계 문제 해결
다음 조건에서는 업그레이드가 실패합니다.
- 동일한 리전 및 프로젝트에 이름이 동일한 함수가 이미 있습니다.
- 1세대 함수는 지원 중단된 런타임을 사용하므로 지원되는 런타임으로 다시 배포할 때까지 업그레이드할 수 없습니다.
- 호출자에게
cloudfunctions.functions.generationUpgrade
권한이 없습니다. 호출자에게 프로젝트에 대한roles/cloudfunctions.admin
역할 또는 이에 상응하는 역할이 필요합니다.
HTTP 함수의 트래픽 리디렉션
이 시점에서 원래 함수와 복사본의 URL을 모두 테스트해야 합니다. 계속하기 전에 예상대로 작동하는지 확인하세요. 문제가 발생하면 업그레이드를 중단하여 클린 상태로 돌아가 1세대 함수의 기본 문제를 해결할 수 있습니다.
리디렉션 단계에서는 트래픽을 1세대 Cloud Functions URL에서 2세대 함수 사본으로 리디렉션합니다.
콘솔
- Cloud Run Functions 세부정보 페이지의 업그레이드 진행 중 패널에서 Cloud Run으로 이동을 클릭합니다.
- 함수 테스트를 클릭하여 함수를 테스트합니다 (선택사항이지만 적극 권장됨).
- 준비가 되면 트래픽 리디렉션을 클릭합니다.
gcloud
--redirect-traffic
플래그와 함께 gcloud beta functions upgrade
명령어를 실행합니다.
gcloud beta functions upgrade FUNCTION_NAME --redirect-traffic
트래픽을 리디렉션한 후 2세대 함수 복사본은 함수 URL (cloudfunctions.net
)과 Cloud Run URL (run.app
) 모두에 트래픽을 제공합니다.
리디렉션 후 HTTP 함수 테스트
함수 환경을 확인합니다.
gcloud functions describe --region REGION_NAME FUNCTION_NAME
출력에 환경이
2nd gen
로 표시됩니다.콘솔 로깅 도구를 사용하여 2세대 함수 복사본을 원래 1세대 함수와 비교합니다.
리디렉션 문제 해결
다음 조건에서는 리디렉션이 실패합니다.
- 이전 단계 (
--setup-config
)를 실행하지 않았습니다.
HTTP 함수의 트래픽 롤백
업그레이드를 커밋할 준비가 되지 않은 경우 트래픽을 1세대 함수로 롤백할 수 있습니다.
콘솔
Cloud Run 콘솔의 Cloud Run Functions 세부정보 페이지에 있는 업그레이드 진행 중 패널에서 트래픽 롤백을 클릭합니다.
gcloud
--rollback-traffic
플래그와 함께 gcloud beta functions upgrade
명령어를 실행합니다.
gcloud beta functions upgrade FUNCTION_NAME --rollback-traffic
트래픽을 롤백한 후:
- 1세대 함수는
cloudfunctions.net
URL로 트래픽을 처리합니다. - 2세대 함수 사본은 계속 사용할 수 있으며
run.app
URL을 사용하여 트리거할 수 있습니다.
다음과 같이 함수 환경을 확인할 수 있습니다. 출력에 함수 환경이 1st gen
로 표시되어야 합니다.
gcloud functions describe --region REGION_NAME FUNCTION_NAME
트래픽을 2세대 함수로 리디렉션하지 않은 경우 롤백이 실패합니다.
HTTP 함수 업그레이드 커밋
이 단계에서 업그레이드가 완료되며, 이후에는 더 이상 프로세스를 중단할 수 없습니다. 이 단계를 수행하기 전에 함수를 철저히 테스트했는지 확인하세요.
콘솔
Cloud Run 콘솔의 Cloud Run Functions 세부정보 페이지에 있는 업그레이드 진행 중 패널에서 업그레이드 커밋을 클릭합니다.
gcloud
--commit
플래그와 함께 gcloud beta functions upgrade
명령어를 실행합니다.
gcloud beta functions upgrade FUNCTION_NAME --commit
업그레이드를 커밋한 후에는 다음을 실행합니다.
- 1세대 함수가 삭제되고 2세대 함수 사본이 분리되어 완전한 Cloud Run 함수가 됩니다.
- Cloud Run 함수는 새
run.app
URL과 함께cloudfunctions.net
URL을 유지합니다. 1세대 함수가 더 이상 존재하지 않는지 확인할 수 있습니다.
gcloud functions describe --region REGION_NAME FUNCTION_NAME
Cloud Run 서비스 세부정보를 확인할 수 있습니다.
gcloud run services describe FUNCTION_NAME --format yaml
출력에 새 세대가 생성되었으며 Goog-managed-by
라벨에 빈 값이 있는 것으로 표시됩니다.
트래픽이 Cloud Run 함수로 리디렉션되지 않으면 커밋이 실패합니다.
Pub/Sub 함수 업그레이드
이 섹션에서는 1세대 Pub/Sub 함수를 Cloud Run 함수로 업그레이드하는 방법을 설명합니다.
1세대 Pub/Sub 함수 업그레이드 프로세스는 HTTP 함수 업그레이드와 동일한 기본 패턴을 따르지만 몇 가지 추가 고려사항이 있습니다.
실패 시 재시도 사용 중지는 Cloud Run에서 지원되지 않는 기능이지만 1세대에서는 기본 설정입니다. 따라서 두 유형의 함수가 모두 있을 수 있습니다. 업그레이드 도구의 작동 방식은 이 설정에 따라 달라집니다.
- 1세대 함수에서 재시도가 사용 중지된 경우 (기본 1세대 설정) 업그레이드 도구는 데드 레터 대기열 (DLQ)과 함께 Eventarc Pub/Sub 트리거를 만듭니다. 업그레이드 도구는 정기 결제 및 해당 주제에 대한 Identity and Access Management (IAM) 정책을 설정합니다. 업그레이드가 완료되면 데드 레터 큐 주제에 전송되지 않은 메시지가 저장되므로 데드 레터 큐에 대한 새 구독을 만들어 이러한 메시지를 검색할 수 있습니다.
- 1세대 함수에 재시도가 사용 설정되어 있으면 업그레이드 도구에서 기본 설정으로 Eventarc Pub/Sub 트리거를 만듭니다.
Pub/Sub 함수 업그레이드 시작
이 단계에서는 1세대 함수의 2세대 사본을 만듭니다.
콘솔
Google Cloud 콘솔에서 Cloud Functions (1세대) 페이지로 이동합니다.
업그레이드할 1세대 함수를 찾아 업그레이드 상태 열의 상태가 업그레이드 준비됨인지 확인합니다.
함수 이름을 클릭하여 세부정보 페이지를 표시합니다.
함수 세부정보 페이지의 업그레이드 가능에서 업그레이드를 클릭합니다.
이 단계가 완료되면 업그레이드 진행 중 패널이 표시되고 Cloud Run으로 이동 링크를 클릭하여 업그레이드 프로세스를 계속하라는 메시지가 표시됩니다.
gcloud
--setup-config
플래그와 함께 gcloud beta functions upgrade
명령어를 실행합니다.
gcloud beta functions upgrade FUNCTION_NAME --setup-config
FUNCTION_NAME을 1세대 함수의 이름으로 바꿉니다.
원하는 경우 트리거의 서비스 계정을 지정합니다.
gcloud beta functions upgrade FUNCTION_NAME --setup-config --trigger-service-account=CUSTOM_SA_EMAIL
CUSTOM_SA_EMAIL을 맞춤 서비스 계정의 이메일로 바꿉니다.
트리거 서비스 계정 (기본 Compute Engine 서비스 계정 또는 지정된 커스텀 서비스 계정)에 run.route.invoke
권한이 없으면 시스템에서 roles/run.invoker
역할을 바인딩하라는 메시지를 표시합니다.
업그레이드를 시작한 후에는 다음 단계를 따르세요.
- 1세대 함수는 원래 URL로 계속 트래픽을 처리합니다.
- 1세대 함수의 2세대 사본이 생성됩니다. Cloud Run URL을 사용하여 트리거할 수 있습니다.
- 1세대 함수는
cloudfunctions.net
URL로 계속 트래픽을 처리합니다.
업그레이드 시작 단계 후 Pub/Sub 함수 테스트
1세대 함수의 2세대 사본이 있는지 확인할 수 있습니다.
gcloud run services describe FUNCTION_NAME --format yaml
출력에 함수 환경이
1st gen
로 표시되는 1세대 함수 환경을 확인할 수 있습니다.gcloud functions describe --region REGION_NAME FUNCTION_NAME
대상 주제에 메시지를 게시하여 1세대 함수를 트리거합니다.
새 함수를 테스트하려면 Pub/Sub 트리거를 추가하고 함수가 트리거에 예상대로 응답하는지 확인합니다.
- Cloud Run 콘솔에서 함수를 선택하고 트리거 탭을 엽니다.
- 트리거 추가를 클릭하고 Eventarc 트리거 패널에서 함수를 트리거할 주제를 선택합니다. 기본적으로 메시지가 주제에 게시되면 함수가 트리거됩니다.
- 업그레이드 진행 중 패널에서 함수 테스트를 클릭합니다.
- 열린 Cloud Code for Cloud Shell 창에서 트리거 탭에 추가한 주제에 메시지를 게시합니다.
- Cloud Run 콘솔에서 관측 가능성 > 로그로 이동하여 함수가 메시지를 게시했는지 확인합니다. 또는 Cloud Shell용 Cloud Code의 명령줄을 사용하여 로깅 출력을 볼 수 있습니다.
예를 들어 인사말을 게시하는 기본 Hello World 함수가 있다고 가정해 보겠습니다. 새 트리거를 지정한 후에는 다음과 같이 Cloud Shell용 Cloud Code에서 테스트할 수 있습니다.
gcloud pubsub topics publish YOUR_TOPIC_NAME --message YOUR_NAME gcloud functions logs read --region YOUR_REGION --limit 50
Pub/Sub 업그레이드 시작 단계 문제 해결
다음 조건에서는 업그레이드가 실패합니다.
- 동일한 리전 및 프로젝트에 이름이 동일한 Cloud Run 함수가 이미 있습니다.
- 2세대 함수를 업그레이드하려고 했습니다.
- 1세대 함수가 이미 업그레이드 프로세스를 진행 중입니다.
- 1세대 함수가 존재하지 않습니다.
- 1세대 함수가 오류 상태입니다.
- 1세대 함수는 HTTP 함수도 Pub/Sub 함수도 아닙니다.
- 호출자에게
cloudfunctions.functions.generationUpgrade
권한이 없습니다. 호출자에게 프로젝트에 대한roles/cloudfunctions.admin
역할 또는 이에 상응하는 역할이 필요합니다.
Pub/Sub 함수의 트래픽 리디렉션
이 단계에서는 트래픽을 1세대 Cloud Functions URL에서 2세대 함수 사본으로 리디렉션합니다.
콘솔
- Cloud Run Functions 세부정보 페이지의 업그레이드 진행 중 패널에서 Cloud Run으로 이동을 클릭합니다.
- 함수 테스트를 클릭하여 함수를 테스트합니다 (선택사항이지만 적극 권장됨).
- 준비가 되면 트래픽 리디렉션을 클릭합니다.
gcloud
--redirect-traffic
플래그와 함께 gcloud beta functions upgrade
명령어를 실행합니다.
gcloud beta functions upgrade FUNCTION_NAME --redirect-traffic
트래픽을 리디렉션한 후 2세대 함수는 Cloud Functions URL과 Cloud Run URL 모두에 트래픽을 제공합니다.
트래픽 리디렉션 후 Pub/Sub 테스트
함수 환경을 확인할 수 있습니다.
gcloud functions describe --region REGION_NAME FUNCTION_NAME
출력에 환경이
2nd gen
로 표시됩니다.eventTrigger.retryPolicy
는 함수 생성 중에 지정된 재시도 정책과 일치합니다.eventTrigger.serviceAccountEmail
는 기본 Compute Engine 서비스 계정 또는 지정된 커스텀 서비스 계정입니다.- 이제 대상 주제에 메시지를 게시하면 2세대 함수 복사본이 트리거됩니다.
리디렉션용 Pub/Sub 문제 해결
다음 조건에서는 리디렉션이 실패합니다.
- 이전 단계 (
--setup-config
)를 실행하지 않았습니다. - Cloud Run 함수가 수동으로 삭제되었습니다.
Pub/Sub 함수의 트래픽 롤백
이 단계에서는 트래픽을 1세대 함수로 되돌립니다.
콘솔
Cloud Run Functions 세부정보 페이지의 업그레이드 진행 중 패널에서 트래픽 롤백을 클릭합니다.
gcloud
--rollback-traffic
플래그와 함께 gcloud beta functions upgrade
명령어를 실행합니다.
gcloud beta functions upgrade FUNCTION_NAME --rollback-traffic
트래픽을 롤백한 후:
- 이 함수는 초기 업그레이드 단계 직후의 상태로 되돌아갑니다.
- 1세대 함수는
cloudfunctions.net
URL로 트래픽을 처리합니다. 2세대 사본은 계속 사용할 수 있으며 Cloud Run URL을 사용하여 트리거할 수 있습니다.
함수 환경을 확인할 수 있습니다.
gcloud functions describe --region REGION_NAME FUNCTION_NAME
출력에 함수 환경이
1st gen
로 표시됩니다.대상 주제에 메시지를 게시하면 1세대 함수가 트리거됩니다.
트래픽을 Cloud Run 함수로 리디렉션하지 않은 경우 롤백이 실패합니다.
Pub/Sub 함수 업그레이드 커밋
이 단계에서 업그레이드가 완료되며, 이후에는 더 이상 프로세스를 중단할 수 없습니다. 이 단계는 되돌릴 수 없습니다. 이 단계를 수행하기 전에 함수를 철저히 테스트해야 합니다.
콘솔
Cloud Run Functions 세부정보 페이지의 업그레이드 진행 중 패널에서 업그레이드 커밋을 클릭합니다.
gcloud
--commit
플래그와 함께 gcloud beta functions upgrade
명령어를 실행합니다.
gcloud beta functions upgrade FUNCTION_NAME --commit
업그레이드를 커밋한 후에는 다음을 실행합니다.
- 1세대 함수가 삭제됩니다.
- Cloud Run 함수는
cloudfunctions.net
URL을 유지합니다. - 함수가 목록에 더 이상 표시되지 않는지 확인할 수 있습니다.
gcloud functions describe --region REGION_NAME FUNCTION_NAME
- Cloud Run 서비스 세부정보를 확인할 수 있습니다.
gcloud run services describe FUNCTION_NAME --format yaml
- 출력에 새 세대가 생성된 것으로 표시됩니다.
Goog-managed-by
라벨의 값은 비어 있어야 합니다.
- 출력에 새 세대가 생성된 것으로 표시됩니다.
- 실패 시 재시도를 선택하지 않고 1세대 함수를 만든 경우 트리거의 Pub/Sub 구독에 데드 레터 대기열(DLQ)이 있습니다.
- 이제 대상 주제에 메시지를 게시하면 Cloud Run 함수가 트리거됩니다.
다음 조건에서는 커밋이 실패합니다.
- 트래픽이 Cloud Run 함수로 리디렉션되지 않았습니다.
- Cloud Run 함수가 수동으로 삭제되었습니다.
업그레이드 중단
이 작업을 수행하면 업그레이드 프로세스가 취소됩니다. 새 2세대 함수 사본이 삭제되고 1세대 함수가 원래 cloudfunctions.net
URL로 계속 트래픽을 처리합니다. 업그레이드를 커밋하기 전 업그레이드 프로세스 중에 언제든지 이 작업을 실행할 수 있습니다.
Google Cloud 콘솔을 사용하여 업그레이드를 실행하는 경우 UI에서는 초기 업그레이드 작업 직후에만 프로세스를 중단할 수 있습니다. 중단 버튼은 Functions (1세대) 콘솔의 왼쪽 상단에 있습니다. Google Cloud CLI를 사용하는 경우 업그레이드를 커밋하기 전에 언제든지 업그레이드를 중단할 수 있으며, 업그레이드를 커밋한 후에는 프로세스를 되돌릴 수 없습니다.
Google Cloud 콘솔을 사용하여 업그레이드 프로세스를 실행한 경우에도 Google Cloud CLI를 사용하여 함수 업그레이드를 중단할 수 있습니다.
gcloud beta functions upgrade FUNCTION_NAME --abort
업그레이드를 중단한 후:
- 2세대 함수 사본이 삭제됩니다.
- 1세대 함수는
cloudfunctions.net
URL로 트래픽을 처리합니다. - Google Cloud 콘솔에서 함수의 업그레이드 상태가 구성 복사됨에서 업그레이드 준비됨으로 다시 변경됩니다.
Cloud Run 서비스가 목록에 더 이상 표시되지 않는지 확인할 수 있습니다.
gcloud run services list
함수 환경을 확인할 수 있습니다.
gcloud functions describe --region REGION_NAME FUNCTION_NAME
출력에 함수 환경이 1st gen
로 표시됩니다.
업그레이드를 이미 커밋한 경우 중단 작업이 실패합니다.
변환된 IAM 정책 확인
업그레이드 프로세스 중에 이 도구는 1세대 Cloud Functions와 새로운 Cloud Run Functions 간에 역할과 권한을 최선을 다해 변환합니다.
업그레이드 프로세스에서는 1세대 Cloud Functions IAM 역할을 이에 상응하는 Cloud Run 역할로 변환합니다.
변환 규칙:
roles/cloudfunctions.invoker
이roles/run.invoker
로 변환됩니다.roles/cloudfunctions.developer
이roles/run.sourceDeveloper
로 변환됩니다.roles/cloudfunctions.viewer
이roles/run.sourceViewer
로 변환됩니다.roles/cloudfunctions.admin
이roles/run.admin
및roles/run.sourceDeveloper
로 변환됩니다.
호출자에게 projects.getIamPolicy
또는 run.setIamPolicy
권한이 없으면 IAM 정책 업그레이드가 실패합니다. 호출자에게는 프로젝트에 대한 roles/cloudfunctions.admin
역할 또는 이에 상응하는 역할이 필요합니다.
IAM 정책 업그레이드 확인
IAM 정책이 올바르게 업그레이드되었는지 확인하려면 업그레이드 프로세스의 모든 단계에서 정책을 확인하여 예상 값이 있는지 확인하세요.
함수의 업그레이드 프로세스를 시작합니다.
gcloud beta functions upgrade FUNCTION_NAME --setup-config
맞춤 역할 바인딩이 감지되면 출력에 경고 메시지가 표시됩니다.
1세대 함수에 설정된 IAM 정책이 Cloud Run 함수로 변환되고 업그레이드되었는지 확인합니다.
gcloud functions get-iam-policy FUNCTION_NAME gcloud run services get-iam-policy FUNCTION_NAME
프로젝트 수준의 Cloud Run 함수 호출자 역할 바인딩이 Cloud Run 함수로 변환되고 업그레이드되었는지 확인합니다.
gcloud projects get-iam-policy PROJECT_ID | grep "roles/cloudfunctions.invoker" gcloud run services get-iam-policy FUNCTION_NAME
다음 단계
- Cloud Run Functions 자세히 알아보기