构建自定义 AWS ParallelCluster AMI - AWS ParallelCluster

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

构建自定义 AWS ParallelCluster AMI

使用AWS ParallelCluster命令行接口 (CLI) 或 API 时,您只需为创建或更新AWS ParallelCluster映像和集群时创建的AWS资源付费。有关更多信息,请参阅AWS使用的服务AWS ParallelCluster

AWS ParallelCluster用户界面建立在无服务器架构上,在大多数情况下,您可以在AWS免费套餐类别中使用它。有关更多信息,请参阅AWS ParallelCluster用户界面成本

重要

如果您构建自定义 AMI,则必须在每个新AWS ParallelCluster版本中重复创建自定义 AMI 时使用的步骤。

在进一步阅读之前,我们建议您首先阅读本自定义引导操作节。确定futureAWS ParallelCluster 版本是否可以编写脚本并支持您想要进行的修改。

尽管构建自定义 AMI 通常并不理想,但在某些特定情况下,需要AWS ParallelCluster为其构建自定义 AMI。本教程介绍如何为这些场景构建自定义 AMI。

先决条件

如何自定义 AWS ParallelCluster AMI

构建自定义AWS ParallelCluster AMI 的方法有两种。这两种方法之一是使用 CLI 构建新的 AMAWS ParallelCluster I。另一种方法要求您进行手动修改,以构建您的下方可用的新 AMIAWS 账户。

构建自定义AWS ParallelCluster AMI

如果您有自定义 AMI 和软件,则可以在其AWS ParallelCluster上应用所需的更改。 AWS ParallelCluster依靠 EC2 Image Builder 服务来构建自定义 AMI。有关更多信息,请参阅 Image Builder 用户指南中的一部分

  • 该过程可能需要大约 1 小时。如果在构建时还需要安装其他 Build/Components,则此时间可能会有所不同。

  • AMI 标有主要组件的版本。其中包括内核、调度程序和 EFA 驱动程序。AMI 描述中还报告了组件版本的子集。

  • 从AWS ParallelCluster 3.0.0 开始,可以使用一组新的 CLI 命令来管理映像的生命周期。这包括build-imagelist-imagesdescribe-image、和delete-image

  • 这种方法是可重复的。您可以重新运行它以保持 AMI 更新(例如,操作系统更新),然后在更新现有集群时使用它们。

注意

如果您AWS在中国分区中使用此方法,则可能会出现网络错误。例如,当pcluster build-image命令从操作系统存储库下载软件包 GitHub 或从操作系统存储库下载软件包时,您可能会看到这些错误。如果发生这种情况,我们建议使用以下替代方法之一:

  1. 遵循绕过此命令修改 AWS ParallelCluster AMI的方法。

  2. 在另一个分区和区域(例如)中构建映像us-east-1,然后将其存储恢复以将其移至中国区域。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的使用 S3 存储和恢复 AMI

步骤:

  1. 配置您的AWS 账户证书,以便AWS ParallelCluster客户端可以代表您调用AWS API 操作。有关所需权限的列表,请参阅AWS Identity and Access ManagementAWS ParallelCluster3.x 中的权限

  2. 创建基本的构建映像配置文件。要执行此操作,InstanceType请指定用于生成映像和ParentImage。它们用作创建 AMI 的起点。有关可选编译参数的更多信息,请参阅映像配置

    Build: InstanceType: <BUILD_INSTANCE_TYPE> ParentImage: <BASE_AMI_ID>
  3. 使用 CLI 命令pcluster build-image从您作为基础提供的 AMI 开始构建 AMI。AWS ParallelCluster

    $ pcluster build-image --image-id IMAGE_ID --image-configuration IMAGE_CONFIG.yaml --region REGION { "image": { "imageId": "IMAGE_ID", "imageBuildStatus": "BUILD_IN_PROGRESS", "cloudformationStackStatus": "CREATE_IN_PROGRESS", "cloudformationStackArn": "arn:aws:cloudformation:us-east-1:123456789012:stack/IMAGE_ID/abcd1234-ef56-gh78-ij90-1234abcd5678", "region": "us-east-1", "version": "3.5.1" } }
    警告

    pcluster build-image使用默认 VPC。如果您使用AWS Control Tower或AWS着陆区删除默认 VPC,则必须在映像配置文件中指定子网 ID。有关更多信息,请参阅SubnetId

    有关其他参数的列表,请参阅pcluster build-image命令参考页面。前面的命令的结果如下所示:

    • 堆 CloudFormation 栈是根据映像配置创建的。该堆栈包含构建所需的所有 EC2 Image Builder 资源。

    • 创建的资源包括可以向其添加自定义Image BuilAWS ParallelCluster der 器组件的官方镜像生成器组件。要了解如何创建自定义组件,请参阅面向公共部门客户的 HPC 研讨会中的自定义 AMI 示例

    • EC2 Image Builder 启动构建实例、应用AWS ParallelCluster食谱、安装AWS ParallelCluster软件堆栈并执行必要的配置任务。AWS ParallelCluster这本食谱用于构建和引导AWS ParallelCluster。

    • 实例已停止,并从中创建新的 AMI。

    • 从新创建的 AMI 启动另一个实例。在测试阶段,EC2 Image Builder 会运行在 Image Builder 组件中定义的测试。

    • 如果构建成功,则会删除堆栈。如果构建失败,则会保留堆栈并可供检查。

  4. 您可以通过运行以下命令来监控生成过程的状态。构建完成后,您可以运行它来检索响应中提供的 AMI ID。

    $ pcluster describe-image --image-id IMAGE_ID --region REGION # BEFORE COMPLETE { "imageConfiguration": { "url": "https://parallelcluster-1234abcd5678efgh-v1-do-not-delete.s3.amazonaws.com/parallelcluster/3.5.1/images/IMAGE_ID-abcd1234efgh5678/configs/image-config.yaml?...", }, "imageId": "IMAGE_ID", "imagebuilderImageStatus": "BUILDING", "imageBuildStatus": "BUILD_IN_PROGRESS", "cloudformationStackStatus": "CREATE_IN_PROGRESS", "cloudformationStackArn": "arn:aws:cloudformation:us-east-1:123456789012:stack/IMAGE_ID/abcd1234-ef56-gh78-ij90-1234abcd5678", "region": "us-east-1", "version": "3.5.1", "cloudformationStackTags": [ { "value": "3.5.1", "key": "parallelcluster:version" }, { "value": "IMAGE_ID", "key": "parallelcluster:image_name" }, ... ], "imageBuildLogsArn": "arn:aws:logs:us-east-1:123456789012:log-group:/aws/imagebuilder/ParallelClusterImage-IMAGE_ID", "cloudformationStackCreationTime": "2022-04-05T21:36:26.176Z" } # AFTER COMPLETE { "imageConfiguration": { "url": "https://parallelcluster-1234abcd5678efgh-v1-do-not-delete.s3.us-east-1.amazonaws.com/parallelcluster/3.5.1/images/IMAGE_ID-abcd1234efgh5678/configs/image-config.yaml?Signature=..." }, "imageId": "IMAGE_ID", "imageBuildStatus": "BUILD_COMPLETE", "region": "us-east-1", "ec2AmiInfo": { "amiName": "IMAGE_ID 2022-04-05T21-39-24.020Z", "amiId": "ami-1234stuv5678wxyz", "description": "AWS ParallelCluster AMI for alinux2, kernel-4.14.238-182.422.amzn2.x86_64, lustre-2.10.8-5.amzn2.x86_64, efa-1.13.0-1.amzn2.x86_64, dcv-2021.1.10598-1.el7.x86_64, slurm-20-11-8-1", "state": "AVAILABLE", "tags": [ { "value": "2021.3.11591-1.el7.x86_64", "key": "parallelcluster:dcv_version" }, ... ], "architecture": "x86_64" }, "version": "3.5.1" }
  5. 要创建集群,请在集群配置的CustomAmi字段中输入 AMI ID。

对 AMI 创建过程进行故障排除和监控

图像创建将在大约一个小时后完成。您可以通过运行pcluster describe-image命令或日志检索命令来监视进程。

$ pcluster describe-image --image-id IMAGE_ID --region REGION

build-image命令创建一个包含构建映像所需的所有 EC2 资源的 CloudFormation 堆栈,并启动 EC2 Image Builder 进程。

运行build-image命令后,可以使用来检索 CloudFormation 堆栈事件pcluster get-image-stack-events。您可以使用--query参数筛选结果以查看最新事件。有关更多信息,请参阅AWS Command Line Interface用户指南中的筛选AWS CLI输出

$ pcluster get-image-stack-events --image-id IMAGE_ID --region REGION --query "events[0]" { "eventId": "ParallelClusterImage-CREATE_IN_PROGRESS-2022-04-05T21:39:24.725Z", "physicalResourceId": "arn:aws:imagebuilder:us-east-1:123456789012:image/parallelclusterimage-IMAGE_ID/3.5.1/1", "resourceStatus": "CREATE_IN_PROGRESS", "resourceStatusReason": "Resource creation Initiated", "resourceProperties": "{\"InfrastructureConfigurationArn\":\"arn:aws:imagebuilder:us-east-1:123456789012:infrastructure-configuration/parallelclusterimage-abcd1234-ef56-gh78-ij90-1234abcd5678\",\"ImageRecipeArn\":\"arn:aws:imagebuilder:us-east-1:123456789012:image-recipe/parallelclusterimage-IMAGE_ID/3.5.1\",\"DistributionConfigurationArn\":\"arn:aws:imagebuilder:us-east-1:123456789012:distribution-configuration/parallelclusterimage-abcd1234-ef56-gh78-ij90-1234abcd5678\",\"Tags\":{\"parallelcluster:image_name\":\"IMAGE_ID\",\"parallelcluster:image_id\":\"IMAGE_ID\"}}", "stackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/IMAGE_ID/abcd1234-ef56-gh78-ij90-1234abcd5678", "stackName": "IMAGE_ID", "logicalResourceId": "ParallelClusterImage", "resourceType": "AWS::ImageBuilder::Image", "timestamp": "2022-04-05T21:39:24.725Z" }

大约 15 分钟后,堆栈事件出现在与 Image Builder 创建相关的日志事件条目中。现在,您可以使用pcluster list-image-log-streamspcluster get-image-log-events命令列出图像日志流并监视 Image Builder 步骤。

$ pcluster list-image-log-streams --image-id IMAGE_ID --region REGION \ --query 'logStreams[*].logStreamName' "3.5.1/1" ] $ pcluster get-image-log-events --image-id IMAGE_ID --region REGION \ --log-stream-name 3.5.1/1 --limit 3 { "nextToken": "f/36295977202298886557255241372854078762600452615936671762", "prevToken": "b/36295977196879805474012299949460899222346900769983430672", "events": [ { "message": "ExecuteBash: FINISHED EXECUTION", "timestamp": "2022-04-05T22:13:26.633Z" }, { "message": "Document arn:aws:imagebuilder:us-east-1:123456789012:component/parallelclusterimage-test-abcd1234-ef56-gh78-ij90-1234abcd5678/3.5.1/1", "timestamp": "2022-04-05T22:13:26.741Z" }, { "message": "TOE has completed execution successfully", "timestamp": "2022-04-05T22:13:26.819Z" } ] }

继续检查该describe-image命令,直到看到BUILD_COMPLETE状态为止。

$ pcluster describe-image --image-id IMAGE_ID --region REGION { "imageConfiguration": { "url": "https://parallelcluster-1234abcd5678efgh-v1-do-not-delete.s3.us-east-1.amazonaws.com/parallelcluster/3.5.1/images/IMAGE_ID-abcd1234efgh5678/configs/image-config.yaml?Signature=..." }, "imageId": "IMAGE_ID", "imageBuildStatus": "BUILD_COMPLETE", "region": "us-east-1", "ec2AmiInfo": { "amiName": "IMAGE_ID 2022-04-05T21-39-24.020Z", "amiId": "ami-1234stuv5678wxyz", "description": "AWS ParallelCluster AMI for alinux2, kernel-4.14.238-182.422.amzn2.x86_64, lustre-2.10.8-5.amzn2.x86_64, efa-1.13.0-1.amzn2.x86_64, dcv-2021.1.10598-1.el7.x86_64, slurm-20-11-8-1", "state": "AVAILABLE", "tags": [ { "value": "2021.3.11591-1.el7.x86_64", "key": "parallelcluster:dcv_version" }, ... ], "architecture": "x86_64" }, "version": "3.5.1" }

如果您需要解决自定义 AMI 创建问题,请按照以下步骤中的说明创建图像日志存档。

可以将日志存档在 Amazon S3 存储桶或本地文件中,具体取决于--output参数。

$ pcluster export-image-logs --image-id IMAGE_ID --region REGION \ --bucket BUCKET_NAME --bucket-prefix BUCKET_FOLDER { "url": "https://BUCKET_NAME.s3.us-east-1.amazonaws.com/BUCKET-FOLDER/IMAGE_ID-logs-202209071136.tar.gz?AWSAccessKeyId=..." } $ pcluster export-image-logs --image-id IMAGE_ID \ --region REGION --bucket BUCKET_NAME --bucket-prefix BUCKET_FOLDER --output-file /tmp/archive.tar.gz { "path": "/tmp/archive.tar.gz" }

该档案包含与 Image Builder 进程和AWS CloudFormation堆栈事件相关的 CloudWatch 日志流。该命令可能需要几分钟才能运行完毕。

管理自定义 AMI

从AWS ParallelCluster 3.0.0 开始,在 CLI 中添加了一组新的命令来构建、监控和管理映像生命周期。有关命令的更多信息,请参阅 pcluster 命令

修改 AWS ParallelCluster AMI

此方法包括通过在官方AWS ParallelCluster AMI 上添加自定义来修改官方 AMI。基本AWS ParallelCluster AMI 已使用新版本进行更新。这些 AMI 具有安装和配置AWS ParallelCluster时运行所需的所有组件。你可以从其中一个作为基础开始。

  • 此方法比build-image命令快。但是,这是一个手动过程,不能自动重复。

  • 使用此方法,您无权访问通过 CLI 提供的日志检索和图像生命周期管理命令。

步骤:

New EC2 console
  1. 找到与您使用的特定 AMI 相对应AWS 区域的 AMI。要找到它,请使用带有--region参数的pcluster list-official-images命令来选择特定的AWS 区域和--os和和--architecture参数,以筛选所需的 AMI 以及要使用的操作系统和架构。从输出中检索 EC2 镜像 ID。

  2. 登录到 AWS Management Console 并打开 Amazon EC2 控制台(https://console.aws.amazon.com/ec2/)。

  3. 在导航窗格中,选择图像,然后选择 AMI。搜索检索到的 EC2 映像 ID,选择 AMI,然后选择从 AMI 启动实例

  4. 向下滚动并选择您的实例类型

  5. 选择您的密钥对启动实例

  6. 使用操作系统用户和SSH密钥登录您的实例。

  7. 手动自定义实例以满足您的要求。

  8. 运行以下命令,为实例的创建 AMI 做好准备。

    sudo /usr/local/sbin/ami_cleanup.sh
  9. 在控制台中,选择实例状态停止实例

    导航到实例,选择新实例,选择实例状态停止实例

  10. 使用 EC2 控制台或创建AWS CLI映像,从实例创建新 AMI。

    从 EC2 控制台
    1. 在导航窗格中选择 Instances(实例)。

    2. 选择您创建和修改的实例。

    3. 操作中,选择图像,然后选择创建图像

    4. 选择 Create Image

  11. 在集群配置的CustomAmi字段中输入新的 AMI ID 并创建集群。

Old EC2 console
  1. 找到与您使用的特定AWS ParallelCluster AMI 相对应AWS 区域的 AMI。要找到它,您可以使用带有--region参数的pcluster list-official-images命令来选择特定的AWS 区域和--os--architecture参数,以筛选所需的 AMI 以及要使用的操作系统和架构。您可以从输出中检索 EC2 镜像 ID。

  2. 登录到 AWS Management Console 并打开 Amazon EC2 控制台(https://console.aws.amazon.com/ec2/)。

  3. 在导航窗格中,选择图像,然后选择 AMI。为公共映像设置过滤器并搜索检索到的 EC2 映像 ID,选择 AMI,然后选择 Launch

  4. 选择您的实例类型,然后选择下一步:配置实例详细信息查看并启动以启动您的实例。

  5. 选择 Launch,选择您的密钥对,然后启动实例

  6. 使用操作系统用户和您的 SSH 密钥登录您的实例。有关更多信息,请导航到实例,选择新实例并 Connect

  7. 手动自定义实例以满足您的要求。

  8. 运行以下命令以准备实例来创建 AMI:

    sudo /usr/local/sbin/ami_cleanup.sh
  9. 在 EC2 控制台中,选择导航窗格中的实例,选择您的新实例,然后选择操作实例状态停止

  10. 使用 EC2 控制台或创建AWS CLI映像,从实例创建新 AMI。

    从 EC2 控制台
    1. 在导航窗格中选择 Instances(实例)。

    2. 选择您创建和修改的实例。

    3. 操作中,选择图像,然后选择创建图像

    4. 选择 Create Image

  11. 在集群配置的CustomAmi字段中输入新的 AMI ID 并创建集群。