Cloud Workstations에서는 워크스테이션에 대해 커스텀 이미지를 만들고 사용할 수 있습니다. 커스텀 이미지가 사용된 후에는 기본 이미지에서 사용할 수 있는 수정 및 업데이트를 가져오기 위해 커스텀 이미지의 다시 빌드를 자동화하는 것이 좋습니다.
이 튜토리얼에서는 커스텀 워크스테이션 이미지에 보안 업데이트 및 패치를 포함하도록 자동화된 파이프라인을 빌드하는 방법을 알아봅니다.
목표
이 튜토리얼에서는 다음 단계에 따라 기본 이미지에 대해 자동화된 파이프라인을 빌드합니다.
- 커스텀 이미지를 저장하고 스캔하기 위해 Artifact Registry 저장소를 만듭니다.
- 이미지 구성을 저장하기 위해 Google Cloud로 GitHub를 구성합니다.
- 커스텀 이미지를 만들고 Artifact Registry에 배포하는 작업을 자동화하기 위해 Cloud Build 트리거를 만듭니다.
- 정기적으로 빌드를 시작하도록 Cloud Scheduler를 구성합니다.
- 자동화된 프로세스의 결과를 검토합니다.
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.
시작하기 전에
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Artifact Registry, Container Scanning API, Cloud Build, and Cloud Scheduler APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Artifact Registry, Container Scanning API, Cloud Build, and Cloud Scheduler APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
환경 준비
계속하기 전에 다음 환경 변수를 설정해야 합니다.
사용할 클라우드 프로젝트의 프로젝트 ID를 설정합니다.
PROJECT_ID=$PROJECT_ID
저장소를 저장할 GitHub 사용자 이름을 설정합니다.
GITHUB_USER=$GITHUB_ID
프로세스 전체에 걸쳐서 사용할
PROJECT_NUMBER
및REGION
변수를 설정합니다.PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \ --format='value(projectNumber)') REGION=$REGION
앞의 예시에서 $REGION을 사용하려는 리전 이름으로 바꿉니다. 예를 들면
us-central1
입니다.사용 가능한 리전에 대한 자세한 내용은 Cloud Workstations 위치를 참조하세요.
Artifact Registry 저장소 만들기
이 튜토리얼에서는 Artifact Registry를 사용하여 이미지를 저장하고 스캔합니다.
다음 명령어를 사용하여 저장소를 만듭니다.
gcloud artifacts repositories create custom-images \ --repository-format=docker \ --location=$REGION \ --description="Docker repository"
$REGION을 사용하려는 리전 이름으로 바꿉니다.
Artifact Registry에 액세스할 때
gcloud
CLI 사용자 인증 정보를 사용하도록 Docker를 구성합니다.gcloud auth configure-docker $REGION-docker.pkg.dev
Artifact Analysis를 사용 중지하려면 다음 명령어를 실행합니다.
gcloud services disable containerscanning.googleapis.com
GitHub 저장소 구성
실제로는 커스텀 이미지의 Dockerfile을 Git 저장소에 보관합니다. 자동화된 프로세스가 빌드 프로세스 중 이 저장소에 액세스하여 관련 구성 및 Dockerfile을 가져옵니다.
샘플 저장소 포크
컨테이너 정의를 제공하는 샘플 저장소를 포크하려면 다음 단계를 수행합니다.
- 이 링크를 클릭하여
software-delivery-workshop
저장소의 새 포크 만들기를 수행합니다. - 메시지가 표시되면 GitHub에 로그인합니다.
- GitHub 사용자 이름을 소유자로 선택합니다. 저장소 이름이
software-delivery-workshop
으로 표시됩니다. - 포크 만들기를 클릭하고 프로세스가 완료되도록 몇 초 정도 기다립니다.
Cloud Build를 GitHub에 연결
그런 후 기본 제공되는 GitHub 연결 기능을 사용해서 저장소를 Cloud Build에 연결합니다. GitHub 저장소 링크를 클릭하고 안내에 따라 프로세스를 완료하는 방법을 설명합니다. 명령줄로 나중에 수행할 수도 있으므로 마법사 마지막 단계에서 트리거를 만들 필요가 없고 마지막 단계를 건너뛸 수 있습니다.
다른 Git 저장소 솔루션을 사용하는 경우 안내에 따라 Cloud Build를 GitLab에 연결하거나 Bitbucket에 연결할 수 있습니다.
Cloud Build 트리거 만들기
샘플 저장소에는 컨테이너 이미지를 빌드하는 데 사용되는 컨테이너 정의 및 Cloud Build 구성이 포함되어 있습니다. 이 단계에서는 labs/cloudbuild-scheduled-jobs/code-oss-java 폴더에서 찾을 수 있는 cloudbuild.yaml
파일에서 안내를 실행하는 Cloud Build 트리거를 만듭니다.
gcloud builds triggers create manual \
--name=custom-image-trigger \
--repo=$GITHUB_USER/software-delivery-workshop \
--repo-type=GITHUB \
--branch=main \
--build-config=labs/cloudbuild-scheduled-jobs/code-oss-java/cloudbuild.yaml \
--substitutions=_REGION=$REGION,_AR_REPO_NAME=custom-images,_AR_IMAGE_NAME=code-oss-java,_IMAGE_DIR=labs/cloudbuild-scheduled-jobs/code-oss-java
TRIGGER_ID=$(gcloud builds triggers list \
--filter=name="custom-image-trigger" --format="value(id)")
이 예시는 다음을 구성합니다.
gcloud
CLI 명령어는 두 번째 줄에name
플래그로 표시된 대로 Cloud Build 내에서custom-image-trigger
라는 수동 트리거를 만듭니다.- 다음 3개 줄에는 소스 GitHub 저장소와 관련된 플래그가 포함되어 있습니다.
- 저장소 경로
- 저장소 유형
- 빌드할 Git 브랜치
build-config
플래그는 Git 저장소의 Cloud Build 파일에 대한 경로를 나타냅니다.작업을 동적으로 만들려면
substitutions
플래그를 사용합니다. 이 작업의 경우 명령어가 다음 변수를 전달합니다.- 리전
$_REGION
- Artifact Registry 저장소 이름
$_AR_REPO_NAME
- 컨테이너 이미지 이름
$_AR_IMAGE_NAME
- 빌드할 Dockerfile 위치
$_IMAGE_DIR
cloudbuild.yaml 파일을 보고 이러한 변수가 프로세스에 사용되는 방법을 확인합니다.
- 리전
트리거를 만든 후 트리거의 고유 이름이 검색되고 나중에 사용할 수 있도록
$TRIGGER_ID
환경 변수에 저장됩니다.
Cloud Scheduler 구성
최신 업데이트 및 패치를 사용해서 이미지를 최신 상태로 유지하기 위해 Cloud Scheduler를 사용해서 설정된 빈도로 Cloud Build 트리거를 실행합니다. 이 튜토리얼에서는 작업이 매일 실행됩니다. 실제에서는 최신 업데이트가 항상 포함되도록 조직 요구에 맞는 빈도로 설정합니다.
기본 서비스 계정에 Cloud Build 트리거를 호출하는 데 필요한 역할을 부여합니다.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/cloudbuild.builds.editor"
Cloud Build 서비스 계정에 Artifact Registry에 이미지를 업로드하는 데 필요한 역할을 부여합니다.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \ --role="roles/artifactregistry.admin"
다음 명령어를 사용해서 Cloud Scheduler 작업을 만듭니다.
gcloud scheduler jobs create http run-build \ --schedule='0 1 * * *' \ --uri=https://cloudbuild.googleapis.com/v1/projects/$PROJECT_ID/locations/global/triggers/$TRIGGER_ID:run \ --location=us-central1 \ --oauth-service-account-email=$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --oauth-token-scope=https://www.googleapis.com/auth/cloud-platform
작업이 하루 한 번 실행되도록 설정되지만 기능을 즉시 테스트하려면 Cloud Scheduler에서 작업을 수동으로 실행합니다.
- Cloud Scheduler 페이지에서 바로 전에 만든 run-build라는 항목을 찾습니다.
- 작업 열에서 해당 행에 대해 more_vert더보기 옵션 메뉴를 클릭합니다.
- 시스템을 수동으로 테스트하기 위해 작업 강제 실행을 클릭합니다.
명령어가 성공적으로 실행되면 Cloud Build 기록 페이지로 전환해서 진행 상태를 검토합니다.
결과 검토
설정 프로세스 중에 컨테이너 스캔 API를 사용 설정했기 때문에 Artifact Registry가 이미지에서 자동으로 보안 취약점을 스캔합니다.
취약점을 검토하려면 다음 안내를 따르세요.
Artifact Registry 저장소 페이지를 엽니다.
저장소 목록에서 저장소를 클릭합니다.
이미지 이름을 클릭합니다. 각 이미지 다이제스트의 취약점 합계가 취약점 열에 표시됩니다.
이미지의 취약점 목록을 보려면 취약점 열에 있는 링크를 클릭하세요. 취약점 목록에는 심각도, 수정 가능 여부, 취약점이 포함된 패키지의 이름이 표시됩니다.
삭제
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.
이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 더 이상 필요하지 않은 리소스를 삭제해야 합니다.
Google Cloud 콘솔이나 gcloud
CLI에서 Google Cloud 프로젝트를 삭제하려면 다음 안내를 따르세요.
콘솔
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
gcloud
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
다음 단계
- 사용 가능한 사전 구성된 기본 이미지 목록 검토
- 컨테이너 이미지 맞춤설정
- 사용 가능한 머신 유형 검토
- 보안 권장사항 설정
- Google Cloud에 대한 참조 아키텍처, 다이어그램, 권장사항 살펴보기 Cloud 아키텍처 센터를 살펴보세요.