AWS 提供的遠端無伺服器的檔案儲存服務,可讓 AWS 服務共享其檔案內容。以下會先準備一台 EC2
EC2 安裝 efs util
sudo apt-get update -y
sudo apt-get -y install git binutils rustc cargo pkg-config libssl-dev
git clone https://github.com/aws/efs-utils
cd efs-utils
./build-deb.sh
sudo apt-get -y install ./build/amazon-efs-utils*deb
安裝完成後檢查系統是否有 mount.efs 指令
參考資源:
創建 EFS
設定 EFS FileSystem 名稱, 並且選擇 VPC
創建 access point
點進上面建立的 FileSystem 後創建 access point
創建完 access point , 擁有的節點就是看 VPC 有幾個 public subnet, 我們這邊只設定 access point 的名稱,其他的值都先使用預設值
假如想看有哪些節點的話可以點選 network 查看
手動掛載 EFS
點選 Attach 指令會寫是可以使用的指令,看是要使用 dns name 還是 ip 掛載。
EC2 自動掛載 EFS
在 /etc/fstab 進行以下的編輯
file-system-id:/ efs-mount-point efs _netdev,noresvport,tls,iam,accesspoint=access-point-id 0 0
檢查是否可以正常掛載 EFS
sudo mount -fav
會發現會噴錯誤,說沒有設定 access key 跟 secret key
所以我們這邊還需要再設定 aws-cli
安裝 aws command line
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
在設定 aws command line 之前我們要創建一個 IAM User 且記得設定以下 Policy
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"elasticfilesystem:ClientMount",
"elasticfilesystem:ClientWrite",
"elasticfilesystem:ClientRootAccess"
],
"Resource": "*"
}
]
}
設定 aws command line
aws configure
以上設定也要使用 sudo 設定,因為下面的指令是使用 sudo 去做檢查。
都設定完之後再使用以下指令會發現已可以成功掛載
sudo mount -fav
機器重新啟動確認一下 EFS 是否會重新掛載
創建多個 access point
先將 EFS Filesystem root path 掛載至 /efs 路徑底下
注意: 要先在 EC2 的 / path 創建 efs 資料夾才能進行此操作
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport <EFS DNS>:/ /efs
然後倘若想要掛載多個路徑的節點,需在 /efs 建立相對應的資料夾,否作會因為 EFS 內部沒有此資料夾而導致掛載失敗。
例如到時想要掛載 EFS 的 /config 資料夾
# 進入 efs root path
cd /efs
# 在 efs 裡面新增 config 資料夾
sudo mkdir config
為了測試到時是否有只掛載 config 資料夾近來,所以載 ec2 也建立一個 config 資料夾
# 在根目錄建立 config 資料夾
sudo mkdir -p /config
點選新增 access point
其他的值都可以為預設但是路徑這邊請輸入 /config
點進新增完成的 access point , 並點選 attach
進行掛載 access point
sudo mount -t efs -o tls,accesspoint=<access point id> <file system id>:/ /config
掛載完成後即可透過 df -h 查看是否掛載完畢。
EFS 生命週期設定
EFS 地區搬移
假如要資料搬移的話可以使用 AWS DataSync 服務將資料傳遞至其他位置或者是帳號
請先依照 AWS 官網新增一個 IAM Role 給 DataSync
必須設定的 Policy 如下
trust policy
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {
"Service": "datasync.amazonaws.com"
},
"Action": "sts:AssumeRole"
}]
}
EFS 權限
備註: 以下的 Policy 為官網的範本
{
"Version": "2012-10-17",
"Id": "ExampleEFSFileSystemPolicy",
"Statement": [{
"Sid": "AccessEFSFileSystem",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/MyDataSyncRole"
},
"Action": [
"elasticfilesystem:ClientMount",
"elasticfilesystem:ClientWrite",
"elasticfilesystem:ClientRootAccess"
],
"Resource": "arn:aws:elasticfilesystem:us-east-1:111122223333:file-system/fs-1234567890abcdef0"
}]
}
設定來源的 DataSync Location
選擇 EFS
選擇我們前面建立的 access point
相對的也要在目的地建立 EFS 以及 DataSync, 之後則在來源設定 DataSync Task。
創建好 Task 去執行 Task 即可將資料傳遞至目的地位置。
不同區的 EFS 掛載至某一區的 EC2, 需設定 VPC Peering