AWSからAWS Storage Gateway (Amazon S3 File Gateway)用のTerraformモジュールが提供されました

2022.12.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

しばたです。

先日AWSから「AWS Storage Gateway introduces Terraform modules for Amazon S3 File Gateway」というタイトルの更新がアナウンスされました。

内容としてはVMware環境向けのAWS Storage Gateway (Amazon S3 File Gateway)のTerraformモジュールを提供したとのことなのですが、詳細を読み解いていくと予想していたものとちょっと違ってたので本記事で解説したいと思います。

AWS Storage GatewayのTerraformサポート

以前からTerraformのAWS ProviderではAWS Storage Gatewayをサポートしており、私もこんな記事を書いたことがあります。

この記事ではVPC内のEC2インスタンスをFile Gatewayとして構築しています。

今回の更新内容について

今回提供されるモジュールはGitHubでソースが公開されています。

AWS Integration and Automation (aws-ia)というOrganizationで管理されており、今回のモジュール以外にもAWS環境構築を自動化するツール周りのコードを公開しています。

で、この内容を読み解くと下図の様な環境をつくるためのTerraformモジュールとなっていました。

VMware環境にFile GatewayとなるVMを構築しStorage Gatewayとしての一連の登録作業を行うTerraformモジュールとなっています。

ただ、ソースを見る限りでは想定しているシナリオがかなり限定的であり、汎用モジュールというよりは「リファレンス実装」と言うほうが適切に見えました。
ライセンスもApache License 2.0ですし利用者の環境に合わせて適宜改変して使うのが良さそうです。

コード解説

実際に動作確認できればベストだったのですが、残念ながら手元にVMware環境が無いため今回はわかる範囲でコードの解説をしていきます。
コードは本日時点で最新のCommit 2b053520bee953b9dc11309d35e0947bfa3d890時点のものを確認しています。

極力間違いの無い様に気を付けていますが、もし誤りがあったらスイマセン...

前提条件

このモジュールではVMware環境の構築にTerraform vSphere Providerを、AWS側の構築にTerraform AWS Providerを使っています。

要求される各種Providerのバージョンは以下の通りです。

Provider 要求バージョン 備考
Terraform本体 >=1.2.0 サブモジュールがVer.1.2.0以降を要求している
aws >= 4.0.0, < 5.0.0 要はVer.4系
awscc >= 0.24.0 ドキュメントに記載されているが実際使っている様には見えない
vsphere >=1.25.0 実装サンプルを試すには >=2.2.0 が必要

ドキュメントおよびrequired_providers上はAWS Cloud Control API Provider (awscc)を使う様になっているのですが、ソースを検索してもどのリソースも使っておらずこのProviderは無くても動作する気がします...

また、実装サンプルであるexample/s3filegateway-vmwareでは他にRandom providerを使っていますが、これはStorage Gatewayの名前付けにランダムな名称を付けるためだけのものでした。付ける名称が決まっている場合は不要でしょう。

実行環境

実行環境に対する前提としては以下の通りです。

  • VMware基盤は構築済みである
    • TerraformはVMを作るだけ
  • vCenter Serverへの適切なアクセス
    • Terraform vSphere ProviderがvSphere Automation APIを使うため
  • Active Directory環境
    • S3 File GatewayがAD認証する前提で設計されている

現時点のモジュール実装ではActive Directory環境は必須となっており、Acitive Directoryを使わない場合はモジュールを改変する必要があります。

vmware-sgw サブモジュール

このモジュールは内部で主に3つのサブモジュールを定義しています。
そのうちvmware-sgw サブモジュールはTerraform vSphere Providerを使いVMware環境にStorage Gateway用のVMを作るためのモジュールとなります。

入力パラメーターは多いですが、VMのスペック以外はVMware環境の内容を指定するものですので問題にはならないでしょう。

Storage Gatewayで使うVMは専用のOVAファイルから作る必要がありますが、これはremote_ovf_urlパラメーターにデフォルト値が設定されていますのでそのまま使えば問題ないはずです。

aws-sgw サブモジュール

aws-sgw サブモジュールはAWS側のStorage Gateway設定をするためのモジュールです。

以前に書いた記事にもある、

  • aws_storagegateway_gateway
  • aws_storagegateway_cache
  • aws_storagegateway_local_disk

3リソースの設定をラップしています。
このサブモジュール自体はGateway typesでS3 File Gateway以外の

  • FSx File Gateway
  • Tape Gateway
  • Volume Gateway

も選択可能になっているのですが親モジュールでは使っていません。
モジュールを改変する場合は役立つかもしれません。

また、サブモジュール名のせいで少しわかりにくいですが、今回は

VMwareのVM = S3 File Gateawy

ですのでvmware-sgwサブモジュールとaws-sgwサブモジュールが指す実体は同一です。
vmware-sgwサブモジュールでVMを作り、その次にaws-sgwサブモジュールでAWSの設定を行う流れとなっています。

s3-smb-share サブモジュール

s3-smb-share サブモジュールはS3ファイル共有を行うためのサブモジュールです。

  • aws_storagegateway_smb_file_share

の設定をラップしています。

その他

その他のリソース、主にS3バケットやIAM Roleについては自力で作る想定となっていました。
実装サンプルでは

となっています。

個人的にはこの両者もラップしてくれた方が良い様に思えますが、汎化が難しい部分だとも思うので仕方ないかなという感じです。

最後に

簡単ですが以上となります。

最初にアナウンスを見た時に期待したものとはちょっと違う感じでしたが、リファレンスとして使う分には十分に役に立つのではと思う次第です。