arrow_back

Buildpack を使用してコンテナ化アプリケーションを作成する

ログイン 参加
700 以上のラボとコースにアクセス

Buildpack を使用してコンテナ化アプリケーションを作成する

ラボ 1時間 universal_currency_alt クレジット: 5 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
700 以上のラボとコースにアクセス

概要

Buildpacks は、コンテナ イメージをビルドするもう一つのアプローチで、ソースコードをコンテナ イメージに変換する代替手法を提供します。Buildpacks はビルダーと呼ばれるイメージに含まれる形で提供され、その中で実行されます。各ビルダーには 1 つ以上の Buildpacks を含めることができます。ビルダーは、ソースコードをコンテナ イメージに変換する役割を持つイメージです。Buildpacks は、Cloud Run にデプロイしたりローカルで Docker を使って実行したりできるコンテナ イメージを実際にビルドしてパッケージ化します。

独自の Buildpacks を作成することも、複数のベンダーが提供する Buildpacks を使用することもできます。Google Cloud の Buildpacks を使用すると、Docker をローカルにインストールしたり Dockerfile を作成したりすることなく、コンテナ化アプリケーションを作成、デプロイできます。Buildpacks は Cloud Run にも組み込まれており、ソースベースのデプロイ ワークフローを実現します。

目標

このラボの内容:

  • pack を使用してアプリケーションをビルドする。pack は、ビルダーと併用してソースコードからコンテナ イメージを作成するコマンドライン ツールです。
  • Google Cloud の Buildpacks ビルダーを使用して、コンテナ イメージをビルドする。
  • Docker を使用してコンテナをローカルで実行し、テストします。
  • コンテナをビルドして Cloud Run に再デプロイする。

設定

各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。

  1. Qwiklabs にシークレット ウィンドウでログインします。

  2. ラボのアクセス時間(例: 1:15:00)に注意し、時間内に完了できるようにしてください。
    一時停止機能はありません。必要な場合はやり直せますが、最初からになります。

  3. 準備ができたら、[ラボを開始] をクリックします。

  4. ラボの認証情報(ユーザー名パスワード)をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。

  5. [Google Console を開く] をクリックします。

  6. [別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
    他の認証情報を使用すると、エラーが発生したり、料金の請求が発生したりします。

  7. 利用規約に同意し、再設定用のリソースページをスキップします。

Google Cloud Shell の有効化

Google Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。

Google Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールで、右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

    ハイライト表示された Cloud Shell アイコン

  2. [続行] をクリックします。

環境がプロビジョニングされ、接続されるまでしばらく待ちます。接続した時点で認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されます。次に例を示します。

Cloud Shell ターミナルでハイライト表示されたプロジェクト ID

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  • 次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list

出力:

Credentialed accounts: - @.com (active)

出力例:

Credentialed accounts: - google1623327_student@qwiklabs.net
  • 次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project =

出力例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注: gcloud ドキュメントの全文については、 gcloud CLI の概要ガイド をご覧ください。

タスク 1. 環境とプロジェクトを構成する

このタスクでは、環境変数を設定し、Cloud Shell 環境を構成します。

Cloud Shell 環境を構成する

  1. Cloud Shell で次のコマンドを実行して、プロジェクト ID とリージョンの環境変数を設定します。

    PROJECT_ID=$(gcloud config get-value project) REGION={{{project_0.default_region|us-central1}}}
  2. Cloud Shell でコンピューティング リージョンを設定します。

    gcloud config set compute/region $REGION

Google API を有効にする

  • Cloud Run と、このラボの後半で使用する Google Translate API を使用するには、プロジェクトの関連 API を有効にします。

    gcloud services enable artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Google API を有効にする

タスク 2. Docker を使用してアプリケーションをビルド、実行する

このタスクでは、pack コマンドライン ツールと Google Cloud の Buildpacks ビルダーを使用して、サンプル アプリケーションをビルドします。

アプリケーションを開発する

  1. app ディレクトリを作成し、そのディレクトリに移動します。

    mkdir app && cd app
  2. このラボのサンプル python アプリケーションを Cloud Storage からコピーし、アーカイブ ファイルからコンテンツを抽出します。

    gcloud storage cp gs://cloud-training/CBL513/sample-apps/sample-py-app.zip . && unzip sample-py-app
  3. サンプル アプリケーションのファイルとソースコードを表示します。

    ls sample-py-app cat sample-py-app/main.py Python Buildpacks は、アプリケーションのデフォルトのコンテナ エントリ ポイントを生成しないため、Procfile を使用してアプリケーションの起動コマンドを構成します。

    このアプリケーションは Python で記述されており、アプリケーションに対するリクエストに応じて、サンプル ウェルカム メッセージを返します。

コンテナをビルドする

  1. サンプル アプリケーションのディレクトリに移動します。

    cd sample-py-app
  2. pack を実行して、コンテナをビルドします。

    pack build --builder=gcr.io/buildpacks/builder sample-py-app

    出力の一部は次のようになります。

    ... ... [exporter] Setting default process type 'web' [exporter] Saving sample-py-app... [exporter] *** Images (9f9f9a48fd46): [exporter] sample-py-app [exporter] Adding cache layer 'google.python.pip:pip' [exporter] Adding cache layer 'google.python.pip:pipcache' Successfully built image sample-py-app 注: pack を使用する場合、コンテナ イメージをビルドするために Dockerfile を記述して提供する必要はありません。
  3. 次のコマンドを実行して、Cloud Shell ホストにダウンロードしてビルドしたイメージを表示します。

    docker images REPOSITORY TAG IMAGE ID CREATED SIZE gcr.io/buildpacks/builder latest 514fb6f1bbfe 29 hours ago 804MB gcr.io/buildpacks/gcp/run v1 22db1b5e48e3 29 hours ago 177MB buildpacksio/lifecycle 0.16.0 67e021546a3f 43 years ago 30.5MB sample-py-app latest 9f9f9a48fd46 43 years ago 571MB
  4. 次のコマンドを使用してコンテナをローカルの Docker で実行し、アプリケーションに PORT 環境変数を渡すとともに、ホストのポート 8080 をコンテナポートにバインドします。

    docker run -it -e PORT=8080 -p 8080:8080 -d sample-py-app アプリケーション コードは、環境変数で指定されたポート(この場合はポート 8080)をリッスンします。
  5. curl コマンドを使用して、コンテナ化アプリケーションをテストします。

    curl http://localhost:8080/

    次のメッセージがレスポンスとして表示されます。

    Welcome to this sample app, built with Buildpacks.

タスク 3. アプリケーションをビルドし、Cloud Run で実行する

開発とデプロイのライフサイクルの次のステップとして、通常は、前のタスクでビルドしたコンテナ イメージを Artifact Registry に push し、そのイメージを Google Kubernetes Engine や Cloud Run などのコンテナベースの環境にデプロイします。

このタスクでは、サンプル アプリケーション コードを変更し、コンテナ化アプリケーションをビルドしてソースから直接 Cloud Run にデプロイします。

アプリケーション コードを変更する

サンプル アプリケーション コードを変更し、Google Translate API を使用して英語のテキストをスペイン語に翻訳します。

  1. main.py ファイルを、vinano などの任意のエディタで編集します。Cloud Shell メニューから [エディタを開く] をクリックしてファイルを編集することもできます。

  2. main.py ファイルの内容全体を以下のコードに置き換えます。

    from flask import Flask, request import google.auth from google.cloud import translate app = Flask(__name__) _, PROJECT_ID = google.auth.default() TRANSLATE = translate.TranslationServiceClient() PARENT = 'projects/{}'.format(PROJECT_ID) SOURCE, TARGET = ('en', 'English'), ('es', 'Spanish') @app.route('/', methods=['GET', 'POST']) def index(): # reset all variables text = translated = None if request.method == 'POST': text = request.get_json().get('text').strip() if text: data = { 'contents': [text], 'parent': PARENT, 'target_language_code': TARGET[0], } # handle older call for backwards-compatibility try: rsp = TRANSLATE.translate_text(request=data) except TypeError: rsp = TRANSLATE.translate_text(**data) translated = rsp.translations[0].translated_text # create context context = { 'trtext': translated } return context if __name__ == "__main__": # Dev only: run "python main.py" and open http://localhost:8080 import os app.run(host="localhost", port=int(os.environ.get('PORT', 8080)), debug=True) アプリケーション コードは、Google Translate API を使用して、JSON リクエストで渡された英語のテキストをスペイン語に翻訳します。

コンテナをビルドしてデプロイする

  1. 以下のコマンドを実行して、コンテナをビルドし、Cloud Run にデプロイします。

    gcloud run deploy sample-py-app --source . --region=${REGION} --allow-unauthenticated allow-unauthenticated オプションを使用すると、認証なしでサービスにアクセスできます。
  2. プロンプトが表示されたら「Y」と入力し、Artifact Registry に作成されるデフォルトのリポジトリを受け入れてコンテナ イメージを保存します。

  3. コマンドが完了すると、sample-py-app という Cloud Run サービスが作成されます。

    コマンド出力は次のようになります。

    Building using Buildpacks and deploying container to Cloud Run service [sample-py-app] in project [qwiklabs-gcp-00-0d56d42aca1a] region [asia-east1] OK Building and deploying new service... Done. OK Creating Container Repository... OK Uploading sources... OK Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/8bea2ded-4745-41f9-a82d-128e409daa20?project=34240880885]. OK Creating Revision... OK Routing traffic... OK Setting IAM Policy... Done. Service [sample-py-app] revision [sample-py-app-00001-nec] has been deployed and is serving 100 percent of traffic. Service URL: https://sample-py-app-ulvp7xw3bq-de.a.run.app

Cloud Run サービスをテストする

  1. 前の手順で作成した Cloud Run サービスの環境変数を設定します。

    SERVICE_URL=$(gcloud run services describe sample-py-app --region=${REGION} --format="value(status.url)"); echo $SERVICE_URL
  2. curl コマンドを実行して、このサービスをテストします。

    curl $SERVICE_URL -H 'Content-Type: application/json' -d '{"text" : "Welcome to this sample app, built with Google Cloud buildpacks."}'

    サービスにより翻訳されたテキストが返されます。

    {"trtext":"Bienvenido a esta aplicaci\u00f3n de muestra, creada con paquetes de compilaci\u00f3n de Google Cloud."}

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Cloud Run にアプリケーションをデプロイする

お疲れさまでした

このラボでは、pack コマンドを使ってアプリケーションをビルドし、Google Cloud の Buildpacks ビルダーでサンプル Python アプリケーションのコンテナ イメージを作成しました。まず、コンテナをローカルの Docker で実行、テストしてから、コンテナを再度ビルドして Cloud Run にデプロイしました。

次のステップと詳細情報

詳細については、以下のドキュメントをご覧ください。

GKE、Anthos、Container-Optimized OS など、さまざまなコンテナ プラットフォーム向けの Google Cloud の Buildpacks についての詳細は、以下の GitHub リポジトリをご覧ください。

Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。