Elastic Beanstalk で EFS を利用する

最終更新日: 2020年6月12日
R8 | R9

Amazon EFSの概要

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

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

EFS の作成とマウント (1)

アカウントへの 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"
## Subnet Options
    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 コマンドで削除されます。次節で、これを回避するもう一つの設定を説明します。

EFS の作成とマウント (2)

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 をダウンロードできます。