ฉันทำสิ่งนี้มาไกลแล้วด้วยตัวฉันเอง ฉันติดอยู่สองสามประเด็น แต่นี่คือสิ่งที่ฉันมี:
ฉันสร้างไฟล์ชื่อ 01-mount-efs.config ในโฟลเดอร์ .ebextensions ในรูทของแอปที่มีเนื้อหาต่อไปนี้
##########################################################
Enter your EFS File System ID into EFS_VOLUME_ID and your mount point in EFS_MOUNT_DIR
##########################################################
option_settings:
- option_name: EFS_VOLUME_ID
value: fs-xxxxxxxx
- option_name: EFS_MOUNT_DIR
value: /var/www/html/efs
##########################################################
#### Do not touch below
##########################################################
- option_name: EFS_REGION
value: '`{"Ref": "AWS::Region"}`'
packages:
yum:
nfs-utils: []
jq: []
commands:
01_mount:
command: "/tmp/mount-efs.sh"
files:
"/tmp/mount-efs.sh":
mode: "000755"
content : |
#!/bin/bash
EFS_REGION=$(/opt/elasticbeanstalk/bin/get-config environment | jq -r '.EFS_REGION')
EFS_MOUNT_DIR=$(/opt/elasticbeanstalk/bin/get-config environment | jq -r '.EFS_MOUNT_DIR')
EFS_VOLUME_ID=$(/opt/elasticbeanstalk/bin/get-config environment | jq -r '.EFS_VOLUME_ID')
echo "Mounting EFS filesystem ${EFS_DNS_NAME} to directory ${EFS_MOUNT_DIR} ..."
echo "Region is ${EFS_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
AZ=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
echo "mount -t nfs4 -o nfsvers=4.1 ${AZ}.${EFS_VOLUME_ID}.efs.${EFS_REGION}.amazonaws.com:/ ${EFS_MOUNT_DIR}"
mount -t nfs4 -o nfsvers=4.1 ${AZ}.${EFS_VOLUME_ID}.efs.${EFS_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.'
สิ่งนี้จะเมาต์โวลุ่ม EFS ของคุณไปยังไดเร็กทอรีที่เรียกว่า 'efs' ภายในรูทของแอปของคุณ จากนั้นใน Elastic Beanstalk > การกำหนดค่า > การกำหนดค่าซอฟต์แวร์ คุณต้องตั้งค่ารูทเอกสารเป็น '/ efs'
นอกจากนี้ใน Elastic Beanstalk > การกำหนดค่า > อินสแตนซ์ คุณต้องเพิ่ม 'ค่าเริ่มต้น' ให้กับ 'กลุ่มความปลอดภัย EC2' ตรวจสอบให้แน่ใจว่าคุณปล่อยกลุ่มที่มีอยู่แล้วเพียงต่อท้าย ', ค่าเริ่มต้น' ต่อท้าย
สำหรับฉันการทำงานนี้เป็นครั้งแรกหรือเมื่อฉันเลือก 'สร้างสภาพแวดล้อมใหม่' อย่างไรก็ตาม การปรับใช้การอัปเดต ฉันได้รับข้อผิดพลาดเมื่ออินสแตนซ์พยายามสร้างและเรียกใช้:
mv /var/app/current /var/app/current.old
มันบอกว่า: ไดเรกทอรีไม่ว่างเปล่า
ฉันคิดว่ามันเป็นปัญหากับการเมานต์ไม่ยอมให้ลบ /var/app/current.old
หากคุณผ่านสิ่งนี้มา โปรดแจ้งให้เราทราบ ตอนนี้ฉันต้องสร้างใหม่ทุกครั้งที่ต้องการปรับใช้การอัปเดต