Elastic Beanstalk で EFS を利用する
最終更新日: 2020年6月12日
R8 | R9
Wagby でファイル型項目に登録したファイルは upload_dir フォルダ内に管理されます。またインポート・エクスポート操作では export フォルダにファイルを保存します。Amazon EC2 は仮想環境であるため、サービスを停止するとこれらのローカルファイルもすべて消失します。
この対応のため、Amazon EFS (Elastic File System) を使う方法を説明します。EFS は共有ストレージであり、サーバ (EC2) を停止したあとでも EFS に保存したファイルは維持されます。
Elastic Beanstalkを実行しているアカウントに、EFSの権限を追加します。
次のコマンドを入力します。
.ebextensionsに設定ファイルを配置することでEFSの作成とマウントを行うことができます。上で示したリンク "参考 - Elastic Beanstalk を Amazon Elastic File System に使用する" から次のファイルをダウンロードし、C:\Wagby-8.1.2\ebs\files\.ebextensionsに格納してください。
配置後、storage-efs-createfilesystem.configの下記の部分を実行中の環境に合わせて修正します。
/usr/share/upload_dir および /usr/share/export はこれまでディレクトリを作成していましたが、これを /efs へのシンボリックリンクとします。
その後、アップロードするファイル(zipまたはWARファイル)を作成し、eb deploy を行ってください。
ここまでの説明が含まれた eb_files1.zip をダウンロードできます。
この設定で作成したEFSは、eb terminate コマンドで削除されます。次節で、これを回避するもう一つの設定を説明します。
eb terminate コマンドでも EFS を削除されない方法を説明します。事前にEFSを作成しておき、storage-efs-mountfilesystem.configのみを使って、この設定ファイルにfile-system-idを指定します。
こちらのページを参考に行ってください。
上のリンクで説明したページに記載のとおり、aws efs create-file-system コマンドで EFS を作成します。
次のようなメッセージが表示されます。
それぞれ用意したサブネットに対してマウントします。
作成したファイルシステムIDをstorage-efs-mountfilesystem.configに指定します。このとき、storage-efs-createfilesystem.configは削除します。
その後、アップロードするファイル(zipまたはWARファイル)を作成し、eb deploy を行ってください。
ここまでの説明が含まれた eb_files2.zip をダウンロードできます。
Amazon EFSの概要
EFS の作成とマウント (1)
アカウントへの EFS 権限の追加
C:\Wagby-8.1.2\ebs>aws iam attach-user-policy --user-name ebswagby --policy-arn "arn:aws:iam::aws:policy/AmazonElasticFileSystemFullAccess"
.ebextensionsに設定ファイルを格納する
option_settings:
aws:elasticbeanstalk:customoption:
VPCId: "vpc-0208b3ab6a7cf8978"
## Subnet Options
SubnetA: "subnet-0c4d1541a528c63ba"
SubnetB: "subnet-030085de17d83f973"
.ebextensions/tomcat/copy.shの修正
ダウンロード
制約
EFS の作成とマウント (2)
事前に EFS を作成する
C:\Wagby-8.1.2\ebs>aws efs create-file-system --creation-token ebswagby-tomcat-fs
{
"OwnerId": "234318443261",
"CreationToken": "ebswagby-tomcat-fs",
"FileSystemId": "fs-5306de72",
"CreationTime": 1545373635.0,
"LifeCycleState": "creating",
"NumberOfMountTargets": 0,
"SizeInBytes": {
"Value": 0
},
"PerformanceMode": "generalPurpose",
"Encrypted": false,
"ThroughputMode": "bursting"
}
C:\Wagby-8.1.2\ebs>aws efs create-mount-target --file-system-id fs-5306de72 --subnet-id subnet-0c4d1541a528c63ba --security-groups sg-0f8deea37c13e8c2f
{
"OwnerId": "234318443261",
"MountTargetId": "fsmt-7e95655f",
"FileSystemId": "fs-5306de72",
"SubnetId": "subnet-0c4d1541a528c63ba",
"LifeCycleState": "creating",
"IpAddress": "10.0.1.231",
"NetworkInterfaceId": "eni-0ef16903b2e8076de"
}
C:\Wagby-8.1.2\ebs>aws efs create-mount-target --file-system-id fs-5306de72 --subnet-id subnet-030085de17d83f973 --security-groups sg-0f8deea37c13e8c2f
{
"OwnerId": "234318443261",
"MountTargetId": "fsmt-46956567",
"FileSystemId": "fs-5306de72",
"SubnetId": "subnet-030085de17d83f973",
"LifeCycleState": "creating",
"IpAddress": "10.0.0.83",
"NetworkInterfaceId": "eni-0c38588b855d5cdab"
}
storage-efs-mountfilesystem.config
option_settings:
aws:elasticbeanstalk:application:environment:
FILE_SYSTEM_ID: 'fs-5306de72'
MOUNT_DIRECTORY: '/efs'
ダウンロード