この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
皆様こんにちは。
Terraformを利用して、AWSで高可用性アーキテクトの構築をしていきます。
今回はEFSを作成していきます。
1.高可用性アーキテクト構築目次
2.EFSの概要
Amazon Elastic File System (Amazon EFS) は、シンプルなサーバーレスで、 set-and-forget で使用する Elastic ファイルシステムAWS クラウドサービスとオンプレミスリソース。アプリケーションを停止させることなく、オンデマンドでペタバイト規模までスケールするよう設計されており、ファイルの追加や削除に応じて自動的に拡張/縮小されるため、拡張に対応するための容量のプロビジョニングや管理は不要になります。
EFSは、容量無制限で複数のEC2インスタンスから同時にアクセスが可能なファイルストレージサービスです。
EFSは多種多様なユースケースに対応できるよう、パフォーマンスモードやスループットモードといったモードが用意されています。
EFSのパフォーマンスモード
下記の2つの種類があります。
- 汎用パフォーマンスモード
- 最大I/Oパフォーマンスモード
ほとんどの場合、汎用パフォーマンスモードの使用で問題ありません。
ただし、数100~数1000台といったクライアントから同時にEFSにアクセスがある場合にも耐えられるように、最大I/Oパフォーマンスモードが用意されています。
パフォーマンスモードはあとから変更できないので、導入前によく検討しなければなりません。
どちらのモードを選択するのがよいかを見分ける指標として、CloudWatchのPercentIOLimitメトリクスが参考になります。
詳細はこちらのドキュメントを参照ください
EFSのスループットモード
下記の2種類があります。
- バーストスループットモード
- プロビジョニングスループットモード
スループットモードの選択には、CloudWatchのBurstCreditBalanceメトリクスが参考になります。クレジットバランスをすべて使い切ってしまったり、常に減少傾向である場合はプロビジョニングスループットモードを選択しましょう。
詳細はこちらのドキュメントを参照ください。
3.構成図
下記は今回作成するEFSのフロー図です。
- EFSを作成します。
- マウントターゲットを作成し、ターゲットはAZ1a、1cのパブリックサブネットを指定します(EC2インスタンスにマウントしたいため)。
- EC2インスタンスにEFSをマウントします。
「3. EC2インスタンスにEFSをマウントします。」はEC2のユーザーデータの設定でEC2作成時に自動でできるようにしています。ユーザーデータの設定
sudo yum install -y amazon-efs-utils
sudo mount -t efs -o tls fs-xxxxx:/ /var/www/html/
echo 'fs-xxxxx:/ /var/www/html efs tls,_netdev 0 0' | sudo tee -a /etc/fstab
上記のコードでEFSマウントヘルパーのインストール、EFSのマウント、インスタンスの再起動時に、EFSを自動マウントを設定しています。
4.EFSの作成
EFSを作成していきます。
全体のソースコードは下記の通りです。
#--------------------------------------
# EFSの作成
#----------------------------------------
resource "aws_efs_file_system" "higa-EFS" {
encrypted = "true"
kms_key_id = "arn:aws:kms:ap-southeast-1:アカウントID:key/e0b1110b-a12e-4a63-a87e-5b838d15ab4c"
tags = {
Name = "higa-EFS"
}
}
#マウントターゲットの作成
//マウントターゲット1a(higa-Public-subnet-1a)
resource "aws_efs_mount_target" "higa-EFS-1a" {
file_system_id = aws_efs_file_system.higa-EFS.id
subnet_id = aws_subnet.higa-Public-subnet-1a.id
security_groups = [aws_security_group.higa-EFS-sg.id]
}
//マウントターゲット1c(higa-Public-subnet-2c)
resource "aws_efs_mount_target" "higa-EFS-1c" {
file_system_id = aws_efs_file_system.higa-EFS.id
subnet_id = aws_subnet.higa-Public-subnet-2c.id
security_groups = [aws_security_group.higa-EFS-sg.id]
}
4-1.ファイルシステムの作成
ファイルシステムを作成していきます。
ソースコードは下記の通りです。(5~13行目)
resource "aws_efs_file_system" "higa-EFS" {
encrypted = "true"
kms_key_id = "arn:aws:kms:ap-southeast-1:[アカウントID]:key/e0b1110b-a12e-4a63-a87e-5b838d15ab4c"
tags = {
Name = "higa-EFS"
}
}
設定項目は下記の通りです。
使用するオプション | 設定値 | 説明 |
---|---|---|
encrypted | true | 暗号化を有効化 |
kms_key_id | arn:aws:kms:ap-southeast-1:[アカウントID]:key/e0b1110b-a12e-4a63-a87e-5b838d15ab4c | 自分のKMSキーのarn |
tags | Name = "higa-EFS" | EFSの表示名 |
これでファイルシステムが作成できました。
4-2.マウントターゲットの作成
次に作成したファイルシステムにアクセスするために、AZごとにパブリックサブネットを指定して(EC2インスタンスにマウントしたいため)、マウントターゲットを作成します。
ソースコードは下記の通りです。(15~28行目)
#マウントターゲットの作成
//マウントターゲット1a(higa-Public-subnet-1a)
resource "aws_efs_mount_target" "higa-EFS-1a" {
file_system_id = aws_efs_file_system.higa-EFS.id
subnet_id = aws_subnet.higa-Public-subnet-1a.id
security_groups = [aws_security_group.higa-EFS-sg.id]
}
//マウントターゲット1c(higa-Public-subnet-2c)
resource "aws_efs_mount_target" "higa-EFS-1c" {
file_system_id = aws_efs_file_system.higa-EFS.id
subnet_id = aws_subnet.higa-Public-subnet-2c.id
security_groups = [aws_security_group.higa-EFS-sg.id]
}
設定項目は下記の通りです。
使用するオプション | 設定値 | 説明 |
---|---|---|
file_system_id | aws_efs_file_system.higa-EFS.id | 自分のファイルシステムを指定 |
subnet_id | aws_subnet.higa-Public-subnet-1a.id aws_subnet.higa-Public-subnet-2c.id |
パブリックサブネットを指定 |
security_groups | [aws_security_group.higa-EFS-sg.id] | EFS用に作成したSGを指定 |
これでマウントターゲットの作成ができました。
5.検証
5-1.1台目のEC2インスタンスに接続
Tera Termを使ってhiga-ec2-1に接続します。
5-2.ディレクトリに移動
次に下記コマンドで両方のインスタンスがEFSにマウントしたディレクトリに移動します。
cd /var/www/html
[ec2-user@ip-10-0-1-10 ~]$ cd /var/www/html
[ec2-user@ip-10-0-1-10 html]$
5-3.テストファイルの作成
sudo touch higa-test.txt
コマンドで「higa-test.txt」ファイルを作成し、ls
コマンドで確認します。
[ec2-user@ip-10-0-1-10 html]$ sudo touch higa-test.txt
[ec2-user@ip-10-0-1-10 html]$ ls higa-test.txt
higa-test.txt
テストファイルが作成できたことが確認できました。
5-4.2台目のEC2インスタンスで確認
「5-1」と同じようにhiga-ec2-2にログインし、ls higa-test.txt
コマンドで確認します。
2代目のEC2インスタンス(higa-ec2-2)でもテストファイルが確認できました。
6.まとめ
EFSの作成はTerraformの公式ドキュメントを参考に、特に問題なく作成できました。
しかし検証が上手くいかず、原因はEFSのユーザーデータの設定を1台目のEC2インスタンスは設定していたのですが、2台目は設定を忘れていたので、検証が上手くいきませんでした。
当然のことですが、設定に抜けている部分がないか確認することは大切だと感じました。
7.参考文献
- terraformの公式ドキュメント
Docs overview | hashicorp/aws | Terraform Registry