시작 스크립트는 가상 머신(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
- gcloud 스토리지 URI:
gs://BUCKET/FILE
다음을 바꿉니다.
- BUCKET: 시작 스크립트 파일이 포함된 버킷의 이름
- FILE: 시작 스크립트 파일 이름
- 인증된 URL:
VM을 만들려면 만들기를 클릭합니다.
Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
VM의 이름을 클릭합니다.
수정을 클릭합니다.
메타데이터에 다음 값을 추가합니다.
키:
startup-script-url
값: 다음 형식 중 하나를 사용하는 시작 스크립트 파일의 Cloud Storage 위치입니다.
- 인증된 URL:
https://storage.googleapis.com/BUCKET/FILE
- gcloud 스토리지 URI:
gs://BUCKET/FILE
- 인증된 URL:
VM_NAME: VM의 이름
CLOUD_STORAGE_URL: 메타데이터 값 다음 형식 중 하나를 사용하여 시작 스크립트 파일의 Cloud Storage 위치로 설정합니다.
- 인증된 URL:
https://storage.googleapis.com/BUCKET/FILE
- gcloud 스토리지 URI:
gs://BUCKET/FILE
- 인증된 URL:
VM_NAME: VM의 이름
ZONE: VM의 영역
CLOUD_STORAGE_URL: 메타데이터 값 다음 형식 중 하나를 사용하여 시작 스크립트 파일의 Cloud Storage 위치로 설정합니다.
- 인증된 URL:
https://storage.googleapis.com/BUCKET/FILE
- gcloud 스토리지 URI:
gs://BUCKET/FILE
- 인증된 URL:
PROJECT_ID: 프로젝트 ID
ZONE: 새 VM을 만들 영역
CLOUD_STORAGE_URL: 메타데이터 값입니다. 다음 형식 중 하나를 사용하여 시작 스크립트 파일의 Cloud Storage 위치로 설정합니다.
- 인증된 URL:
https://storage.googleapis.com/BUCKET/FILE
- gcloud 스토리지 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
- gcloud 스토리지 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 시작 스크립트 전달. 여기에 입력하는 문자열은 gcloud storage
을 실행하는 데 사용됩니다.startup-script-url
에 공백 문자가 포함되어 있는 경우 공백을%20
로 바꾸거나startup-script-url
문자열에 큰따옴표(""
)를 추가하지 마세요.Linux 시작 스크립트 실행 순서
여러 시작 스크립트를 사용할 수 있습니다. 로컬로 저장된 또는 직접 추가된 시작 스크립트는 Cloud Storage에 저장된 시작 스크립트 전에 실행됩니다. 다음 표에서는 메타데이터 키를 기준으로 Linux 시작 스크립트의 실행 순서를 보여줍니다.
메타데이터 키 실행 순서 startup-script
초기 부팅 후 부팅할 때마다 첫 번째 startup-script-url
초기 부팅 후 부팅할 때마다 두 번째 Linux 시작 스크립트 직접 전달
VM을 만들 때 시작 스크립트의 콘텐츠를 VM에 직접 추가할 수 있습니다. 다음 절차에서는 Apache를 설치하고 기본 웹페이지를 만드는 시작 스크립트로 VM을 만드는 방법을 보여줍니다.
콘솔
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 버킷에서 시작 스크립트를 추가하려면 먼저 다음을 수행합니다.
보안에 미치는 영향
제한사항
콘솔
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-12-22(UTC)
-