カスタム ターゲット タイプを定義して使用する

このクイックスタートでは、Cloud Deploy を使用してカスタム ターゲット タイプを作成し、そのタイプをカスタム ターゲットにデプロイする方法について説明します。

このクイックスタートでは、以下の内容を行います。

  1. Skaffold 構成を作成します。

    Skaffold 構成ファイルでは、ターゲットの動作を構成します。この構成では、コンテナ イメージと、それらのイメージで実行するシェルコマンドが参照されます。これらのコマンドは、レンダリングとデプロイ オペレーションのためのアクションです。

  2. カスタム ターゲット タイプと、そのタイプを参照するターゲットを定義します。

  3. Cloud Deploy デリバリー パイプラインを定義します。

    このパイプラインには 1 つのステージのみが含まれ、1 つのターゲットのみが使用されます。この段階で、構成したターゲットを参照します。

  4. リリースを作成します。これにより、自動的にロールアウトが作成され、カスタム レンダリングとデプロイのオペレーションが実行されます。

    このリリースとロールアウトの一環として、Skaffold 構成で定義されたレンダリングとデプロイのオペレーションが両方とも実行されます。

  5. カスタム オペレーションの結果を表示します。これには、Cloud Storage にアップロードされたレンダリング済みの構成ファイル、そのファイルに書き込まれた文字列、オペレーションのステータスを含む結果ファイルが含まれます。

準備

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Google Cloud CLI がすでにインストールされている場合は、最新バージョンを実行していることを確認してください。

    gcloud components update
    
  13. デフォルトの Compute Engine サービス アカウントに十分な権限があることを確認します。

    このサービス アカウントにはすでに必要な権限が付与されている場合があります。これらの手順は、デフォルトのサービス アカウントの自動的なロール付与を無効にするプロジェクトに含まれています。

    1. 最初に、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"
      
    2. 特定のランタイム向けのデベロッパー ロールを追加します。
    3. 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
      

Skaffold 構成とアプリケーション マニフェストを準備する

Cloud Deploy では、Skaffold を使用して、デプロイする対象と、それをターゲットにデプロイする方法の詳細を提供します。

このクイックスタートでは、skaffold.yaml ファイルを作成します。このファイルは、カスタム ターゲット タイプのレンダリングとデプロイのオペレーションを表すカスタム アクションを定義します。

このクイックスタートで提供されるカスタム アクションでは、実際にはアプリケーションがランタイムにデプロイされません。このレンダリングとデプロイのアクションでは両方とも、Cloud Storage に結果ファイルをアップロードし、Cloud Deploy とユーザー定義のレンダリングとデプロイとの間のカスタム ターゲット契約を履行します。

  1. ターミナル ウィンドウを開きます。

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

    mkdir custom-target-quickstart
    cd custom-target-quickstart
    
  3. 次の内容のファイルを 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 つのファイルを作成します。

  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
    
  2. パイプラインとターゲットを Cloud Deploy サービスに登録します。

    gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
    

    これで、1 つのデリバリー パイプラインと 1つのターゲットが作成されました。このターゲットはこのカスタム ターゲット タイプを使用し、このパイプラインではアプリケーションがランタイムにデプロイされません。

  3. 次のとおりに、パイプラインとターゲットを確認します。

    Google Cloud コンソールで、Cloud Deploy の [デリバリー パイプライン] ページに移動し、使用可能なデリバリー パイプラインのリストを表示します。

    [デリバリー パイプライン] ページを開く

    作成したデリバリー パイプラインが表示され、[ターゲット] 列に 1 つのターゲットが表示されます。

    パイプラインが表示された Google Cloud コンソールのデリバリー パイプライン ページ

リリースを作成する

リリースは 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 にアップロードするコマンドであるため、ターゲット ランタイムには何もデプロイされません。

ただし、次のように、ファイルとそのファイル内の文字列は表示できます。

  1. Google Cloud コンソールで、Cloud Deploy の [デリバリー パイプライン] ページに移動し、デリバリー パイプライン(custom-targets-pipeline)を表示します。

    [デリバリー パイプライン] ページを開く

  2. デリバリー パイプラインの名前(custom-targets-pipeline)をクリックします。

    可視化されたパイプラインでは、アプリのデプロイ ステータスが表示されます。パイプラインには 1 つのステージしかないため、可視化されたパイプラインにはノードが 1 つだけ表示されます。

    成功を示すデリバリー パイプラインのビジュアリゼーション

    リリースが [デリバリー パイプラインの詳細] の下の [リリース] タブに表示されます。

  3. リリース名をクリックします。

    [リリースの詳細] ページが表示されます。

  4. [アーティファクト] タブをクリックします。

  5. [ターゲットのアーティファクト] で、[アーティファクトを表示] リンクをクリックします。

    レンダリングされたマニフェスト ファイルが表示されます。この場合、このファイルは skaffold.yaml 構成ファイルで定義したカスタム レンダリング アクションの出力であり、「サンプルのレンダリングされたマニフェストのコンテンツ 」が含まれています。

    カスタム レンダリング アクションの出力

  6. このリリースによって作成された Cloud Storage バケットを確認します。

    Cloud Storage ブラウザページを開く

    [バケット] ページが表示され、このリリース用に作成された 2 つのバケットが表示されます。1 つのバケットには、デリバリー パイプラインの構成ファイルとレンダリングされた skaffold.yaml が含まれています。もう 1 つは、カスタム アクションを作成するように構成された出力ファイルです。

  7. 名前が us-central1.deploy-artifacts... で始まるバケットをクリックします

    Cloud Storage バケットのリスト

  8. 名前が custom-targets-pipeline- で始まるフォルダをクリックし、test-release-001 フォルダをクリックします。

  9. ロールアウト名になっているフォルダをクリックします(test-release-001-to-sample-env-0001)。

  10. 表示されたフォルダ(UUID)をクリックして custom-output フォルダをクリックします。

  11. results.json をクリックし、[認証済み URL] フィールドのハイパーリンク付き URL をクリックします。

    このファイルでは、custom-deploy アクションの出力として構成した文字列が skaffold.yaml に含まれています。

    カスタム アクションのデプロイからの出力

クリーンアップ

このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の手順を実施します。

  1. 次のように、デリバリー パイプライン、ターゲット、リリース、ロールアウトを削除します。

    gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
    
  2. Cloud Deploy によって作成された Cloud Storage バケットを両方とも削除します。

    Cloud Storage ブラウザページを開く

これでクイックスタートの演習はすべて終了です。

次のステップ