AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
如何在受管運算環境中將 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 任務。
相關內容
已提問 4 年前
已提問 2 年前
