Amazon FSx for NetApp ONTAPをTerraformで構築してみた

バージョン管理システムやビルド環境をクラウド化するときのストレージとして...
2024.04.02

ゲームソリューション部の えがわ です。

本日はAmazon FSx for NetApp ONTAP(以降FSxN)をTerraformで構築してみました。

Amazon FSx for NetApp ONTAPとは

FSxNは高いパフォーマンスを提供し、バックアップとリストアのプロセスが容易です。
ゲーム業界ではビルド環境バージョン管理システムのストレージとして、とても適しています。

Amazon FSx for NetApp ONTAP は、 NetAp]pの人気のある ONTAP ファイルシステム上に構築された、信頼性が高く、スケーラブルで、パフォーマンスが高く、機能豊富なファイルストレージを提供するフルマネージドサービスです。FSx for ONTAP は、 NetApp ファイルシステムの使い慣れた機能、パフォーマンス、機能、および API オペレーションと、フルマネージド型の の俊敏性、スケーラビリティ、およびシンプルさを組み合わせますAWS のサービス。

事前準備

VPCの準備

VPCは以下のTerraformで作成しています。

各種パラメータの準備

VPC ID, Subnet ID, CIDRをメモしておきます。
VPC ID, Subnet IDはCLIでも取得できます。
また、FSxNはプライベートサブネットに配置します。

VPC IDの取得

aws ec2 describe-vpcs \
  --query 'Vpcs[*].{VpcId:VpcId,Name:Tags[?Key==`Name`]|[0].Value}'\
  --output text

Subnet IDの取得

aws ec2 describe-subnets \
  --filters "Name=vpc-id,Values={選択したVPC ID}" \
  --query 'Subnets[*].{SubnetId:SubnetId,Name:Tags[?Key==`Name`]|[0].Value}' \
  --output text

環境構築

リポジトリ

Terraform

resource "aws_security_group" "nfs_sg" {
  name   = "${var.project_name}-nfs-sg"
  vpc_id = var.vpc_id

  ingress {
    from_port   = 2049
    to_port     = 2049
    protocol    = "tcp"
    cidr_blocks = [var.vpc_cidr_block]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

resource "aws_fsx_ontap_file_system" "file_system" {
  storage_capacity    = 1024
  subnet_ids          = [var.subnet_id]
  preferred_subnet_id = var.subnet_id
  deployment_type     = "SINGLE_AZ_1"
  throughput_capacity = 128
  security_group_ids  = [aws_security_group.nfs_sg.id]
  fsx_admin_password  = var.fsx_admin_password

  tags = {
    Name = "${var.project_name}-fsxn"
  }

  timeouts {
    create = "60m"
    update = "60m"
  }
}

resource "aws_fsx_ontap_storage_virtual_machine" "svm" {
  file_system_id = aws_fsx_ontap_file_system.file_system.id
  name           = "${var.project_name}-svm"
}

resource "aws_fsx_ontap_volume" "volume" {
  name                       = "vol"
  junction_path              = "/vol1"
  size_in_megabytes          = 1048576
  storage_efficiency_enabled = true
  storage_virtual_machine_id = aws_fsx_ontap_storage_virtual_machine.svm.id

  lifecycle {
    ignore_changes = [
      tiering_policy[0].cooling_period
    ]
  }
}

Terraformを実行するとファイルシステムの作成に30分ほど(Single-AZ)時間がかかります。

※ファイルシステムの作成だけで24分かかりました。

module.fsxn.aws_fsx_ontap_file_system.file_system: Creating...
module.fsxn.aws_fsx_ontap_file_system.file_system: Still creating... [10s elapsed]
module.fsxn.aws_fsx_ontap_file_system.file_system: Still creating... [20s elapsed]
...中略
module.fsxn.aws_fsx_ontap_file_system.file_system: Still creating... [24m10s elapsed]
module.fsxn.aws_fsx_ontap_file_system.file_system: Still creating... [24m20s elapsed]
module.fsxn.aws_fsx_ontap_file_system.file_system: Creation complete after 24m24s [id=fs-xxxxxxxxxxxxxx]

作成したFSxNをEC2にマウントしてみます。
マウントコマンドについてはAWSのマネジメントコンソールから確認できます。

EC2にSSMで接続し表示されているコマンドを実行します。

マウントすることができました!
画像では113GBが使用済みとなっていますが、16%はファイルシステム用に予約されています。

他の NetApp ONTAP ファイルシステムと同様に、ファイルシステムの SSD ストレージ容量の最大 16% は ONTAP オーバーヘッド用に予約されています。つまり、ファイルの保存には使用できません。ONTAP オーバーヘッドは次のように割り当てられます。11% は NetApp ONTAP ソフトウェア用に予約されています。30 テビバイト (TiB) を超える SSD ストレージ容量を持つファイルシステムの場合、6% が予約されています。5% は、ファイルシステムの両方のファイルサーバ間でデータを同期させるために必要な、集約スナップショット用に確保されています。

サイジングについては以下のブログを参考になります。

最後に

FSxNは強力なストレージオペレーティングシステムで、高度なデータ管理機能と優れた拡張性を備えています。
ゲーム業界ではバージョン管理システムやビルド環境のストレージとして、とても適しています。
この記事が参考になれば幸いです。