如何在受管運算環境中將 Amazon EFS 磁碟區掛載到 AWS Batch?
我想在 AWS Batch 中掛載 Amazon Elastic File System (Amazon EFS) 磁碟區。如何在不建立自訂 Amazon Machine Image (AMI) 的情況下在受管運算環境中執行此操作?
簡短描述
**注意:**AWS Batch 現在支援將 EFS 磁碟區直接掛載到建立的容器,作為任務定義的一部分。這是比本文中提到的解決方法更簡單的方法。如需詳細資訊,請參閱在任務定義中指定 Amazon EFS 檔案系統和容器屬性中的 efsVolumeConfiguration 參數。
使用啟動範本將 Amazon EFS 磁碟區掛載到 EC2 執行個體,然後掛載到容器。這也可讓您透過 AWS Batch 將 EFS 磁碟區掛載到容器,而無需建立自訂 AMI。
**重要事項:**建立 Amazon EFS 磁碟區時,請使用指派給運算環境的相同 Amazon Virtual Private Cloud (Amazon VPC) 和子網路。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請確認您使用的是最新的 AWS CLI 版本。
2. 記下檔案系統 ID (例如:fs-12345678)。您需要檔案系統 ID 才能執行啟動範本。
3. 建立啟動範本,其中包含使用者資料區段,並使用 MIME 分段檔案格式。如需詳細資訊,請參閱 Cloud-init 網站上的 Mime 分段封存。
MIME 分段檔案範例
**注意:**下面的 MIME 分段檔案範例會設定運算資源來安裝 amazon-efs-utils 套件。然後,檔案會在 /mnt/efs 掛載現有的 Amazon EFS 檔案系統。
MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/cloud-config; charset="us-ascii" packages: - amazon-efs-utils runcmd: - file_system_id_01=fs-12345678 - efs_directory=/mnt/efs - mkdir -p ${efs_directory} - echo "${file_system_id_01}:/ ${efs_directory} efs tls,_netdev" >> /etc/fstab - mount -a -t efs defaults --==MYBOUNDARY==--
**重要事項:**使用您的檔案系統 ID 取代 fs-12345678。
4. 建立名為 mount-efs.json 的檔案。
**注意:**根據需要調整磁碟區的大小。
Amazon Linux 2 啟動範本範例
{ "LaunchTemplateName": "user-data", "LaunchTemplateData": { "BlockDeviceMappings": [ { "Ebs": { "DeleteOnTermination": true, "VolumeSize": 30, "VolumeType": "gp2" }, "DeviceName": "/dev/xvda" } ], "UserData": "TUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PU1ZQk9VTkRBUlk9PSIKCi0tPT1NWUJPVU5EQVJZPT0KQ29udGVudC1UeXBlOiB0ZXh0L2Nsb3VkLWNvbmZpZzsgY2hhcnNldD0idXMtYXNjaWkiCgpwYWNrYWdlczoKLSBhbWF6b24tZWZzLXV0aWxzCgpydW5jbWQ6Ci0gZmlsZV9zeXN0ZW1faWRfMDE9ZnMtODc0MTc4MDYgICAgIAotIGVmc19kaXJlY3Rvcnk9L21udC9lZnMKCi0gbWtkaXIgLXAgJHtlZnNfZGlyZWN0b3J5fQotIGVjaG8gIiR7ZmlsZV9zeXN0ZW1faWRfMDF9Oi8gJHtlZnNfZGlyZWN0b3J5fSBlZnMgdGxzLF9uZXRkZXYiID4+IC9ldGMvZnN0YWIKLSBtb3VudCAtYSAtdCBlZnMgZGVmYXVsdHMKCi0tPT1NWUJPVU5EQVJZPT0tLQ==" } }
Amazon Linux 1 啟動範本範例
{ "LaunchTemplateName": "userdata", "LaunchTemplateData": { "BlockDeviceMappings": [ { "Ebs": { "DeleteOnTermination": true, "VolumeSize": 8, "VolumeType": "gp2" }, "DeviceName": "/dev/xvda" }, { "Ebs": { "DeleteOnTermination": true, "VolumeSize": 22, "VolumeType": "gp2" }, "DeviceName": "/dev/xvdcz" } ], "UserData": "TUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PU1ZQk9VTkRBUlk9PSIKCi0tPT1NWUJPVU5EQVJZPT0KQ29udGVudC1UeXBlOiB0ZXh0L2Nsb3VkLWNvbmZpZzsgY2hhcnNldD0idXMtYXNjaWkiCgpwYWNrYWdlczoKLSBhbWF6b24tZWZzLXV0aWxzCgpydW5jbWQ6Ci0gZmlsZV9zeXN0ZW1faWRfMDE9ZnMtODc0MTc4MDYgICAgIAotIGVmc19kaXJlY3Rvcnk9L21udC9lZnMKCi0gbWtkaXIgLXAgJHtlZnNfZGlyZWN0b3J5fQotIGVjaG8gIiR7ZmlsZV9zeXN0ZW1faWRfMDF9Oi8gJHtlZnNfZGlyZWN0b3J5fSBlZnMgdGxzLF9uZXRkZXYiID4+IC9ldGMvZnN0YWIKLSBtb3VudCAtYSAtdCBlZnMgZGVmYXVsdHMKCi0tPT1NWUJPVU5EQVJZPT0tLQ==" } }
**重要事項:**如果您將使用者資料新增至 Amazon Elastic Compute Cloud (Amazon EC2) 主控台中的啟動範本,請確保執行下列其中一項操作:
以純文字格式貼上使用者資料。
-或-
從檔案上傳使用者資料。
如果您使用 AWS CLI 或 AWS SDK,則必須先對使用者資料進行 base64 編碼。然後,在調用 CreateLaunchTemplate 時,將該字串提交為 UserData 參數的值,如 JSON 範本範例所示。
5. 執行下列 AWS CLI 命令,根據在步驟 4 中建立的 mount-efs.json 檔案建立啟動範本:
aws ec2 --region us-east-1 create-launch-template --cli-input-json file://mount-efs.json
**注意:**使用您的 AWS 區域取代 us-east-1。
create-launch-template 命令輸出範例
{ "LaunchTemplate": { "LaunchTemplateId": "lt-06935eb650e40f886", "LaunchTemplateName": "user-data", "CreateTime": "2019-12-26T09:40:46.000Z", "CreatedBy": "arn:aws:iam::12345678999:user/alice", "DefaultVersionNumber": 1, "LatestVersionNumber": 1 } }
6. 建立新的運算環境,並將該環境與您的啟動範本建立關聯。
**注意:**當 AWS Batch 啟動執行個體時,Amazon EFS 磁碟區現已掛載到執行個體上。
7. 使用 SSH 連線至由 AWS Batch 啟動的執行個體,檢查 Amazon EFS 磁碟區是否隨著容器執行個體一起掛載。然後,執行下列 Linux df 命令:
$ df -h
df 命令輸出範例
Filesystem Size Used Avail Use% Mounted on devtmpfs 3.9G 92K 3.9G 1% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm /dev/xvda1 50G 854M 49G 2% / 127.0.0.1:/ 8.0E 0 8.0E 0% /mnt/efs
**注意:****/mnt/efs ** 會自動掛載。
8. 在 AWS Batch 中建立任務定義,其中包含磁碟區和掛載點。
AWS Batch 任務定義範例
{ "jobDefinitionName": "userdata", "jobDefinitionArn": "arn:aws:batch:us-east-1:12345678999:job-definition/userdata:1", "revision": 1, "status": "ACTIVE", "type": "container", "parameters": {}, "containerProperties": { "image": "busybox", "vcpus": 1, "memory": 1024, "command": [], "volumes": [ { "host": { "sourcePath": "/mnt/efs" }, "name": "efs" } ], "environment": [], "mountPoints": [ { "containerPath": "/mnt/efs", "sourceVolume": "efs" } ], "ulimits": [], "resourceRequirements": [] } }
9. 使用在步驟 8 中建立的任務定義提交 AWS Batch 任務。
相關內容
- 已提問 2 年前lg...
- 已提問 3 個月前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 7 個月前
- AWS 官方已更新 3 年前