Terraform を使用した Google Cloud での SAP デプロイの自動化

Terraform を使用すると、Google Cloud インフラストラクチャのデプロイを自動化できます。Terraform は、Google Cloud リソースの作成と管理を自動化するオープンソース ツールです。Terraform については、Google Cloud での Terraform をご覧ください。

SAP HANA などの一部の SAP ソリューションやサポートされているデータベースの場合、Google Cloud では事前定義の Terraform 構成ファイルを使用できます。これらを使用して、SAP サポート要件を満たし、ベスト プラクティスを実現できる Google Cloud インフラストラクチャをデプロイできます。

サポートされている SAP ソリューション

Google Cloud は、次の SAP ソリューション用に Terraform 構成ファイルを提供しています。

構成ファイルのデプロイ対象

SAP デプロイ用に Google Cloud から提供される Terraform 構成ファイルは、次の要素の構成またはデプロイを行います。

  • 1 つ以上の Compute Engine 仮想マシン(VM)
  • 指定する OS イメージ
  • 1 つ以上の永続ディスクまたは Hyperdisk
  • 必要に応じて、VM で使用するために指定する Identity and Access Management(IAM)のサービス アカウント
  • SAP のデプロイに必要な Google Cloud APIs
  • 必要に応じて、各 VM インスタンスのネットワーク タグ
  • 必要に応じて、各 VM インスタンスのパブリック IP アドレス
  • Google Cloud の SAP 用エージェントの最新バージョン

SAP HANA の場合、Terraform 構成ファイルは次のデプロイも行います。

  • /hana/data/hana/log/hana/shared/usr/sap/hanabackup のストレージ ボリューム
  • 必要に応じて、SAP HANA システム自体
  • ホスト自動フェイルオーバーを使用する SAP HANA スケールアウト システムの場合、マスターホスト、最大 15 個のワーカーホスト、最大 3 個のスタンバイ ホスト
  • Linux 高可用性クラスタ
  • (省略可)SAP HANA スケールアップ システムの場合、プライマリ インスタンスとセカンダリ インスタンスの静的 IP アドレス
  • (省略可)SAP HANA スケールアウト システムの場合、マスターノード、ワーカーノード、スタンバイ ノードの静的 IP アドレス

SAP NetWeaver の場合、Terraform 構成ファイルは次のデプロイも行います。

  • /sapmnt/usr/sap、スワップ ボリューム用のストレージ ボリューム
  • 必要に応じて、SLES 上の Linux 高可用性クラスタ

高可用性(HA)クラスタの場合、Terraform 構成ファイルは内部ロードバランサ、インスタンス グループ、転送ルールなどの追加機能もデプロイします。詳細については、HA シナリオのデプロイガイドをご覧ください。

各 SAP デプロイ用の Terraform 構成

SAP 用に事前定義された各 Terraform 構成には、宣言型構成ファイル DEPLOYMENT_TYPE.tf が含まれています。

構成ファイル名とそのダウンロード方法については、シナリオのデプロイガイドをご覧ください。

Terraform 構成ファイルを完成させる

SAP デプロイ用に提供されている Terraform 構成ファイルは、Terraform によって定義されている標準に準拠しています。

SAP 用に提供されている構成ファイルには、プライマリ モジュール定義が含まれています。その後に、引数を宣言するコメントが続きます。次の例は、スタンバイ ノードなしで SAP HANA スケールアウト システムをデプロイする場合の sap_hana.tf ファイルからの抜粋です。

#...
module "sap_hana" {
  source = "https://storage.googleapis.com/cloudsapdeploy/terraform/latest/terraform/sap_hana/sap_hana_module.zip"
  #
  # By default, this source file uses the latest release of the terraform module
  # for SAP on Google Cloud. To fix your deployments to a specific release
  # of the module, comment out the source property above and uncomment the source property below.
  #
  # source = "https://storage.googleapis.com/cloudsapdeploy/terraform/YYYYMMDDHHMM/terraform/sap_hana/sap_hana_module.zip"
  # ...
  project_id = "example-project-123456"
  zone = "us-central1-f"
  machine_type = "n2-highmem-32"
  subnetwork = "example-subnet-us-central1"
  linux_image = "sles-15-sp2-sap"
  linux_image_project = "suse-sap-cloud"
  # ...
  instance_name = "hana-scaleout"
  # ...
  sap_hana_deployment_bucket = "mybucketname"
  sap_hana_sid = "AB2"
  sap_hana_instance_number = 12
  sap_hana_sidadm_password = "TempPa55word"
  sap_hana_system_password = "TempPa55word"
  sap_hana_scaleout_nodes = 3
  sap_hana_sidadm_uid = 11
  vm_static_ip = "10.0.0.1"
  worker_static_ips = ["10.0.0.2", "10.0.0.3", "10.0.0.4"]
  enable_fast_restart = true
  # ...
}

オプションの引数を使用するには、コメント文字 # を削除し、引数の値を指定します。オプションの引数の大半にはデフォルト値があります。オプションの引数を指定しない場合、Terraform 構成はその引数のデフォルト値(存在する場合)を使用します。

構成ファイルの詳細については、Terraform 言語のドキュメントをご覧ください。

モジュールのバージョニング

SAP デプロイ用に Google Cloud からダウンロードした DEPLOYMENT_TYPE.tf Terraform 構成ファイルには、source 引数の 2 つのインスタンスが含まれています。1 つは有効で、もう 1 つはコメントです。構成で使用するモジュールのバージョンを管理するには、必要な source 引数の先頭にあるコメント文字 # を削除し、必要のない引数の先頭にコメント文字を追加します。

デフォルトでは、SAP デプロイ用に Google Cloud から新しい Terraform 構成ファイルをダウンロードすると、有効な source 引数にはモジュール バージョンとして latest が指定されます。つまり、terraform init コマンドを入力し、Terraform によって作業ディレクトリ内のファイルが更新されると、Google Cloud から SAP デプロイ用に提供されている最新バージョンの Terraform モジュールが構成で使用されます。

デフォルトでは、source 引数の 2 番目のインスタンスの先頭に # 文字があり、無効になっています。この引数には、Google Cloud から提供されたモジュールのバージョンを識別するタイムスタンプが指定されます。たとえば、次のサンプルでは、202309280828 が Terraform モジュールのバージョンを識別するタイムスタンプです。

#...
module "sap_hana" {
  source = "https://storage.googleapis.com/cloudsapdeploy/terraform/latest/terraform/sap_hana/sap_hana_module.zip"
  #...
  # source = "https://storage.googleapis.com/cloudsapdeploy/terraform/202309280828/terraform/sap_hana/sap_hana_module.zip"
  #...
  # arguments...
  #...

すべてのデプロイで同じモジュール バージョンを使用する必要がある場合は、次のレのように、DEPLOYMENT_TYPE.tf でバージョン タイムスタンプを含む source 引数の先頭から # 文字を削除し、バージョンとして latest を指定している source 引数の先頭にコメント文字を追加します。

#...
module "sap_hana" {
  # source = "https://storage.googleapis.com/cloudsapdeploy/terraform/latest/terraform/sap_hana/sap_hana_module.zip"
  #...
  source = "https://storage.googleapis.com/cloudsapdeploy/terraform/202309280828/terraform/sap_hana/sap_hana_module.zip"
  #...
  # arguments...
  #...

タイムスタンプを指定すると、すべてのデプロイで指定したタイムスタンプに対応する Terraform モジュールのバージョンが使用されます。

1 つの構成ファイルで複数のシステムをデプロイする

構成ファイルで、デプロイする追加システムごとに module ブロックを追加することで、1 つの構成ファイルで複数のシステムをデプロイできます。

SAP デプロイの場合は、module ブロックをコピーして貼り付け、新しい SAP システムを作成します。

各モジュール ブロックで、moduleinstance_name などのインスタンス固有の引数に一意の値を指定してください。

構成を適用する

Terraform 構成を適用するには、terraform apply コマンドを使用します。

Google Cloud リソースを実際にデプロイする前に構成結果をプレビューするには、terraform plan コマンドを使用して Terraform 実行計画を作成します。

アプリケーションの詳細な手順については、シナリオのデプロイガイドをご覧ください。

Terraform が構成の適用を完了すると、Cloud Shell で、作成するリソースごとに COMPLETED が表示され、シェル スクリプトに制御が渡されます。シェル スクリプトは、デプロイされた VM で起動スクリプトとして呼び出されます。

シェル スクリプトは、デプロイされたリソースをさらに構成し、その進行状況を Cloud Logging に記録します。SAP デプロイは、シェル スクリプトの処理が終わるまで完了しません。

デプロイ後のスクリプト

デプロイ後のスクリプトを使用して、SAP NetWeaver アプリケーションやモニタリング エージェントなどのインストールのトリガーなど、追加のアクションを実行できます。

デプロイ後のスクリプトは、Google Cloud インフラストラクチャが SAP のサポート要件に従って構成された後にのみ制御されるため、構成をカスタマイズする場合は、この方法を使用することをおすすめします。

デプロイ後のスクリプトのステータス メッセージを表示するには、ログにメッセージが書き込まれるようにスクリプトをコーディングする必要があります。詳細については、Cloud Logging のドキュメントをご覧ください。

デプロイ後のスクリプトのステータスは、Terraform が Cloud Shell またはローカルの Google Cloud CLI シェル セッションに書き込むメッセージには含まれません。

Terraform 構成のサポートを利用する

Google Cloud が SAP 用に提供している Terraform 構成の問題を解決するには、必要な診断情報を収集し、Cloud カスタマーケアにお問い合わせください。

Terraform に関する問題のサポートを受ける方法については、Terraform の問題に関するサポートの利用をご覧ください。