Хостинг веб-сайтов на AWS EFS
Я знаю, что могу разместить статический веб-сайт на S3, но можно ли это сделать с помощью AWS EFS? Это даже рекомендуется?
3 ответа
EFS - это эластичная файловая система. По сути, EFS - это том, который может быть присоединен к нескольким экземплярам и очень полезен в случае автоматического масштабирования.
Но основная функция EFS - это объем, поэтому вы, конечно, можете разместить сайт на экземпляре EC2, используя EFS в качестве тома. Проблема связана с ценами, так как EFS стоит дороже, чем EBS.
Кроме того, размещение статического веб-сайта на S3 легко, так как вам нужно просто загрузить файлы в корзину. В случае EFS вам понадобится экземпляр EC2, а затем вы подключите EFS к экземпляру EC2, а затем настроите веб-сервер для веб-сайта и затем будете обслуживать веб-сайт. Так что это слишком много работы для размещения статического сайта с использованием EFS.
Поэтому я буду рекомендовать S3.
Это можно сделать, но я бы не рекомендовал это из-за цены и производительности. EFS в настоящее время составляет $0,30 / ГБ, а S3 - $0,03 / ГБ в месяц. Кроме того, для обслуживания из EFS требуется один или несколько работающих экземпляров EC2. Я не знаю ни одного теста, но я полностью ожидаю, что S3 также предложит лучшую производительность, так как S3 автоматически масштабируется.
У меня есть эта настройка в настоящее время, используя Elastic Beanstalk. Все, что у меня есть, это папка.ebextensions с двумя скриптами:
- 01-размонтировать-efs.config
- 02-крепление-efs.config
01-размонтировать-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
Вы также можете настроить FTP-доступ к EFS, пройдя через экземпляр EC2:
- создать и загрузить файл ключа: 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.