S3 で静的ウェブサイトをホストできることはわかっていますが、これは AWS EFS で実行できますか? それもお勧めですか?
3 に答える
可能ですが、価格と性能を考慮すると、お勧めしません。EFS は現在 $0.30/GB で、S3 は月額 $0.03/GB です。また、EFS からサービスを提供するには、1 つ以上の実行中の EC2 インスタンスが必要です。ベンチマークについては知りませんが、S3 は自動的にスケーリングするため、S3 もより優れたパフォーマンスを提供することを完全に期待しています。
現在、Elastic Beanstalk を使用してこのセットアップを行っています。私が持っているのは、2 つのスクリプトを含む .ebextensions フォルダーだけです。
- 01-umount-efs.config
- 02-マウント-efs.config
01-umount-efs.config
commands:
01_mount:
command: umount /var/app/current/efs || /bin/true
02_mount:
command: umount -l /var/app/current/efs || /bin/true
02-マウント-efs.config
# Mount
commands:
create_post_dir:
command: "mkdir -p /opt/elasticbeanstalk/hooks/appdeploy/post"
ignoreErrors: true
do_something:
command: "/sbin/service httpd restart"
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_mount_efs.sh":
mode: "000755"
content : |
#!/bin/bash
EC2_REGION="ap-southeast-2"
EFS_MOUNT_DIR=/var/app/current/efs
EFS_FILE_SYSTEM_ID=fs-xxxxxxxx
EC2_ZONE=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
echo "Mounting EFS filesystem ${EFS_DNS_NAME} to directory ${EFS_MOUNT_DIR} ..."
echo "Region is ${EC2_REGION}"
echo 'Stopping NFS ID Mapper...'
service rpcidmapd status &> /dev/null
if [ $? -ne 0 ] ; then
echo 'rpc.idmapd is already stopped!'
else
service rpcidmapd stop
if [ $? -ne 0 ] ; then
echo 'ERROR: Failed to stop NFS ID Mapper!'
exit 1
fi
fi
echo 'Checking if EFS mount directory exists...'
if [ ! -d ${EFS_MOUNT_DIR} ]; then
echo "Creating directory ${EFS_MOUNT_DIR} ..."
mkdir -p ${EFS_MOUNT_DIR}
if [ $? -ne 0 ]; then
echo 'ERROR: Directory creation failed!'
exit 1
fi
chmod 777 ${EFS_MOUNT_DIR}
if [ $? -ne 0 ]; then
echo 'ERROR: Permission update failed!'
exit 1
fi
else
echo "Directory ${EFS_MOUNT_DIR} already exists!"
fi
mountpoint -q ${EFS_MOUNT_DIR}
if [ $? -ne 0 ]; then
echo "mount -t nfs4 -o nfsvers=4.1 ${EC2_ZONE}.${EFS_FILE_SYSTEM_ID}.efs.${EC2_REGION}.amazonaws.com:/ ${EFS_MOUNT_DIR}"
mount -t nfs4 -o nfsvers=4.1 ${EC2_ZONE}.${EFS_FILE_SYSTEM_ID}.efs.${EC2_REGION}.amazonaws.com:/ ${EFS_MOUNT_DIR}
if [ $? -ne 0 ] ; then
echo 'ERROR: Mount command failed!'
exit 1
fi
else
echo "Directory ${EFS_MOUNT_DIR} is already a valid mountpoint!"
fi
echo 'EFS mount complete.'
ap-southeast-2 (EC2_REGION) と fs-xxxxxxxx (EFS_FILE_SYSTEM_ID) を変更するだけです。
次に、Beanstalk 構成 > ソフトウェアで、ドキュメント ルートを/efsに設定します。
EC2 インスタンスを経由して、EFS への FTP アクセスを設定することもできます。
- キー ファイルを作成してダウンロードします: [EC2] > [ネットワークとセキュリティ] > [キー ペア] > [キー ペアの作成]
- 作成したばかりのキー ペアを選択します: [Beanstalk] > [構成] > [セキュリティ] > [仮想マシンのアクセス許可] > [EC2 キー ペア]
- 次に、.pem ファイルを .ppk に変換し、それを使用して sftp 経由で接続することをお勧めします。
FTP 設定例
{
"type": "sftp",
"host": "ec2-XX-XX-XXX-XX.ap-southeast-2.compute.amazonaws.com",
"user": "ec2-user",
"port": "22",
"remote_path": "/var/app/current/efs/",
"connect_timeout": 30,
"ftp_passive_mode": true,
"ssh_key_file": "C:/Path/To/KeyFile/ec2-access.ppk",
"remote_time_offset_in_hours": 10,
}
注: Elastic Beanstalk を使用しており、インスタンスが常にスピンアップおよびスピンダウンしているため、「ホスト」は変更される可能性があります。これまでのところ、EFS 上のファイルに簡単にアクセスする方法は見つかりませんでした。