Amazon Web Services ブログ

TerraformによるAWS上のSAPインフラストラクチャー

Infrastructure as Code

お客様のSAPシステムは、ビジネスオペレーションにとって非常に重要です。そのため、アーキテクトと管理者が展開と運用を計画するときは、SAPのベストプラクティスに従うことに重点が置かれます。さらに、ワークロード要件が変更されたら、チームはすべてのセキュリティ原則、性能のベストプラクティス、非機能要件を念頭において、必要なインフラストラクチャーの展開を繰り返し、かつ迅速に対応する必要があります。

単体のSAPシステムに最低限必要なリソースには、一般的に以下があります。

  • 仮想プライベートクラウドとサブネット
  • SAPアプリケーションとデータベース固有のセキュリティグループの構成
  • EC2インスタンス
  • EBSボリューム
  • sapmntとDIR_TRANSフォルダー用のAmazon EFSファイルシステム
  • 保存時の暗号化のためのKMSキー
  • インストールファイル、SAPバックアップ、ファイルアーカイブ用のS3バケット
  • インスタンス、アプリケーション管理、監査人などのためのIAMロール

SAP on AWS Reference Architecture

さらに、SAP運用の効率を最大化し、オペレーショナルエクセレンスを改善し、他のAWSサービスを活用するために、お客様は以下の設定も行います。

  • Amazon CloudWatchのメトリクス監視、アラーム、イベント
  • バックアップツール (例: AWS Backint Agent)
  • 運用自動化のためのAWS Systems Manager プレイブック
    • EC2の起動/停止
    • パッチ管理
    • SAPプロファイル管理
  • コンプライアンス監視のためのAWS Config ルール
  • SAP機能を拡張するためのサーバーレスアプリケーション

そして、このリストは決して完全ではありません。お客様ランドスケープのSAPシステムが増えるにつれて、AWS内で作成および管理しなければならないリソースやサービスの数も増加します。現在、これらのリソースは、AWSコンソールを介して非常に簡単に作成できます。これは、クラウド内で最初のSAPシステムを素早く稼働させるための分かりやすい最初のステップです。

しかしながら、お客様が1つのシステムだけを必要とすることは滅多にありません。お客様は、コラボレーションを強化し、実行に費やす時間と労力を削減することのできる、よりシンプルな方法を探しています。

ここで、Infrastructure as Codeの概念が登場します。

Infrastructure as Codeは、コードとバージョン管理や継続的インテグレーションといったソフトウェア開発技術を使用してインフラストラクチャーを展開および管理する手法です。AWSクラウドでは、手動でリソースの構築や構成をする代わりに、開発者とシステム管理者が大規模にプログラムによってインフラストラクチャーを操作できるようにするためのAPIドリブンなモデルを提供しています。リソースとサービスはコードとして定義されるため、インフラストラクチャーとサーバーは、標準化されたパターンを使用して素早く展開でき、最新のパッチ/バージョンで更新でき、繰り返し可能な方法で複製できます。

この概念により、AWSクラウドのリソースをテキストベースの構成ファイルとして定義でき、チームは以下のことができるようになります。

  • コラボレーションと構成の共有
  • インフラストラクチャーの進化とバージョン管理
  • プロビジョニングの自動化

AWS CloudFormationAWS Cloud Development Kitは、JSOL、YAML、TypeScript、Python、Javaで必要なリソースを記述できるネイティブのAWSツールです。

これにより、SAPクイックスタートとAWS Launch Wizardを使用することで、AWS上に素早くSAPインフラストラクチャーを展開できます。AWS Launch Wizardにより、お客様のチームは、SAP管理者向けに設計されたガイド付きエクスペリエンスに従って、AWSコンソールからAWSベストプラクティスを遵守したSAPシステムを迅速に構築できます。

SAPインフラストラクチャー用のDevOps

インフラストラクチャーをコードで定義すると、別のメリットもあります。SAP Basisの世界でDevOpsモデルを実装できるようになります。

Delivery Pipeline

すべてのレイヤーでSAPのプロビジョニングを自動化すると、以下の利点があります。

  • 迅速なデリバリー
  • スケール
  • 信頼性
  • コラボレーションの改善
  • セキュリティ

このトピックの詳細は、こちらのリンクを参照してください。

HashiCorpのTerraform

HashiCorpのTerraformは、クラウドビジネスにおけるInfrastructure as Codeのツールとして最も人気のあるものの一つです。事実、開発者の68%が、Terraformを好んでいます。重要なことは、68%もの開発者が、このレポートにあるように気に入って使用しており、最も人気のあるものにしていることです。

これには複数の理由があります。

  • 構成言語が学びやすく、読みやすい
  • 単一の設定でシステムの複数の要素を構成できる200以上のプロバイダー
  • 300を超えるモジュールを持った強力なコミュニティ

AWSプロフェッショナルサービスのSAPプラクティスチームでは、自動化の仕組みを実現するためのツールとしてTerraformを好んで選択するお客様を支援しています。これらをすべてお客様自身で実施する場合、通常のプロジェクトでは数か月かかるだろうと気づきました。

お客様にこだわり、フィードバックに注目して、SAPベストプラクティスとAWSベストプラクティスを考慮したSAPシステムを構築することに決めました。

私たちは、社内で開発したモジュールの一部をオープンソースとして共有するため、GitHubで公開しています。

また、Terraform Registryに私たちのモジュールを登録して、それらをHashiCorpのツール群からネイティブに使用できるようにしています。

これらのモジュールは、既存のTerraformの構成に簡単に追加できます。Terraformによる旅路を始めるには、リポジトリをクローンして新しいTerraformの構成を開始するだけです。

例えば、これはSAP HANAインフラストラクチャーのプロビジョニングがどのようになるかを示しています。

```hcl
module hana_host {
  source = "./../../../../modules/sap-netweaver-instances/hana-host"

  # If you want high availability
  instance_count = 2
  # Instance type - should be from the list of certified HANA instance sizes
  instance_type = "r5.4xlarge"
  enabled                           = true
  ami_id                            = "ami-xyz123"

  # General

  # KMS Key for EBS Volumes Encryption
  kms_key_arn = "arn:aws:kms:us-east-1:12345678910:key/xyz12345-xyz1-xyz1-xyz12-xyz12345678910"

  # Networking
  vpc_id                            = "vpc-xyz123"

  # The list of subnets to deploy the instances
  subnet_ids                 = ["subnet-xyz123", "subnet-xyz789"]
  # The Route53 private Zone name to create the host entry
  dns_zone_name                 = "customer.com"
  # The CIDR block for the onPremise Network
  customer_cidr_blocks                = ["10.0.0.0/16"]
  # The default security group to be added
  customer_default_sg_id = "default"
  
  # Instance Role
  iam_instance_role = "sap-instance-role"

  # Tags
  app_code = "S4H"
  environment = "prod"
  application_name = "ECC"
  
  # SAP
  sid = "DWE"
}
```

条件付き作成

多くの場合、条件付きでインスタンスを作成する方法が必要ですが、Terraformでは`module`ブロックの中で`count`を使用できないため、解決策としては引数`enabled`を指定することです。

この引数は、すべてのモジュールで使用できます。

```hcl
# This VPC will not be created
module hana_host {
  source = "./../../../../modules/sap-netweaver-instances/hana-host"

  enabled = false
  # ... omitted
}
```

高可用性

高可用性システムを構築するには、`instance_count`パラメーターを使用することで、必要なHanaモジュールのインスタンス数を指定できます。

次のSAP HANAスケールアウトの例では、ノード数を2倍にしています。

```hcl
# Two copies of hana instance will be provisioned
module hana_host {
  source = "./../../../../modules/sap-netweaver-instances/hana-host"

  instance_count = 2
  # ... omitted
}
```

インスタンスロール

`default_iam_role`を`true`に設定することで、AWS Systems Managerの認証を介してインスタンスにデフォルトのロールを割り当てることができます。

インスタンスにカスタムロールを割り当てたい場合は、`iam_role`パラメーターとしてロールARNに必要なロールを指定します。

```hcl
# The provided role will be attached
module hana_host {
  source = "./../../../../modules/sap-netweaver-instances/hana-host"

  iam_role = <instance_role_arn>
  # ... omitted
}
```

```hcl
# The default role will be created and attached
module hana_host {
  source = "./../../../../modules/sap-netweaver-instances/hana-host"

  default_iam_role = true
  # ... omitted
}
```

保存時の暗号化

EFSやEBSボリュームの暗号化をしたいなら、KMSキーのARNを入力パラメーターとして指定します。空のままにしておけば、暗号化は非有効化のままです。

```hcl
# The default role will be created and attached
module hana_host {
  source = "./../../../../modules/sap-netweaver-instances/hana-host"

  kms_key_arn = <kms_key_arn>
  # ... omitted
}
```

EC2インスタンスの自動復旧

AWSであれば、基盤となるハードウェアのシステムステータスのチェックが失敗した場合に備えて、EC2インスタンスの自動復旧を準備できます。インスタンスは、(必要に応じて新しいハードウェア上で)再起動しますが、インスタンスID、IPアドレス、Elastic IPアドレス、EBSボリュームの割り当て、それ以外の構成の詳細も保持されます。復旧を完了するには、インスタンスが初期化プロセスの一部としてサービスまたはアプリケーションを自動的に起動することを確認する必要があります。

インスタンスの自動復旧は、自動的にモジュールに組み込まれます。

インスタンスのユーザーデータ

インスタンスは、デフォルトの初期化スクリプトを組み合わせて提供できます。このスクリプトは、AWS CLI、AWS SSMエージェント、CloudWatchエージェントをインストールします。

この動作を変更したいなら、それぞれのモジュール入力の中でユーザーデータを割り当ててください。

```hcl
# The provided user data will be attached
module hana_host {
  source = "./../../../../modules/sap-netweaver-instances/hana-host"

  user_data = <user_data_script>
  # ... omitted
}
```

結論

SAPをコードで定義するためのGitHubTerraform Registryに公開した私たちのTerraformのモジュールを説明しました。いくつかの初期の学習曲線のハードルを克服することで、インフラストラクチャーとサーバーは、標準化されたパターンを使用して素早く展開でき、最新のパッチ/バージョンで更新でき、繰り返し可能な方法で複製できます。

TerraformとAWSクラウドのAPIドリブンなモデルにより、開発者とシステム管理者は、手動でリソースの構築や構成をする代わりに、 大規模にプログラムによってインフラストラクチャーを操作できるようになります。

このソリューションを使用すると、既存のTerraformの構成に簡単に追加できます。Terraformを使用するには、リポジトリをクローンして新しいTerraformの構成を開始するだけです。

もっと学びたいですか?お客様のプロジェクトにこのソリューションを拡張する方法についてもっと詳しく知りたいですか?

詳細は、sap-on-aws@amazon.comまでお問い合わせください。

翻訳はPartner SA 河原が担当しました。原文はこちらです。