InfoGrab DocsInfoGrab Docs

튜토리얼: Google Cloud Run 컴포넌트로 웹 서비스 생성 및 배포하기

요약

Google Cloud Run 컴포넌트를 사용해 Artifact Registry에 저장된 컨테이너 이미지에서 웹 서비스를 배포하는 방법을 배웁니다. Google Cloud 통합 설정하기의 안내에 따라 다음을 수행합니다.

Google Cloud Run 컴포넌트를 사용해 Artifact Registry에 저장된 컨테이너 이미지에서 웹 서비스를 배포하는 방법을 배웁니다.

시작하기 전에#

  1. Google Cloud 통합 설정하기의 안내에 따라 다음을 수행합니다.

    • Google Cloud IAM을 설정합니다.
    • GitLab을 Google Artifact Registry에 연결합니다.
    • Google Cloud에서 CI/CD job을 실행하도록 GitLab Runner를 설정합니다.
  2. 이 페이지의 명령을 실행하려면 다음 개발 환경 중 하나에 gcloud CLI를 설정합니다.

  3. 다음 명령을 실행해 기본 Google Cloud 프로젝트를 설정합니다.

    gcloud config set project PROJECT_ID
    

    기본 프로젝트를 설정하면 gcloud 명령에 --project 플래그를 전달하지 않아도 됩니다.

  4. Compute Engine 및 Cloud Run API를 활성화합니다.

    gcloud services enable compute.googleapis.com artifactregistry.googleapis.com run.googleapis.com
    
  5. 워크로드 아이덴티티 풀에 다음 역할을 부여합니다.

    • Cloud Storage Admin (roles/run.admin): 서비스를 가져오고 생성하고 업데이트하기 위해 필요합니다.
    • Service Account users (roles/iam.serviceAccountUser): 서비스 계정으로 작업을 실행하기 위해 필요합니다.

    다음 명령을 실행해 developer_access=true 속성 매핑과 일치하는 워크로드 아이덴티티 풀의 모든 principal에 roles/run.admin 및 roles/iam.serviceAccountUser 역할을 부여합니다.

    # Replace ${PROJECT_ID}, ${PROJECT_NUMBER}, ${LOCATION}, ${POOL_ID} with your values below
    WORKLOAD_IDENTITY=principalSet://iam.googleapis.com/projects/${PROJECT_NUMBER}/locations/global/workloadIdentityPools/${POOL_ID}/attribute.developer_access/true
    gcloud projects add-iam-policy-binding ${PROJECT_ID} --member="${WORKLOAD_IDENTITY}" --role="roles/run.admin"
    gcloud projects add-iam-policy-binding ${PROJECT_ID} --member="${WORKLOAD_IDENTITY}" --role="roles/iam.serviceAccountUser"
    

새 GitLab 프로젝트에서 IAM 통합 구성하기#

조직 또는 그룹에 대한 통합용 Google IAM을 설정한 후에는 해당 조직 또는 그룹의 새 프로젝트에서 이 통합을 재사용할 수 있습니다.

  1. 조직 또는 그룹에서 새 GitLab 프로젝트를 생성합니다.

  2. GitLab 프로젝트에서 Settings > Integrations를 선택합니다.

  3. Google Cloud IAM을 선택합니다.

  4. Google Cloud project 섹션에서 다음을 입력합니다.

    • Project ID: 워크로드 아이덴티티 풀의 Google Cloud 프로젝트 ID
    • Project number: 같은 프로젝트의 Google Cloud 프로젝트 번호

    Google Cloud 프로젝트 ID와 번호를 확인하려면 프로젝트 식별하기를 참고합니다.

  5. Workload identity federation 섹션에서 다음을 입력합니다.

    • Pool ID: 워크로드 아이덴티티 풀에 지정한 이름입니다.
    • Provider ID: OIDC 공급자에 지정한 이름입니다.

    힌트: 이 값들은 통합을 처음 설정할 때 사용한 GitLab 프로젝트에서 복사할 수 있습니다.

  6. Save changes를 선택합니다. 제공된 스크립트는 워크로드 아이덴티티 풀을 새로 생성하므로 실행하지 않습니다. 이미 풀을 보유하고 있기 때문입니다.

새 GitLab 프로젝트에서 Google Artifact Registry 통합 구성하기#

Artifact Registry에는 여러 컨테이너 이미지를 저장할 수 있습니다. 새 GitLab 프로젝트에서 같은 리포지터리를 재사용하려면 프로젝트에서 Google Artifact Management 통합을 구성합니다.

  1. GitLab 프로젝트에서 Settings > Integrations를 선택합니다.

  2. Google Artifact Management를 선택합니다.

  3. Repository 섹션에서 다음을 입력합니다.

    • Google Cloud project ID: 사용하려는 Artifact Registry 리포지터리의 프로젝트 ID
    • Repository name: 리포지터리 이름
    • Repository location: 리포지터리의 위치
  4. Save changes를 선택합니다. 제공된 스크립트는 워크로드 아이덴티티 풀이 이미 그룹 또는 조직의 GitLab 사용자에게 Artifact Registry Reader 및 Writer 역할을 부여하고 있으므로 실행하지 않습니다.

GitLab 리포지터리 클론하기#

SSH 또는 HTTPS를 사용해 작업 환경에 GitLab 리포지터리를 클론하려면 로컬 컴퓨터에 Git 리포지터리 클론하기의 안내를 따릅니다.

Dockerfile 생성하기#

  1. 클론한 리포지터리에서 Dockerfile이라는 새 파일을 생성합니다.

  2. 다음 내용을 Dockerfile에 복사해 붙여넣습니다.

    FROM python:3.12.4
    
    ARG name
    
    RUN mkdir web
    
    RUN cat < web/index.html
    <!DOCTYPE html>
    <html>
        <head>
            <title>Home</title>
        </head>
        <body>
            <h1 color="green">Welcome to $name</h1>
        </body>
    </html>
    EOF
    
    CMD ["python3", "-m", "http.server", "8080", "-d", "web"]
    
  3. Dockerfile을 Git에 추가하고 커밋한 다음 GitLab 리포지터리에 푸시합니다.

    git add Dockerfile
    git commit -m "add dockerfile"
    git push
    

    사용자 이름과 개인용 액세스 토큰을 입력하라는 메시지가 표시됩니다.

이 Dockerfile은 HTTP 웹 서비스를 생성합니다.

파이프라인 생성하기#

Docker 이미지를 빌드하고 GitLab 컨테이너 레지스트리에 푸시한 다음, 이미지를 Google Artifact Registry로 복사하고 Cloud Run을 사용해 Google Cloud 인프라에 배포하는 파이프라인을 생성합니다.

  1. GitLab 프로젝트에서 .gitlab-ci.yml 파일을 생성합니다.

  2. 이미지를 빌드하고 GitLab 컨테이너 레지스트리에 푸시한 다음, Google Artifact Registry로 복사하고 Cloud Run을 사용해 배포하는 파이프라인을 생성하려면 .gitlab-ci.yml 파일의 내용을 다음과 비슷하게 수정합니다.

    다음 예시에서 아래 항목을 바꿉니다.

    • LOCATION: Google Artifact Registry 리포지터리를 생성한 Google Cloud 리전입니다.
    • PROJECT: Artifact Registry 리포지터리의 Google Cloud 프로젝트 ID입니다.
    • REPOSITORY: Google Artifact Registry 리포지터리의 리포지터리 ID입니다.
    variables:
      IMAGE_TAG: v$CI_PIPELINE_ID
      AR_IMAGE: LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/python-service
    
    stages:
      - build
      - push
      - deploy
    
    build-job:
      stage: build
      services:
        - docker:24.0.5-dind
      image: docker:git
      before_script:
        - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
      script:
        - docker build -t $CI_REGISTRY_IMAGE:$IMAGE_TAG --build-arg="name=Cloud Run" .
        - docker push $CI_REGISTRY_IMAGE:$IMAGE_TAG
    
    include:
      - component: gitlab.com/google-gitlab-components/artifact-registry/upload-artifact-registry@0.1.0
        inputs:
          stage: push
          source: $CI_REGISTRY_IMAGE:$IMAGE_TAG
          target: $AR_IMAGE:$IMAGE_TAG
    
      - component: gitlab.com/google-gitlab-components/cloud-run/deploy-cloud-run@0.1.0
        inputs:
          stage: deploy
          image: $AR_IMAGE:$IMAGE_TAG
          project_id: PROJECT
          region: LOCATION
          service: python-service
    
    
  3. .gitlab-ci.yml 파일을 Git에 추가하고 커밋한 다음 GitLab 리포지터리에 푸시합니다.

이 파이프라인은 다음을 수행합니다.

Google Cloud Run에서 서비스 확인하기#

  1. Google Cloud Console에서 Cloud Run 페이지로 이동합니다.

  2. Services 탭에서 생성한 서비스를 선택합니다.

    서비스의 Metrics 탭이 표시되며, 서비스의 리전, URL 등 세부 정보를 확인할 수 있습니다.

서비스를 프록시하여 확인하기#

서비스는 비공개이므로 인증하지 않고는 Google Cloud Console에 표시된 URL에서 확인할 수 없습니다. 서비스를 테스트하려면 gcloud CLI를 사용해 인증한 다음 서비스를 http://localhost:8080으로 프록시할 수 있습니다.

다음 명령을 실행해 서비스를 로컬에서 프록시합니다.

gcloud run services proxy SERVICE \
    --project PROJECT_ID \
    --region=LOCATION

http://localhost:8080에서 시작 페이지를 확인할 수 있습니다.

정리하기#

이 페이지에서 사용한 리소스로 인해 Google Cloud 계정에 요금이 부과되지 않도록 하려면 Google Cloud 리소스를 삭제하거나 Google Cloud 프로젝트 전체를 삭제할 수 있습니다.

워크로드 아이덴티티 풀이 포함된 프로젝트를 삭제하면 설정 안내를 처음부터 다시 따르지 않는 한 통합을 사용할 수 없습니다.

GitLab 및 Google의 요금과 프로젝트 관리에 대한 정보는 다음 리소스를 참고합니다.

Google Artifact Registry 리포지터리 삭제하기#

Google Artifact Registry 리포지터리를 삭제하려면 이 섹션의 단계를 따릅니다. Google Cloud 프로젝트 전체를 삭제하려면 프로젝트 삭제하기의 단계를 따릅니다.

리포지터리를 제거하기 전에 보관하려는 이미지가 다른 위치에 있는지 확인합니다.

리포지터리를 삭제하려면 다음 명령을 실행합니다.

gcloud artifacts repositories delete REPOSITORY \
    --location=LOCATION

다음 항목을 바꿉니다.

  • REPOSITORY: Google Artifact Registry 리포지터리 ID입니다.
  • LOCATION: 리포지터리의 위치입니다.

Cloud Run 서비스 삭제하기#

  1. Google Cloud Console에서 Cloud Run 페이지로 이동합니다.
  2. 서비스 옆의 체크박스를 선택합니다.
  3. Delete를 선택합니다.

Google Cloud 프로젝트 삭제하기#

주의: 프로젝트를 삭제하면 다음과 같은 영향이 있습니다.

  • 프로젝트의 모든 항목이 삭제됩니다. 이 문서의 작업에 기존 프로젝트를 사용한 경우, 프로젝트를 삭제하면 해당 프로젝트에서 수행한 다른 작업도 함께 삭제됩니다.
  • 사용자 지정 프로젝트 ID가 손실됩니다. 이 프로젝트를 생성할 때 나중에 사용하려는 사용자 지정 프로젝트 ID를 만들었을 수 있습니다. appspot.com URL과 같이 프로젝트 ID를 사용하는 URL을 유지하려면 프로젝트 전체를 삭제하는 대신 프로젝트 내의 선택한 리소스만 삭제합니다.

Google Cloud에서 여러 아키텍처, 튜토리얼, 빠른 시작 튜토리얼을 살펴볼 계획이라면 프로젝트를 재사용함으로써 프로젝트 할당량 한도를 초과하지 않도록 할 수 있습니다.

  1. Google Cloud 콘솔에서 Manage resources 페이지로 이동합니다.
  2. 프로젝트 목록에서 삭제하려는 프로젝트를 선택한 다음 Delete를 선택합니다.
  3. 대화 상자에 프로젝트 ID를 입력한 다음 Shut down을 선택해 프로젝트를 삭제합니다.

관련 주제#

튜토리얼: Google Cloud Run 컴포넌트로 웹 서비스 생성 및 배포하기

GitLab v19.5
원문 보기

요약

Google Cloud Run 컴포넌트를 사용해 Artifact Registry에 저장된 컨테이너 이미지에서 웹 서비스를 배포하는 방법을 배웁니다. Google Cloud 통합 설정하기의 안내에 따라 다음을 수행합니다.

Google Cloud Run 컴포넌트를 사용해 Artifact Registry에 저장된 컨테이너 이미지에서 웹 서비스를 배포하는 방법을 배웁니다.

시작하기 전에#

  1. Google Cloud 통합 설정하기의 안내에 따라 다음을 수행합니다.

    • Google Cloud IAM을 설정합니다.
    • GitLab을 Google Artifact Registry에 연결합니다.
    • Google Cloud에서 CI/CD job을 실행하도록 GitLab Runner를 설정합니다.
  2. 이 페이지의 명령을 실행하려면 다음 개발 환경 중 하나에 gcloud CLI를 설정합니다.

  3. 다음 명령을 실행해 기본 Google Cloud 프로젝트를 설정합니다.

    gcloud config set project PROJECT_ID
    

    기본 프로젝트를 설정하면 gcloud 명령에 --project 플래그를 전달하지 않아도 됩니다.

  4. Compute Engine 및 Cloud Run API를 활성화합니다.

    gcloud services enable compute.googleapis.com artifactregistry.googleapis.com run.googleapis.com
    
  5. 워크로드 아이덴티티 풀에 다음 역할을 부여합니다.

    • Cloud Storage Admin (roles/run.admin): 서비스를 가져오고 생성하고 업데이트하기 위해 필요합니다.
    • Service Account users (roles/iam.serviceAccountUser): 서비스 계정으로 작업을 실행하기 위해 필요합니다.

    다음 명령을 실행해 developer_access=true 속성 매핑과 일치하는 워크로드 아이덴티티 풀의 모든 principal에 roles/run.admin 및 roles/iam.serviceAccountUser 역할을 부여합니다.

    # Replace ${PROJECT_ID}, ${PROJECT_NUMBER}, ${LOCATION}, ${POOL_ID} with your values below
    WORKLOAD_IDENTITY=principalSet://iam.googleapis.com/projects/${PROJECT_NUMBER}/locations/global/workloadIdentityPools/${POOL_ID}/attribute.developer_access/true
    gcloud projects add-iam-policy-binding ${PROJECT_ID} --member="${WORKLOAD_IDENTITY}" --role="roles/run.admin"
    gcloud projects add-iam-policy-binding ${PROJECT_ID} --member="${WORKLOAD_IDENTITY}" --role="roles/iam.serviceAccountUser"
    

새 GitLab 프로젝트에서 IAM 통합 구성하기#

조직 또는 그룹에 대한 통합용 Google IAM을 설정한 후에는 해당 조직 또는 그룹의 새 프로젝트에서 이 통합을 재사용할 수 있습니다.

  1. 조직 또는 그룹에서 새 GitLab 프로젝트를 생성합니다.

  2. GitLab 프로젝트에서 Settings > Integrations를 선택합니다.

  3. Google Cloud IAM을 선택합니다.

  4. Google Cloud project 섹션에서 다음을 입력합니다.

    • Project ID: 워크로드 아이덴티티 풀의 Google Cloud 프로젝트 ID
    • Project number: 같은 프로젝트의 Google Cloud 프로젝트 번호

    Google Cloud 프로젝트 ID와 번호를 확인하려면 프로젝트 식별하기를 참고합니다.

  5. Workload identity federation 섹션에서 다음을 입력합니다.

    • Pool ID: 워크로드 아이덴티티 풀에 지정한 이름입니다.
    • Provider ID: OIDC 공급자에 지정한 이름입니다.

    힌트: 이 값들은 통합을 처음 설정할 때 사용한 GitLab 프로젝트에서 복사할 수 있습니다.

  6. Save changes를 선택합니다. 제공된 스크립트는 워크로드 아이덴티티 풀을 새로 생성하므로 실행하지 않습니다. 이미 풀을 보유하고 있기 때문입니다.

새 GitLab 프로젝트에서 Google Artifact Registry 통합 구성하기#

Artifact Registry에는 여러 컨테이너 이미지를 저장할 수 있습니다. 새 GitLab 프로젝트에서 같은 리포지터리를 재사용하려면 프로젝트에서 Google Artifact Management 통합을 구성합니다.

  1. GitLab 프로젝트에서 Settings > Integrations를 선택합니다.

  2. Google Artifact Management를 선택합니다.

  3. Repository 섹션에서 다음을 입력합니다.

    • Google Cloud project ID: 사용하려는 Artifact Registry 리포지터리의 프로젝트 ID
    • Repository name: 리포지터리 이름
    • Repository location: 리포지터리의 위치
  4. Save changes를 선택합니다. 제공된 스크립트는 워크로드 아이덴티티 풀이 이미 그룹 또는 조직의 GitLab 사용자에게 Artifact Registry Reader 및 Writer 역할을 부여하고 있으므로 실행하지 않습니다.

GitLab 리포지터리 클론하기#

SSH 또는 HTTPS를 사용해 작업 환경에 GitLab 리포지터리를 클론하려면 로컬 컴퓨터에 Git 리포지터리 클론하기의 안내를 따릅니다.

Dockerfile 생성하기#

  1. 클론한 리포지터리에서 Dockerfile이라는 새 파일을 생성합니다.

  2. 다음 내용을 Dockerfile에 복사해 붙여넣습니다.

    FROM python:3.12.4
    
    ARG name
    
    RUN mkdir web
    
    RUN cat < web/index.html
    <!DOCTYPE html>
    <html>
        <head>
            <title>Home</title>
        </head>
        <body>
            <h1 color="green">Welcome to $name</h1>
        </body>
    </html>
    EOF
    
    CMD ["python3", "-m", "http.server", "8080", "-d", "web"]
    
  3. Dockerfile을 Git에 추가하고 커밋한 다음 GitLab 리포지터리에 푸시합니다.

    git add Dockerfile
    git commit -m "add dockerfile"
    git push
    

    사용자 이름과 개인용 액세스 토큰을 입력하라는 메시지가 표시됩니다.

이 Dockerfile은 HTTP 웹 서비스를 생성합니다.

파이프라인 생성하기#

Docker 이미지를 빌드하고 GitLab 컨테이너 레지스트리에 푸시한 다음, 이미지를 Google Artifact Registry로 복사하고 Cloud Run을 사용해 Google Cloud 인프라에 배포하는 파이프라인을 생성합니다.

  1. GitLab 프로젝트에서 .gitlab-ci.yml 파일을 생성합니다.

  2. 이미지를 빌드하고 GitLab 컨테이너 레지스트리에 푸시한 다음, Google Artifact Registry로 복사하고 Cloud Run을 사용해 배포하는 파이프라인을 생성하려면 .gitlab-ci.yml 파일의 내용을 다음과 비슷하게 수정합니다.

    다음 예시에서 아래 항목을 바꿉니다.

    • LOCATION: Google Artifact Registry 리포지터리를 생성한 Google Cloud 리전입니다.
    • PROJECT: Artifact Registry 리포지터리의 Google Cloud 프로젝트 ID입니다.
    • REPOSITORY: Google Artifact Registry 리포지터리의 리포지터리 ID입니다.
    variables:
      IMAGE_TAG: v$CI_PIPELINE_ID
      AR_IMAGE: LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/python-service
    
    stages:
      - build
      - push
      - deploy
    
    build-job:
      stage: build
      services:
        - docker:24.0.5-dind
      image: docker:git
      before_script:
        - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
      script:
        - docker build -t $CI_REGISTRY_IMAGE:$IMAGE_TAG --build-arg="name=Cloud Run" .
        - docker push $CI_REGISTRY_IMAGE:$IMAGE_TAG
    
    include:
      - component: gitlab.com/google-gitlab-components/artifact-registry/upload-artifact-registry@0.1.0
        inputs:
          stage: push
          source: $CI_REGISTRY_IMAGE:$IMAGE_TAG
          target: $AR_IMAGE:$IMAGE_TAG
    
      - component: gitlab.com/google-gitlab-components/cloud-run/deploy-cloud-run@0.1.0
        inputs:
          stage: deploy
          image: $AR_IMAGE:$IMAGE_TAG
          project_id: PROJECT
          region: LOCATION
          service: python-service
    
    
  3. .gitlab-ci.yml 파일을 Git에 추가하고 커밋한 다음 GitLab 리포지터리에 푸시합니다.

이 파이프라인은 다음을 수행합니다.

Google Cloud Run에서 서비스 확인하기#

  1. Google Cloud Console에서 Cloud Run 페이지로 이동합니다.

  2. Services 탭에서 생성한 서비스를 선택합니다.

    서비스의 Metrics 탭이 표시되며, 서비스의 리전, URL 등 세부 정보를 확인할 수 있습니다.

서비스를 프록시하여 확인하기#

서비스는 비공개이므로 인증하지 않고는 Google Cloud Console에 표시된 URL에서 확인할 수 없습니다. 서비스를 테스트하려면 gcloud CLI를 사용해 인증한 다음 서비스를 http://localhost:8080으로 프록시할 수 있습니다.

다음 명령을 실행해 서비스를 로컬에서 프록시합니다.

gcloud run services proxy SERVICE \
    --project PROJECT_ID \
    --region=LOCATION

http://localhost:8080에서 시작 페이지를 확인할 수 있습니다.

정리하기#

이 페이지에서 사용한 리소스로 인해 Google Cloud 계정에 요금이 부과되지 않도록 하려면 Google Cloud 리소스를 삭제하거나 Google Cloud 프로젝트 전체를 삭제할 수 있습니다.

워크로드 아이덴티티 풀이 포함된 프로젝트를 삭제하면 설정 안내를 처음부터 다시 따르지 않는 한 통합을 사용할 수 없습니다.

GitLab 및 Google의 요금과 프로젝트 관리에 대한 정보는 다음 리소스를 참고합니다.

Google Artifact Registry 리포지터리 삭제하기#

Google Artifact Registry 리포지터리를 삭제하려면 이 섹션의 단계를 따릅니다. Google Cloud 프로젝트 전체를 삭제하려면 프로젝트 삭제하기의 단계를 따릅니다.

리포지터리를 제거하기 전에 보관하려는 이미지가 다른 위치에 있는지 확인합니다.

리포지터리를 삭제하려면 다음 명령을 실행합니다.

gcloud artifacts repositories delete REPOSITORY \
    --location=LOCATION

다음 항목을 바꿉니다.

  • REPOSITORY: Google Artifact Registry 리포지터리 ID입니다.
  • LOCATION: 리포지터리의 위치입니다.

Cloud Run 서비스 삭제하기#

  1. Google Cloud Console에서 Cloud Run 페이지로 이동합니다.
  2. 서비스 옆의 체크박스를 선택합니다.
  3. Delete를 선택합니다.

Google Cloud 프로젝트 삭제하기#

주의: 프로젝트를 삭제하면 다음과 같은 영향이 있습니다.

  • 프로젝트의 모든 항목이 삭제됩니다. 이 문서의 작업에 기존 프로젝트를 사용한 경우, 프로젝트를 삭제하면 해당 프로젝트에서 수행한 다른 작업도 함께 삭제됩니다.
  • 사용자 지정 프로젝트 ID가 손실됩니다. 이 프로젝트를 생성할 때 나중에 사용하려는 사용자 지정 프로젝트 ID를 만들었을 수 있습니다. appspot.com URL과 같이 프로젝트 ID를 사용하는 URL을 유지하려면 프로젝트 전체를 삭제하는 대신 프로젝트 내의 선택한 리소스만 삭제합니다.

Google Cloud에서 여러 아키텍처, 튜토리얼, 빠른 시작 튜토리얼을 살펴볼 계획이라면 프로젝트를 재사용함으로써 프로젝트 할당량 한도를 초과하지 않도록 할 수 있습니다.

  1. Google Cloud 콘솔에서 Manage resources 페이지로 이동합니다.
  2. 프로젝트 목록에서 삭제하려는 프로젝트를 선택한 다음 Delete를 선택합니다.
  3. 대화 상자에 프로젝트 ID를 입력한 다음 Shut down을 선택해 프로젝트를 삭제합니다.

관련 주제#