カスタム ターゲット タイプを定義して使用する
このクイックスタートでは、Cloud Deploy を使用してカスタム ターゲット タイプを作成し、そのタイプをカスタム ターゲットにデプロイする方法について説明します。
このクイックスタートでは、以下の内容を行います。
Skaffold 構成を作成します。
Skaffold 構成ファイルでは、ターゲットの動作を構成します。この構成では、コンテナ イメージと、それらのイメージで実行するシェルコマンドが参照されます。これらのコマンドは、レンダリングとデプロイ オペレーションのためのアクションです。
カスタム ターゲット タイプと、そのタイプを参照するターゲットを定義します。
Cloud Deploy デリバリー パイプラインを定義します。
このパイプラインには 1 つのステージのみが含まれ、1 つのターゲットのみが使用されます。この段階で、構成したターゲットを参照します。
リリースを作成します。これにより、自動的にロールアウトが作成され、カスタム レンダリングとデプロイのオペレーションが実行されます。
このリリースとロールアウトの一環として、Skaffold 構成で定義されたレンダリングとデプロイのオペレーションが両方とも実行されます。
カスタム オペレーションの結果を表示します。これには、Cloud Storage にアップロードされたレンダリング済みの構成ファイル、そのファイルに書き込まれた文字列、オペレーションのステータスを含む結果ファイルが含まれます。
準備
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage API を有効にします。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage API を有効にします。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- デフォルトの Compute Engine サービス アカウントに十分な権限があることを確認します。
このサービス アカウントにはすでに必要な権限が付与されている場合があります。これらの手順は、デフォルトのサービス アカウントの自動的なロール付与を無効にするプロジェクトに含まれています。
- 最初に、
clouddeploy.jobRunner
ロールを追加します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/clouddeploy.jobRunner"
- 特定のランタイム向けのデベロッパー ロールを追加します。
-
iam.serviceAccountUser
ロールを追加します。これには、ランタイムにデプロイするactAs
権限が含まれます。gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/iam.serviceAccountUser" \ --project=PROJECT_ID
Google Cloud CLI がすでにインストールされている場合は、最新バージョンを実行していることを確認してください。
gcloud components update
Skaffold 構成とアプリケーション マニフェストを準備する
Cloud Deploy では、Skaffold を使用して、デプロイする対象と、それをターゲットにデプロイする方法の詳細を提供します。
このクイックスタートでは、skaffold.yaml
ファイルを作成します。このファイルは、カスタム ターゲット タイプのレンダリングとデプロイのオペレーションを表すカスタム アクションを定義します。
このクイックスタートで提供されるカスタム アクションでは、実際にはアプリケーションがランタイムにデプロイされません。このレンダリングとデプロイのアクションでは両方とも、Cloud Storage に結果ファイルをアップロードし、Cloud Deploy とユーザー定義のレンダリングとデプロイとの間のカスタム ターゲット契約を履行します。
ターミナル ウィンドウを開きます。
新しいディレクトリを作成し、そのディレクトリに移動します。
mkdir custom-target-quickstart cd custom-target-quickstart
次の内容のファイルを
skaffold.yaml
という名前で作成します。apiVersion: skaffold/v4beta7 kind: Config customActions: - name: custom-render containers: - name: render image: gcr.io/google.com/cloudsdktool/google-cloud-cli@sha256:66e2681aa3099b4e517e4cdcdefff8f2aa45d305007124ccdc09686f6712d018 command: ['/bin/bash'] args: - '-c' - |- echo "Sample manifest rendered content" > manifest.txt gcloud storage cp manifest.txt $CLOUD_DEPLOY_OUTPUT_GCS_PATH/manifest.txt echo {\"resultStatus\": \"SUCCEEDED\", \"manifestFile\": \"$CLOUD_DEPLOY_OUTPUT_GCS_PATH/manifest.txt\"} > results.json gcloud storage cp results.json $CLOUD_DEPLOY_OUTPUT_GCS_PATH/results.json - name: custom-deploy containers: - name: deploy image: gcr.io/google.com/cloudsdktool/google-cloud-cli@sha256:66e2681aa3099b4e517e4cdcdefff8f2aa45d305007124ccdc09686f6712d018 command: ['/bin/bash'] args: - '-c' - |- echo {\"resultStatus\": \"SUCCEEDED\"} > results.json gcloud storage cp results.json $CLOUD_DEPLOY_OUTPUT_GCS_PATH/results.json
このファイルには、カスタム レンダリング アクションとカスタム デプロイ アクションを定義する
customActions:
スタンザが含まれています。これらの各カスタム アクションでは、実行するコンテナ イメージと、そのコンテナ上で実行するコマンドが参照されます。この構成ファイルの詳細については、
skaffold.yaml
リファレンスをご覧ください。
デリバリー パイプライン、カスタム ターゲット タイプ、ターゲットを作成する
デリバリー パイプライン、カスタム ターゲット タイプ、ターゲットは、1 つのファイルまたは個別のファイルで定義できます。このクイックスタートでは、3 つすべてを含む 1 つのファイルを作成します。
custom-target-quickstart ディレクトリに、次の内容の新しい
clouddeploy.yaml
ファイルを作成します。apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: custom-targets-pipeline serialPipeline: stages: - targetId: sample-env --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: sample-env customTarget: customTargetType: basic-custom-target --- apiVersion: deploy.cloud.google.com/v1 kind: CustomTargetType metadata: name: basic-custom-target customActions: renderAction: custom-render deployAction: custom-deploy
パイプラインとターゲットを Cloud Deploy サービスに登録します。
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
これで、1 つのデリバリー パイプラインと 1つのターゲットが作成されました。このターゲットはこのカスタム ターゲット タイプを使用し、このパイプラインではアプリケーションがランタイムにデプロイされません。
次のとおりに、パイプラインとターゲットを確認します。
Google Cloud コンソールで、Cloud Deploy の [デリバリー パイプライン] ページに移動し、使用可能なデリバリー パイプラインのリストを表示します。
作成したデリバリー パイプラインが表示され、[ターゲット] 列に 1 つのターゲットが表示されます。
リリースを作成する
リリースは Cloud Deploy リソースの中心で、デプロイの変更を表します。デリバリー パイプラインは、そのリリースのライフサイクルを定義します。このライフサイクルの詳細については、Cloud Deploy のサービス アーキテクチャをご覧ください。
custom-target-quickstart
ディレクトリから次のコマンドを実行して、デプロイするカスタム アクションを表す release
リソースを作成します。
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=custom-targets-pipeline
すべてのリリース(--disable-initial-rollout
を含むものを除き)において、Cloud Deploy ではロールアウト リソースも自動的に作成されます。レンダリングとデプロイを含む、ロールアウトのすべてのフェーズが実行されます。
Google Cloud コンソールで結果を表示する
数分後、デプロイが完了します。この場合、2 つのカスタム アクションは文字列をファイルにエコーしてそのファイルを Cloud Storage にアップロードするコマンドであるため、ターゲット ランタイムには何もデプロイされません。
ただし、次のように、ファイルとそのファイル内の文字列は表示できます。
Google Cloud コンソールで、Cloud Deploy の [デリバリー パイプライン] ページに移動し、デリバリー パイプライン(
custom-targets-pipeline
)を表示します。デリバリー パイプラインの名前(
custom-targets-pipeline
)をクリックします。可視化されたパイプラインでは、アプリのデプロイ ステータスが表示されます。パイプラインには 1 つのステージしかないため、可視化されたパイプラインにはノードが 1 つだけ表示されます。
リリースが [デリバリー パイプラインの詳細] の下の [リリース] タブに表示されます。
リリース名をクリックします。
[リリースの詳細] ページが表示されます。
[アーティファクト] タブをクリックします。
[ターゲットのアーティファクト] で、[アーティファクトを表示] リンクをクリックします。
レンダリングされたマニフェスト ファイルが表示されます。この場合、このファイルは
skaffold.yaml
構成ファイルで定義したカスタム レンダリング アクションの出力であり、「サンプルのレンダリングされたマニフェストのコンテンツ 」が含まれています。このリリースによって作成された Cloud Storage バケットを確認します。
[バケット] ページが表示され、このリリース用に作成された 2 つのバケットが表示されます。1 つのバケットには、デリバリー パイプラインの構成ファイルとレンダリングされた
skaffold.yaml
が含まれています。もう 1 つは、カスタム アクションを作成するように構成された出力ファイルです。名前が
us-central1.deploy-artifacts
... で始まるバケットをクリックします名前が
custom-targets-pipeline-
で始まるフォルダをクリックし、test-release-001
フォルダをクリックします。ロールアウト名になっているフォルダをクリックします(
test-release-001-to-sample-env-0001
)。表示されたフォルダ(UUID)をクリックして
custom-output
フォルダをクリックします。results.json
をクリックし、[認証済み URL] フィールドのハイパーリンク付き URL をクリックします。このファイルでは、
custom-deploy
アクションの出力として構成した文字列がskaffold.yaml
に含まれています。
クリーンアップ
このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の手順を実施します。
次のように、デリバリー パイプライン、ターゲット、リリース、ロールアウトを削除します。
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
Cloud Deploy によって作成された Cloud Storage バケットを両方とも削除します。
これでクイックスタートの演習はすべて終了です。
次のステップ
利用可能なカスタム ターゲット タイプのサンプルをご覧ください。
Cloud Deploy のチュートリアルをお試しください。