既存の Terraform をインポートする

Application Design Center を使用すると、既存のマルチプロダクトGoogle Cloud Terraform 構成を、コードを個別のコンポーネント モジュールに再構築したり、最初にカタログに公開したりすることなく、そのままアプリケーション テンプレートにインポートできます。

カタログ コンポーネントとしてインポートし、デザイン キャンバスで接続する単一プロダクトの Terraform モジュールとは異なり、マルチプロダクトの Terraform 構成は、複数の Google Cloud プロダクトにリソースをプロビジョニングするルート モジュールです。単一プロダクト モジュールをコンポーネントとしてインポートするには、コンポーネントをインポートするをご覧ください。

既存の Terraform 構成を App Design Center にインポートすると、次のことができます。

  • 既存の Terraform 構成を App Design Center のアプリケーション ライフサイクル管理に移行し、デプロイされたリソースを App Hub に自動的に登録します。
  • 不変のアプリケーション テンプレート リビジョンを作成して、Terraform 構成をバージョニングします。
  • Infrastructure Manager を使用してアプリケーションをプレビューしてデプロイするか、Terraform ファイルを Cloud Storage にエクスポートします。

テンプレート リビジョンを作成したら、次のいずれかの方法で使用できます。

  • 直接デプロイする: リビジョンからアプリケーションを作成し、プレビューして評価レポートを取得してデプロイします。テンプレートをカタログに公開したり、共有したり、共有済みテンプレートを最初に見つけたりする必要はありません。
  • カタログを介して再利用する: リビジョンをカタログに公開し、コンポーネントとして複合アプリケーション テンプレートに追加して、複合テンプレートの Terraform をエクスポートします。詳細については、アプリケーション テンプレートをカタログに公開するをご覧ください。

始める前に

このドキュメントのタスクを実行するには、次の表に示すように、アプリ対応フォルダまたは管理プロジェクトに必要なロールを付与するよう管理者に依頼してください。

タスク 必要なロール
アプリケーション テンプレートとテンプレート リビジョンの作成、インポート、スナップショット、エクスポート App Design Center 管理者(roles/designcenter.admin)、または
App Design Center ユーザー(roles/designcenter.user)
アプリケーションを作成、デプロイ、エクスポートする アプリケーション管理者(roles/designcenter.applicationAdmin)、または
アプリケーション編集者(roles/designcenter.applicationEditor)

ロールの詳細については、Identity and Access Management を使用したアクセス制御をご覧ください。

Terraform ルート モジュール(.tf ファイルと、.json ファイルなどのサポート ファイル)を次のいずれかのソースに保存します。

  • Cloud Storage バケット。
  • Developer Connect リポジトリ。
  • 公開 Git リポジトリ。
  • ファイルを含むローカル YAML ファイルまたは JSON ファイル。

Terraform をアプリケーション テンプレートにインポートする

Google Cloud CLI を使用して次の手順を完了し、アプリケーション テンプレートを作成して、既存の Terraform 構成をインポートし、不変のテンプレート リビジョンを作成します。

  1. スペースにアプリケーション テンプレートを作成します。

    gcloud design-center spaces application-templates create APPLICATION_TEMPLATE \
        --project=PROJECT \
        --location=LOCATION \
        --space=SPACE \
        --display-name=DISPLAY_NAME
    

    次のように置き換えます。

    • APPLICATION_TEMPLATE: 作成するアプリケーション テンプレートの ID。
    • PROJECT: 実際の管理プロジェクト ID。
    • LOCATION: 地域 ID。
    • SPACE: スペース ID。
    • DISPLAY_NAME: アプリケーション テンプレートの表示名。

    詳細については、gcloud design-center spaces application-templates create をご覧ください。

  2. 次のいずれかのソースから Terraform 構成をアプリケーション テンプレートにインポートします。

    • Cloud Storage バケットからインポートするには、次のコマンドを実行します。

      gcloud design-center spaces application-templates ingest-iac APPLICATION_TEMPLATE \
          --project=PROJECT \
          --location=LOCATION \
          --space=SPACE \
          --gcs-uri=GCS_URI \
          --raw-terraform-import-enabled
      
    • Developer Connect リポジトリからインポートするには、次のコマンドを実行します。

      gcloud design-center spaces application-templates ingest-iac APPLICATION_TEMPLATE \
          --project=PROJECT \
          --location=LOCATION \
          --space=SPACE \
          --developer-connect-repo-uri=DEVELOPER_CONNECT_REPO_URI \
          --developer-connect-branch=DEVELOPER_CONNECT_BRANCH \
          --developer-connect-dir=DEVELOPER_CONNECT_DIR \
          --raw-terraform-import-enabled
      
    • 公開 Git リポジトリからインポートするには、次のコマンドを実行します。

      gcloud design-center spaces application-templates ingest-iac APPLICATION_TEMPLATE \
          --project=PROJECT \
          --location=LOCATION \
          --space=SPACE \
          --git-source-repo=GIT_SOURCE_REPO \
          --git-source-ref-tag=GIT_SOURCE_REF_TAG \
          --git-source-dir=GIT_SOURCE_DIR \
          --raw-terraform-import-enabled
      
    • IaCModule ペイロードを含むローカル YAML ファイルまたは JSON ファイルからインポートするには、次のコマンドを実行します。

      gcloud design-center spaces application-templates ingest-iac APPLICATION_TEMPLATE \
          --project=PROJECT \
          --location=LOCATION \
          --space=SPACE \
          --iac-module-from-file=IAC_MODULE_FILE \
          --raw-terraform-import-enabled
      

    次のように置き換えます。

    • APPLICATION_TEMPLATE: アプリケーション テンプレート ID。
    • PROJECT: 実際の管理プロジェクト ID。
    • LOCATION: 地域 ID。
    • SPACE: スペース ID。
    • GCS_URI: Terraform ファイルを含む Cloud Storage URI(gs://BUCKET_NAME/FOLDER_PATH 形式)。
    • DEVELOPER_CONNECT_REPO_URI: Developer Connect リポジトリ リンクの URI(projects/PROJECT/locations/LOCATION/connections/CONNECTION/gitRepositoryLinks/REPO_LINK 形式)。
    • DEVELOPER_CONNECT_BRANCH: Developer Connect リポジトリのブランチ名。または、--developer-connect-ref-tag または --developer-connect-commit-sha を指定します。
    • DEVELOPER_CONNECT_DIR: Developer Connect リポジトリのディレクトリ パス。
    • GIT_SOURCE_REPO: 公開 Git リポジトリの HTTPS URL。
    • GIT_SOURCE_REF_TAG: 公開 Git リポジトリの Git リファレンスまたはタグ。
    • GIT_SOURCE_DIR: 公開 Git リポジトリのディレクトリ パス。
    • IAC_MODULE_FILE: Terraform ファイルを含むローカル YAML ファイルまたは JSON ファイルのパス。
  3. アプリケーション テンプレートのスナップショットを作成して、アプリケーションの作成とデプロイに使用できる不変のアプリケーション テンプレート リビジョンを生成します。

    gcloud design-center spaces application-templates snapshot APPLICATION_TEMPLATE \
        --project=PROJECT \
        --location=LOCATION \
        --space=SPACE
    

    次のように置き換えます。

    • APPLICATION_TEMPLATE: アプリケーション テンプレート ID。
    • PROJECT: 実際の管理プロジェクト ID。
    • LOCATION: 地域 ID。
    • SPACE: スペース ID。

    出力には、作成されたアプリケーション テンプレート リビジョンの URI が projects/PROJECT/locations/LOCATION/spaces/SPACE/applicationTemplates/APPLICATION_TEMPLATE/revisions/REVISION の形式で含まれます。

テンプレートからアプリケーションを作成してデプロイする

インポートした Terraform テンプレートのスナップショット リビジョンを作成したら、アプリケーション ドラフトを作成し、入力変数の値を指定して、アプリケーションをデプロイできます。

  1. アプリケーション テンプレートのリビジョンからアプリケーションのドラフトを作成します。

    gcloud design-center spaces applications create APPLICATION \
        --project=PROJECT \
        --location=LOCATION \
        --space=SPACE \
        --source-application-template-revision=SOURCE_APPLICATION_TEMPLATE_REVISION \
        --deployment-project=DEPLOYMENT_PROJECT \
        --deployment-region=DEPLOYMENT_REGION \
        --app-parameters=APP_PARAMETERS \
        --scope-type=SCOPE_TYPE
    

    次のように置き換えます。

    • APPLICATION: 作成するアプリケーションの ID。
    • PROJECT: 実際の管理プロジェクト ID。
    • LOCATION: 地域 ID。
    • SPACE: スペース ID。
    • SOURCE_APPLICATION_TEMPLATE_REVISION: snapshot コマンドによって返されたアプリケーション テンプレート リビジョンの URI。
    • DEPLOYMENT_PROJECT: Terraform リソースがデプロイされるターゲット プロジェクト ID。
    • DEPLOYMENT_REGION: Terraform リソースがデプロイされるターゲット リージョン。
    • APP_PARAMETERS: 省略可。Terraform ルート モジュールの入力変数の Key-Value ペア(key=KEY,value=VALUE など)、またはアプリケーション パラメータを含む YAML ファイルまたは JSON ファイルのパス。
    • SCOPE_TYPE: アプリケーションのスコープ(regional または global)。

    アプリケーションの管理の詳細については、アプリケーションを管理するをご覧ください。

  2. アプリケーションをプレビューしてデプロイします。詳細な手順については、アプリケーションをデプロイするをご覧ください。

Terraform コードを Cloud Storage にエクスポートする

Terraform ファイルは、アプリケーション テンプレート、アプリケーション テンプレートのリビジョン、またはアプリケーションから Cloud Storage バケットにエクスポートできます。独自の CI/CD ツールで Terraform を実行する場合や、バージョン管理にコピーを保持する場合は、エクスポートします。

  • アプリケーション テンプレートの下書きから Terraform ファイルをエクスポートするには、次のコマンドを実行します。

    gcloud design-center spaces application-templates export APPLICATION_TEMPLATE \
        --project=PROJECT \
        --location=LOCATION \
        --space=SPACE \
        --artifact-location-gcs-uri=ARTIFACT_LOCATION_GCS_URI
    
  • アプリケーション テンプレート リビジョンから Terraform ファイルをエクスポートするには、次のコマンドを実行します。

    gcloud design-center spaces application-templates revisions export REVISION \
        --application-template=APPLICATION_TEMPLATE \
        --project=PROJECT \
        --location=LOCATION \
        --space=SPACE \
        --artifact-location-gcs-uri=ARTIFACT_LOCATION_GCS_URI
    
  • アプリケーションから Terraform ファイルをエクスポートするには(構成済みのアプリケーション パラメータが入力された zz_adc_inputs.auto.tfvars.json を含む)、次のコマンドを実行します。

    gcloud design-center spaces applications export APPLICATION \
        --project=PROJECT \
        --location=LOCATION \
        --space=SPACE \
        --artifact-location-gcs-uri=ARTIFACT_LOCATION_GCS_URI
    

次のように置き換えます。

  • APPLICATION_TEMPLATE: アプリケーション テンプレート ID。
  • REVISION: アプリケーション テンプレートのリビジョン ID。
  • APPLICATION: アプリケーション ID。
  • PROJECT: 実際の管理プロジェクト ID。
  • LOCATION: 地域 ID。
  • SPACE: スペース ID。
  • ARTIFACT_LOCATION_GCS_URI: 宛先の Cloud Storage URI(gs://BUCKET_NAME/EXPORT_FOLDER 形式)。

次のステップ