サポート > Wagby Developer Network(R8) > サーバの運用 > Elastic Beanstalk で EFS を利用する

Amazon EC2 を利用したとき、サービスを停止すると保存していたファイルもすべて消失します。Amazon EFS を共有ストレージとして利用することで、サービス停止後もファイルを保存し続けることができるようになります。

Wagby でファイル型項目に登録したファイルは upload_dir フォルダ内に管理されます。またインポート・エクスポート操作では export フォルダにファイルを保存します。Amazon EC2 は仮想環境であるため、サービスを停止するとこれらのローカルファイルもすべて消失します。

この対応のため、Amazon EFS (Elastic File System) を使う方法を説明します。EFS は共有ストレージであり、サーバ (EC2) を停止したあとでも EFS に保存したファイルは維持されます。

アカウントへの EFS 権限の追加

Elastic Beanstalkを実行しているアカウントに、EFSの権限を追加します。

次のコマンドを入力します。

C:\Wagby-8.1.2\ebs>aws iam attach-user-policy --user-name ebswagby --policy-arn "arn:aws:iam::aws:policy/AmazonElasticFileSystemFullAccess"

.ebextensionsに設定ファイルを格納する

.ebextensionsに設定ファイルを配置することでEFSの作成とマウントを行うことができます。上で示したリンク "参考 - Elastic Beanstalk を Amazon Elastic File System に使用する" から次のファイルをダウンロードし、C:\Wagby-8.1.2\ebs\files\.ebextensionsに格納してください。

  • storage-efs-createfilesystem.config
  • storage-efs-mountfilesystem.config

配置後、storage-efs-createfilesystem.configの下記の部分を実行中の環境に合わせて修正します。

option_settings:
  aws:elasticbeanstalk:customoption:
    VPCId: "vpc-0208b3ab6a7cf8978"
    SubnetA: "subnet-0c4d1541a528c63ba"
    SubnetB: "subnet-030085de17d83f973"

.ebextensions/tomcat/copy.shの修正

/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を指定します。

事前に EFS を作成する

こちらのページを参考に行ってください。

上のリンクで説明したページに記載のとおり、aws efs create-file-system コマンドで 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

作成したファイルシステムIDをstorage-efs-mountfilesystem.configに指定します。このとき、storage-efs-createfilesystem.configは削除します。

option_settings:
  aws:elasticbeanstalk:application:environment:
    FILE_SYSTEM_ID: 'fs-5306de72'
    MOUNT_DIRECTORY: '/efs'

その後、アップロードするファイル(zipまたはWARファイル)を作成し、eb deploy を行ってください。

ダウンロード

ここまでの説明が含まれた eb_files2.zip をダウンロードできます。