Compute Engine에서 자바 시작하기

이 가이드에서는 Compute Engine을 시작하는 방법을 보여줍니다. Hello World 자바 웹 애플리케이션을 Compute Engine에 배포하여 이 가이드를 따르세요. App Engine을 시작하는 데 도움이 필요하면 App Engine 표준 환경을 참조하세요.

목표

  • Cloud Shell을 사용하여 Hello World 샘플 앱을 다운로드하고 배포합니다.
  • Hello World 샘플 앱을 단일 Compute Engine 인스턴스에 배포합니다.

비용

이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. Compute Engine API 사용 설정

    API 사용 설정

  5. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  6. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  7. Compute Engine API 사용 설정

    API 사용 설정

  8. Google Cloud Console의 Cloud Shell에서 앱을 엽니다.

    Cloud Shell로 이동

    Cloud Shell을 사용하면 브라우저에서 직접 명령줄을 통해 클라우드 리소스에 액세스할 수 있습니다. 브라우저에서 Cloud Shell을 열고 계속을 클릭하여 샘플 코드를 다운로드하고 앱 디렉터리로 변경합니다.

  9. 새 Google Cloud 프로젝트를 사용하도록 Cloud Shell에서 gcloud CLI를 구성합니다.
    # Configure gcloud for your project
    gcloud config set project YOUR_PROJECT_ID
    

Cloud Shell에서 앱 실행

  1. Cloud Shell에서 로컬 웹 서버를 시작합니다.

    mvn -Plocal clean jetty:run-exploded -DprojectID=YOUR-PROJECT-ID
    
  2. Cloud Shell에서 웹 미리보기 를 클릭하고 포트 8080에서 미리보기를 선택합니다. 그러면 실행 중인 앱이 표시된 새 창이 열립니다.

    웹 브라우저에 로컬 컴퓨터에서 제공되는 일부 Hello World 텍스트가 표시됩니다.

  3. 계속 진행할 수 있으면 Cloud Shell에서 Control+C를 눌러 로컬 웹 서버를 중지합니다.

단일 인스턴스에 배포

이 섹션에서는 Compute Engine에서 앱의 단일 인스턴스 실행을 단계별로 알아봅니다.

단일 인스턴스 배포

Cloud Shell에서 앱을 실행하는 단일 Compute Engine 인스턴스 가상 머신(VM)에 배포할 수 있습니다.

시작 스크립트를 사용하여 인스턴스 초기화

인스턴스에서 코드를 다운로드하고 실행하도록 지시할 방법이 필요합니다. 인스턴스를 시작하거나 재시작할 때마다 실행되는 시작 스크립트를 인스턴스에 포함하면 됩니다.

시작 스크립트는 인스턴스가 처음 부팅될 때 실행됩니다.

set -e
set -v

# Talk to the metadata server to get the project id
PROJECTID=$(curl -s "http://metadata.google.internal/computeMetadata/v1/project/project-id" -H "Metadata-Flavor: Google")

echo "Project ID: ${PROJECTID}"

# Install dependencies from apt
apt-get install -yq openjdk-11-jdk git maven

mvn --version

# Jetty Setup
mkdir -p /opt/jetty/temp
mkdir -p /var/log/jetty

# Get Jetty
curl -L https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/9.4.13.v20181111/jetty-distribution-9.4.13.v20181111.tar.gz -o jetty9.tgz
tar xf jetty9.tgz  --strip-components=1 -C /opt/jetty

# Add a Jetty User
useradd --user-group --shell /bin/false --home-dir /opt/jetty/temp jetty

cd /opt/jetty
# Add running as "jetty"
java -jar /opt/jetty/start.jar --add-to-startd=setuid
cd /

# Clone the source repository.
git clone https://github.com/GoogleCloudPlatform/getting-started-java
cd getting-started-java/gce

# Build the .war file and rename.
# very important - by renaming the war to root.war, it will run as the root servlet.
mvn clean package -q
mv target/getting-started-gce-1.0-SNAPSHOT.war /opt/jetty/webapps/root.war

# Make sure "jetty" owns everything.
chown --recursive jetty /opt/jetty

# Configure the default paths for the Jetty service
cp /opt/jetty/bin/jetty.sh /etc/init.d/jetty
echo "JETTY_HOME=/opt/jetty" > /etc/default/jetty
{
  echo "JETTY_BASE=/opt/jetty"
  echo "TMPDIR=/opt/jetty/temp"
  echo "JAVA_OPTIONS=-Djetty.http.port=80"
  echo "JETTY_LOGS=/var/log/jetty"
} >> /etc/default/jetty

# Reload daemon to pick up new service
systemctl daemon-reload

# Install logging monitor. The monitor will automatically pickup logs sent to syslog.
curl -sSO https://dl.google.com/cloudagents/add-logging-agent-repo.sh
sudo bash add-logging-agent-repo.sh --also-install

service google-fluentd restart &

service jetty start
service jetty check

echo "Startup Complete"

시작 스크립트는 다음과 같은 작업을 수행합니다.

  • 자바 11을 설치하고 기본 버전으로 지정합니다.

  • Jetty를 설치하고 구성합니다.

  • 자바 WAR 파일을 Cloud Storage 버킷에서 Jetty의 webapps으로 복사하고 이름을 root.war로 바꿉니다. 그러면 루트 서블릿으로 지정되므로, URL에서 이름을 지정할 필요가 없습니다.

  • Cloud Logging 에이전트를 설치하고 앱 로그를 모니터링하도록 구성합니다. 즉, 이 가이드의 이전 단계에서 구성된 로깅이 App Engine 가변형 환경을 사용할 때와 마찬가지로 업로드됩니다.

Compute Engine 인스턴스 만들기 및 구성

  1. Compute Engine 인스턴스를 만듭니다.

    gcloud compute instances create my-app-instance 
    --image-family=debian-10
    --image-project=debian-cloud
    --machine-type=g1-small
    --scopes userinfo-email,cloud-platform
    --metadata-from-file startup-script=gce/startup-script.sh
    --zone YOUR_ZONE
    --tags http-server
    YOUR_ZONE을 개발 영역으로 바꿉니다(예: us-central1-a). 리전 및 영역에 대한 자세한 내용은 위치 및 리전을 참조하세요.

    그러면 새 인스턴스가 생성되고, 인스턴스가 Google Cloud 서비스에 액세스하도록 허용되고, 시작 스크립트가 실행됩니다. 인스턴스 이름은 my-app-instance입니다.

  2. 인스턴스 생성의 진행 상황을 확인합니다.

    gcloud compute instances get-serial-port-output my-app-instance --zone YOUR_ZONE
    

    시작 스크립트가 완료되면 다음 메시지가 표시됩니다.

    startup-script: INFO Finished running startup scripts.
    
  3. 인스턴스에 대한 트래픽을 허용하도록 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create default-allow-http-80 \
        --allow tcp:80 \
        --source-ranges 0.0.0.0/0 \
        --target-tags http-server \
        --description "Allow port 80 access to http-server"
    

  4. 인스턴스의 외부 IP 주소를 가져옵니다.

    gcloud compute instances list
    
  5. 앱 실행을 확인하려면 브라우저에 다음 URL을 입력합니다.

    http://YOUR_INSTANCE_IP
    

    YOUR_INSTANCE_IP를 인스턴스의 외부 IP 주소로 바꿉니다.

인스턴스 관리 및 모니터링

Cloud Console을 사용하여 인스턴스를 모니터링하고 관리할 수 있습니다.

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스로 이동

  2. 가상 머신 인스턴스 목록에서 연결할 인스턴스 행의 SSH를 클릭합니다.
  3. Compute Engine 리소스에서 생성한 모든 로그를 보려면 로그 뷰어 페이지로 이동합니다. 로그 탐색기로 이동

    Cloud Logging이 자동으로 구성되어 syslog를 포함한 다양한 공통 서비스의 로그를 수집합니다.

정리

이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

프로젝트 삭제

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

개별 리소스 삭제

gcloud compute instances delete my-app-instance --zone=YOUR_ZONE --delete-disks=all
gcloud compute firewall-rules delete default-allow-http-80

다음 단계