시작 스크립트는 가상 머신(VM) 인스턴스의 시작 프로세스 동안 태스크를 수행하는 파일입니다. 시작 스크립트는 프로젝트의 모든 VM 또는 단일 VM에 적용될 수 있습니다. VM 수준의 메타데이터로 지정된 시작 스크립트는 프로젝트 수준의 메타데이터로 지정된 시작 스크립트를 재정의하며, 네트워크를 사용할 수 있을 때만 시작 스크립트가 실행됩니다. 이 문서에서는 Linux VM 인스턴스에서 시작 스크립트를 사용하는 방법에 대해 설명합니다. 프로젝트 수준의 시작 스크립트를 추가하는 방법은 gcloud compute project-info add-metadata
를 참조하세요.
Linux 시작 스크립트의 경우 bash 또는 비bash 파일을 사용할 수 있습니다. 비bash 파일을 사용하려면 파일 상단에 #!
를 추가하여 인터프리터를 지정합니다. 예를 들어 Python 3 시작 스크립트를 사용하려면 파일 상단에 #! /usr/bin/python3
를 추가합니다.
이 문서의 절차 중 하나에 따라 시작 스크립트를 지정하면 Compute Engine이 다음을 수행합니다.
시작 스크립트를 VM에 복사
시작 스크립트에 대한 실행 권한 설정
VM이 부팅될 때 시작 스크립트를
root
사용자로 실행
시작 스크립트와 관련된 여러 태스크 및 이러한 각 태스크를 수행해야 하는 경우에 대한 자세한 내용은 개요를 참조하세요.
시작하기 전에
- 시작 스크립트 개요에 대해 알아보기
- 메타데이터 서버에 대해 알아보기
-
아직 인증을 설정하지 않았다면 설정합니다.
인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다.
로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
Google Cloud Console에서 인스턴스 만들기 페이지로 이동합니다.
부팅 디스크에서 변경을 선택하고 Linux 운영체제를 선택합니다.
고급 옵션 섹션을 펼친 후 다음을 수행합니다.
- 관리 섹션을 펼칩니다.
자동화 섹션에서 다음 시작 스크립트를 추가합니다.
#! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script added directly.</p></body></html> EOF
만들기를 클릭합니다.
Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
VM의 이름을 클릭합니다.
수정을 클릭합니다.
자동화에서 시작 스크립트의 콘텐츠를 추가합니다.
VM_NAME: VM의 이름
ZONE: VM의 영역
PROJECT_ID: 프로젝트 ID
ZONE: VM을 만들 영역
instances.get
메서드를 사용하여 VM의tags.fingerprint
값을 가져옵니다.GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
다음을 바꿉니다.
PROJECT_ID: 프로젝트 ID
ZONE: VM의 영역
VM_NAME: VM의 영역
instances.setMetadata
메서드 호출에fingerprint
값을 사용하여 시작 스크립트의 메타데이터 키와 값과 함께 시작 스크립트를 전달합니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata { "fingerprint": FINGERPRINT, "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt update\napt -y install apache2\ncat <<EOF > /var/www/html/index.html\n<html><body><p>Linux startup script added directly.</p></body></html>\nEOF" } ], ... }
다음을 바꿉니다.
PROJECT_ID: 프로젝트 ID
ZONE: VM의 영역
VM_NAME: VM의 영역
FINGERPRINT:
instances.get
메서드를 사용하여 가져온tags.fingerprint
값입니다.
시작 스크립트를 저장할 로컬 파일을 만듭니다.
gcloud CLI에서 시작 스크립트까지의 상대 경로를 확인합니다.
다음 시작 스크립트를 파일에 추가합니다.
#! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script from a local file.</p></body></html> EOF
VM_NAME: VM의 이름
FILE_PATH: 시작 스크립트 파일의 상대 경로
VM_NAME: VM의 이름
ZONE: VM의 영역
FILE_PATH: 시작 스크립트 파일의 상대 경로
시작 스크립트를 저장할 파일을 만듭니다. 이 예시에서는 bash(
.sh
) 파일이 사용됩니다.다음을 bash 파일에 추가합니다. 그러면 Apache가 설치되고 간단한 웹페이지가 생성됩니다.
#! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script from Cloud Storage.</p></body></html> EOF
기본적으로 이를 허용하지 않는 명시적인 액세스 제어가 없는 한, 프로젝트 소유자와 프로젝트 편집자는 동일한 프로젝트의 Cloud Storage 파일에 액세스할 수 있습니다.
Cloud Storage 버킷 또는 객체가 메타데이터보다 안전하지 않은 경우 시작 스크립트가 수정되고 VM이 재부팅되면 권한 에스컬레이션이 발생할 위험이 있습니다. VM이 재부팅되면 시작 스크립트가
root
로 실행된 다음 연결된 서비스 계정의 권한을 사용하여 다른 리소스에 액세스할 수 있기 때문입니다.Google Cloud Console에서 인스턴스 만들기 페이지로 이동합니다.
VM 세부정보를 지정합니다.
부팅 디스크에서 변경을 선택하고 Linux 운영체제를 선택합니다.
ID 및 API 액세스 섹션에서 스토리지 객체 뷰어 역할(
roles/storage.objectViewer
)이 있는 서비스 계정을 선택합니다.고급 옵션 섹션을 펼친 후 다음을 수행합니다.
- 관리 섹션을 펼칩니다.
메타데이터 섹션에서 다음 값을 추가합니다.
키: 메타데이터 키입니다.
startup-script-url
로 설정하여 Cloud Storage의 시작 스크립트를 추가합니다.값: 메타데이터 값. 다음 형식 중 하나를 사용하여 시작 스크립트 파일의 Cloud Storage 위치로 설정합니다.
- 인증된 URL:
https://storage.googleapis.com/BUCKET/FILE
- gsutil URI:
gs://BUCKET/FILE
다음을 바꿉니다.
- BUCKET: 시작 스크립트 파일이 포함된 버킷의 이름
- FILE: 시작 스크립트 파일 이름
- 인증된 URL:
VM을 만들려면 만들기를 클릭합니다.
Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
VM의 이름을 클릭합니다.
수정을 클릭합니다.
메타데이터에 다음 값을 추가합니다.
키:
startup-script-url
값: 다음 형식 중 하나를 사용하는 시작 스크립트 파일의 Cloud Storage 위치입니다.
- 인증된 URL:
https://storage.googleapis.com/BUCKET/FILE
- gsutil URI:
gs://BUCKET/FILE
- 인증된 URL:
VM_NAME: VM의 이름
CLOUD_STORAGE_URL: 메타데이터 값 다음 형식 중 하나를 사용하여 시작 스크립트 파일의 Cloud Storage 위치로 설정합니다.
- 인증된 URL:
https://storage.googleapis.com/BUCKET/FILE
- gsutil URI:
gs://BUCKET/FILE
- 인증된 URL:
VM_NAME: VM의 이름
ZONE: VM의 영역
CLOUD_STORAGE_URL: 메타데이터 값 다음 형식 중 하나를 사용하여 시작 스크립트 파일의 Cloud Storage 위치로 설정합니다.
- 인증된 URL:
https://storage.googleapis.com/BUCKET/FILE
- gsutil URI:
gs://BUCKET/FILE
- 인증된 URL:
PROJECT_ID: 프로젝트 ID
ZONE: 새 VM을 만들 영역
CLOUD_STORAGE_URL: 메타데이터 값입니다. 다음 형식 중 하나를 사용하여 시작 스크립트 파일의 Cloud Storage 위치로 설정합니다.
- 인증된 URL:
https://storage.googleapis.com/BUCKET/FILE
- gsutil URI:
gs://BUCKET/FILE
- 인증된 URL:
instances.get
메서드를 사용하여 VM의tags.fingerprint
값을 가져옵니다.GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
다음을 바꿉니다.
PROJECT_ID: 프로젝트 ID
ZONE: VM의 영역
VM_NAME: VM의 영역
instances.setMetadata
메서드 호출에fingerprint
값을 사용하여 시작 스크립트의 메타데이터 키와 값과 함께 시작 스크립트를 전달합니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata { "fingerprint": FINGERPRINT, "items": [ { "key": "startup-script-url", "value": "CLOUD_STORAGE_URL" } ], ... }
다음을 바꿉니다.
PROJECT_ID: 프로젝트 ID
ZONE: VM의 영역
VM_NAME: VM의 영역
FINGERPRINT:
instances.get
메서드를 사용하여 가져온tags.fingerprint
값입니다.CLOUD_STORAGE_URL: 메타데이터 값 다음 형식 중 하나를 사용하여 시작 스크립트 파일의 Cloud Storage 위치로 설정합니다.
- 인증된 URL:
https://storage.googleapis.com/BUCKET/FILE
- gsutil URI:
gs://BUCKET/FILE
- 인증된 URL:
메타데이터 키의 값을 쿼리하는 시작 스크립트를 만듭니다. 예를 들어 다음 bash 파일(
.sh
) 시작 스크립트는foo
메타데이터 키의 값을 쿼리합니다.#! /bin/bash METADATA_VALUE=$(curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/foo -H "Metadata-Flavor: Google") apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Accessing metadata value of foo: $METADATA_VALUE</p></body></html> EOF
다음
gcloud compute instances create
명령어를 사용하여 VM을 만들 때foo
메타데이터 키의 값을 설정합니다. 이 예시에서는 시작 스크립트가 로컬 파일에서 VM에 전달됩니다.gcloud
gcloud compute instances create VM_NAME \ --image-project=debian-cloud \ --image-family=debian-10 \ --metadata-from-file=startup-script=FILE_PATH \ --metadata=foo=bar
다음을 바꿉니다.
VM_NAME: VM의 이름
FILE_PATH: 시작 스크립트 파일의 상대 경로
메타데이터 키-값 쌍을 지정하는 방법은 커스텀 메타데이터 설정을 참조하세요.
로컬 워크스테이션에서 웹브라우저의 외부 IP를 보고 시작 스크립트가
foo
의 값을 출력하는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 1분 정도 기다려야 할 수도 있습니다.다음 명령어를 실행합니다.
sudo google_metadata_script_runner startup
인스턴스에 연결하고 다음 명령어를 실행합니다.
sudo journalctl -u google-startup-scripts.service
Google Cloud 콘솔에서 직렬 포트 1을 통해 출력을 보고
google_metadata_script_runner
이벤트를 확인합니다.Windows VM에서 시작 스크립트 사용 방법 알아보기
시작 스크립트 문제 해결 방법 알아보기
종료 스크립트 추가 방법 알아보기
메타데이터 저장 및 검색 자세히 알아보기
REST
로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공하는 사용자 인증 정보를 사용합니다.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
자세한 내용은 Google Cloud 인증 문서의 REST 사용 인증을 참조하세요.
Linux 시작 스크립트의 메타데이터 키
시작 스크립트는 메타데이터 키로 지정된 위치에서 VM에 전달됩니다. 메타데이터 키는 시작 스크립트가 로컬로 저장되는지, Cloud Storage에 저장되는지, VM에 직접 전달되는지를 지정합니다. 사용하는 메타데이터 키는 시작 스크립트의 크기에 따라 달라질 수 있습니다.
다음 표에서는 Linux 시작 스크립트에 사용할 수 있는 메타데이터 키를 보여주고, 시작 스크립트의 스토리지 위치 및 크기를 기준으로 사용할 키에 대한 정보를 제공합니다.
메타데이터 키 용도 startup-script
로컬에 저장되거나 직접 추가된 최대 256KB의 bash 또는 비 bash 시작 스크립트 전달 startup-script-url
Cloud Storage에 저장되고 크기가 256KB를 초과하는 bash 또는 비 bash 시작 스크립트 전달. 여기에 입력하는 문자열은 gsutil
을 실행하는 데 사용됩니다.startup-script-url
에 공백 문자가 포함되어 있는 경우 공백을%20
로 바꾸거나startup-script-url
문자열에 큰따옴표(""
)를 추가하지 마세요.Linux 시작 스크립트 실행 순서
여러 시작 스크립트를 사용할 수 있습니다. 로컬로 저장된 또는 직접 추가된 시작 스크립트는 Cloud Storage에 저장된 시작 스크립트 전에 실행됩니다. 다음 표에서는 메타데이터 키를 기준으로 Linux 시작 스크립트의 실행 순서를 보여줍니다.
메타데이터 키 실행 순서 startup-script
초기 부팅 후 부팅할 때마다 첫 번째 startup-script-url
초기 부팅 후 부팅할 때마다 두 번째 Linux 시작 스크립트 직접 전달
VM을 만들 때 시작 스크립트의 콘텐츠를 VM에 직접 추가할 수 있습니다. 다음 절차에서는 Apache를 설치하고 기본 웹페이지를 만드는 시작 스크립트로 VM을 만드는 방법을 보여줍니다.
Console
Linux 시작 스크립트를 새 VM에 직접 전달
Linux 시작 스크립트를 기존 VM에 직접 전달
시작 스크립트 확인
VM이 시작되면 웹 브라우저에서 외부 IP를 확인하여 시작 스크립트가 웹사이트를 만들었는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 1분 정도 기다려야 할 수도 있습니다.
gcloud
Linux 시작 스크립트를 새 VM에 직접 전달
다음
gcloud compute instances create
명령어를 실행하여 VM을 만들 때 시작 스크립트 콘텐츠를 VM에 직접 전달합니다.gcloud compute instances create VM_NAME \ --image-project=debian-cloud \ --image-family=debian-10 \ --metadata=startup-script='#! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script added directly.</p></body></html> EOF'
VM_NAME을 VM의 이름으로 바꿉니다.
Linux 시작 스크립트를 기존 VM에 직접 전달
다음
gcloud compute instances add-metadata
명령어를 사용하여 시작 스크립트를 기존 VM에 직접 추가합니다.gcloud compute instances add-metadata VM_NAME \ --zone=ZONE \ --metadata=startup-script='#! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script added directly.</p></body></html> EOF'
다음을 바꿉니다.
시작 스크립트 확인
VM이 시작되면 웹 브라우저에서 외부 IP를 확인하여 시작 스크립트가 웹사이트를 만들었는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 1분 정도 기다려야 할 수도 있습니다.
REST
Linux 시작 스크립트를 새 VM에 직접 전달
다음
instances.insert
메서드를 실행하여 VM을 만들 때 시작 스크립트 콘텐츠를 VM에 직접 전달합니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { ... "networkInterfaces": [ { "accessConfigs": [ { "type": "ONE_TO_ONE_NAT" } ] } ], "metadata": { "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt update\napt -y install apache2\ncat <<EOF > /var/www/html/index.html\n<html><body><p>Linux startup script added directly.</p></body></html>\nEOF" } ] }, ... }
다음을 바꿉니다.
Linux 시작 스크립트를 기존 VM에 직접 전달
시작 스크립트 확인
VM이 시작되면 웹 브라우저에서 외부 IP를 확인하여 시작 스크립트가 웹사이트를 만들었는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 1분 정도 기다려야 할 수도 있습니다.
로컬 파일에서 Linux 시작 스크립트 전달
시작 스크립트를 워크스테이션의 로컬 파일에 저장하고 로컬 파일을 만들 때 VM에 로컬 파일을 메타데이터로 전달할 수 있습니다. VM에 저장된 파일을 시작 스크립트로 사용할 수 없습니다.
로컬 파일에서 VM으로 VM 시작 스크립트를 전달하려면 먼저 다음을 수행합니다.
gcloud
로컬 파일에서 새 VM으로 Linux 시작 스크립트 전달
--metadata-from-file
플래그와 함께gcloud compute instances create
명령어를 사용하여 VM을 만들고 시작 스크립트로 사용할 로컬 파일의 콘텐츠를 전달합니다.gcloud compute instances create VM_NAME \ --image-project=debian-cloud \ --image-family=debian-10 \ --metadata-from-file=startup-script=FILE_PATH
다음을 바꿉니다.
Linux 시작 스크립트를 로컬 파일에서 기존 VM으로 전달
다음
gcloud compute instances add-metadata
명령어를 사용하여 시작 스크립트를 로컬 파일에서 기존 VM에 전달합니다.gcloud compute instances add-metadata VM_NAME \ --zone=ZONE \ --metadata-from-file startup-script=FILE_PATH
다음을 바꿉니다.
시작 스크립트 확인
웹브라우저에서 외부 IP를 보고 시작 스크립트가 웹사이트를 만들었는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 1분 정도 기다려야 할 수도 있습니다.
Cloud Storage에서 Linux 시작 스크립트 전달
시작 스크립트를 Cloud Storage에 저장하고 VM을 만들 때 이를 VM에 전달할 수 있습니다. Cloud Storage에 시작 스크립트를 추가하면 VM을 만들 때 시작 스크립트를 참조하는 데 사용할 수 있는 URL이 있습니다.
Cloud Storage 버킷에서 시작 스크립트를 추가하려면 먼저 다음을 수행합니다.
보안에 미치는 영향
제한사항
Console
Cloud Storage에 저장된 시작 스크립트를 새 VM에 전달
Cloud Storage에 저장된 시작 스크립트를 기존 VM에 전달
시작 스크립트 확인
웹브라우저에서 외부 IP를 보고 시작 스크립트가 웹사이트를 만들었는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 1분 정도 기다려야 할 수도 있습니다.
gcloud
Cloud Storage에 저장된 시작 스크립트를 새 VM에 전달
다음
gcloud compute instances create
명령어를 실행하여 VM을 만들 때 Cloud Storage에 저장된 시작 스크립트를 VM에 전달합니다.--scope
플래그 값에 대해 VM이 Cloud Storage에 액세스할 수 있도록storage-ro
를 사용합니다.gcloud compute instances create VM_NAME \ --image-project=debian-cloud \ --image-family=debian-10 \ --scopes=storage-ro \ --metadata=startup-script-url=CLOUD_STORAGE_URL
다음을 바꿉니다.
Cloud Storage에 저장된 시작 스크립트를 기존 VM에 전달
다음
gcloud compute instances add-metadata
명령어를 사용하여 Cloud Storage에 저장된 시작 스크립트를 기존 VM에 전달합니다.gcloud compute instances add-metadata VM_NAME \ --zone=ZONE \ --metadata startup-script-url=CLOUD_STORAGE_URL
다음을 바꿉니다.
시작 스크립트 확인
웹브라우저에서 외부 IP를 보고 시작 스크립트가 웹사이트를 만들었는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 1분 정도 기다려야 할 수도 있습니다.
REST
Cloud Storage에 저장된 시작 스크립트를 새 VM에 전달
다음
instances.insert
메서드를 사용하여 VM을 만들 때 Cloud Storage에 저장된 시작 스크립트를 VM에 전달합니다. VM이 Cloud Storage에 액세스할 수 있도록scopes
필드에https://www.googleapis.com/auth/devstorage.read_only
를 추가합니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { ... "networkInterfaces": [ { "accessConfigs": [ { "type": "ONE_TO_ONE_NAT" } ] } ], "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only" ] } ], "metadata": { "items": [ { "key": "startup-script-url", "value": "CLOUD_STORAGE_URL" } ] }, ... }
다음을 바꿉니다.
Cloud Storage에 저장된 시작 스크립트를 기존 VM에 전달
시작 스크립트 확인
웹브라우저에서 외부 IP를 보고 시작 스크립트가 웹사이트를 만들었는지 확인합니다. 샘플 시작 스크립트가 완료될 때까지 1분 정도 기다려야 할 수도 있습니다.
Linux 시작 스크립트에서 메타데이터에 액세스
시작 스크립트에서 메타데이터 값에 액세스할 수 있습니다. 예를 들어 여러 VM에 대해 동일한 스크립트를 사용하고 각 VM에 서로 다른 메타데이터 값을 전달하여 각 스크립트를 개별적으로 매개변수화할 수 있습니다.
시작 스크립트에서 커스텀 메타데이터 값에 액세스하려면 다음을 수행합니다.
Linux 시작 스크립트 재실행
다음을 수행하여 시작 스크립트를 재실행합니다.
Linux 시작 스크립트의 출력 보기
다음 중 하나를 수행하여 Linux 시작 스크립트의 출력을 볼 수 있습니다.
다음 단계
달리 명시되지 않는 한 이 페이지의 콘텐츠에는 Creative Commons Attribution 4.0 라이선스에 따라 라이선스가 부여되며, 코드 샘플에는 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 Google Developers 사이트 정책을 참조하세요. 자바는 Oracle 및/또는 Oracle 계열사의 등록 상표입니다.
최종 업데이트: 2024-11-25(UTC)
-