Amazon ParallelCluster API - Amazon ParallelCluster
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

Amazon ParallelCluster API

是什么Amazon ParallelClusterAPI?

Amazon ParallelClusterAPI 是一款无服务器应用程序,曾经部署到Amazon Web Services 账户将允许以编程方式访问Amazon ParallelCluster通过 API 提供的功能。

Amazon ParallelClusterAPI 作为自包含式发布Amazon CloudFormation模板主要由 Amazon API Gateway 终端节点组成,该终端节点可以显示Amazon ParallelCluster功能和Amazon Lambda函数,负责执行调用的功能。

下图显示了一个高级架构图Amazon ParallelClusterAPI 基础设施。 

Amazon ParallelClusterAPI 文档

OpenAPI 规范文件描述Amazon ParallelClusterAPI 可以从以下地址下载:

https://<REGION>-aws-parallelcluster.s3.<REGION>.amazonaws.com/parallelcluster/<VERSION>/api/ParallelCluster.openapi.yaml

从 OpenAPI 规范文件开始,您可以为Amazon ParallelClusterAPI 通过使用众多可用工具之一,例如Swagger UI要么雷多克.

如何部署Amazon ParallelClusterAPI

要部署Amazon ParallelCluster你需要成为管理员的 APIAmazon Web Services 账户.

用于部署 API 的模板可在以下 URL 中找到:

https://<REGION>-aws-parallelcluster.s3.<REGION>.amazonaws.com/parallelcluster/<VERSION>/api/parallelcluster-api.yaml

哪里<REGION>是Amazon Web Services 区域API 需要部署到的地方和<VERSION>是Amazon ParallelCluster版本(例如 3.1.2)。

用于部署Amazon Lambda函数实现Amazon ParallelCluster功能可在以下位置获得:https://gallery.ecr.aws/parallelcluster/pcluster-api

警告

中的任何用户Amazon Web Services 账户,它有权访问Amazon Lambda或者 Amazon API Gateway 服务,将自动继承管理权限Amazon ParallelClusterAPI 资源。

使用部署Amazon CLI

配置Amazon如果尚未完成,将与 CLI 一起使用的凭据。

aws configure

运行以下命令以部署 API

REGION=<region> API_STACK_NAME=<stack-name>  # This can be any name VERSION=3.1.2 aws cloudformation create-stack \     --region ${REGION} \     --stack-name ${API_STACK_NAME} \     --template-url https://${REGION}-aws-parallelcluster.s3.${REGION}.amazonaws.com/parallelcluster/${VERSION}/api/parallelcluster-api.yaml \     --capabilities CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND aws cloudformation wait stack-create-complete --stack-name ${API_STACK_NAME} --region ${REGION}

自定义您的部署

API 部署可以通过使用Amazon CloudFormation模板公开的参数。要在通过 CLI 进行部署时配置参数的值,可以使用以下选项:--parameters ParameterKey=KeyName,ParameterValue=Value.

下面记录的参数均为可选参数。

  • 区域-该Region参数可用于确定 API 是否能够控制所有资源Amazon Web Services 区域(默认)或者在单个Amazon Web Services 区域. 为了限制访问,请将此值设置为 API 部署到的区域。

  • ParallelClusterFunctionRole-这将覆盖分配给Amazon Lambda函数实现Amazon ParallelCluster功能。该参数接受 IAM 角色的 ARN。这样的角色需要配置为Amazon Lambda作为 IAM 委托人。

  • CustomDomain姓名,CustomDomain证书,CustomDomainHostedZoneId-这些参数允许为 Amazon API Gateway 终端节点设置自定义域。CustomDomainName是要使用的域名,CustomDomainCertificate是的 ARNAmazon此域名的托管证书和CustomDomainHostedZoneId是您要在其中创建记录的 Route 53 托管区域的 ID。

  • EnableIamAdminAccess-默认情况下Amazon Lambda函数执行Amazon ParallelClusterAPI 操作配置了 IAM 角色,该角色可以阻止任何特权的 IAM 访问 (EnableIamAdminAccess=false)。这使得 API 无法执行需要创建 IAM 角色或策略的操作。因此,只有在作为资源配置的一部分提供 IAM 角色作为输入时,才能成功创建群集或自定义映像。

    何时EnableIamAdminAccess设置为true这Amazon ParallelClusterAPI 被授予管理部署集群或生成自定义 AMI 所需的 IAM 角色的创建权限。

    警告

    将此设置为 true 授予 IAM 管理员权限Amazon Lambda函数执行Amazon ParallelCluster运算。

    请参阅用于管理 IAM 资源的用户策略了解有关启用此模式时可以解锁的功能的其他详细信息。

  • PermissionsBoundary策略-此参数接受 IAM 策略的 ARN,并且只能在以下情况下使用EnableIamAdminAccess设置为true. 指定 IAM 策略后,向 API 授予的 IAM 权限Amazon Lambda函数有条件地限制在给定权限边界的使用范围内。

    请参阅PermissionsBoundary模式有关此模式施加的限制的更多详细信息。

  • CreateApiUserRole-默认情况下,部署Amazon ParallelClusterAPI 包括创建 IAM 角色,该角色被设置为唯一被授权调用 API 的角色。 实际上,Amazon API Gateway 终端节点配置了基于资源的策略,以便仅向创建的用户授予调用权限。 要解除这样的限制集CreateApiUserRole=false然后向选定的 IAM 用户授予对 API 的访问权限。有关更多信息,请参阅 。针对调用 API 的访问控制中的Amazon API Gateway 开发人员指南.

    警告

    何时CreateApiUserRole=true对 API 终端节点的访问不受 Amazon API Gateway 资源策略的限制,所有 IAM 角色都不受约束execute-api:Invoke权限将能够访问Amazon ParallelCluster功能。有关更多信息,请参阅 。使用 API Gateway 资源策略控制对 API 的访问中的API Gateway 开发人员指南.

    警告

    这些区域有:ParallelClusterApiUserRole有权调用所有Amazon ParallelClusterAPI 操作。要限定 API 资源子集的访问,请参阅控制谁可以使用 IAM 策略调用 API Gateway API 方法中的API Gateway 开发人员指南.

更新 API

使用案例 1:升级到较新版本Amazon ParallelCluster版本

选项 1:通过删除相应的 API 来删除现有的 APIAmazon CloudFormation堆叠和部署新 API,如上所示。

选项 2:通过运行以下说明更新现有 API:

REGION=<region> API_STACK_NAME=<stack-name>  # This needs to correspond to the existing API stack name VERSION=3.1.2 aws cloudformation update-stack \     --region ${REGION} \     --stack-name ${API_STACK_NAME} \       --template-url https://${REGION}-aws-parallelcluster.s3.${REGION}.amazonaws.com/parallelcluster/${VERSION}/api/parallelcluster-api.yaml \     --capabilities CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND aws cloudformation wait stack-update-complete --stack-name ${API_STACK_NAME} --region ${REGION}

使用案例 2:将 API 更新为已部署的最新可用 Docker 映像版本Amazon ParallelCluster版本

Amazon ParallelCluster可以定期为 API 部署刷新的 Docker 镜像Amazon Lambda包含更新和修补的依赖关系的函数。此类刷新后的图像不包括对给定功能的任何更改Amazon ParallelCluster版本。要将最新的 Docker 镜像用于已部署版本的 API,您可以运行以下说明:

REGION=<region> API_STACK_NAME=<stack-name> DOCKER_UPDATE_IMAGE_PIPELINE=$(aws cloudformation describe-stacks --region ${REGION} --stack-name ${API_STACK_NAME} --query "Stacks[0].Outputs[?OutputKey=='ParallelClusterDockerUpdateImagePipeline'].OutputValue" --output text) aws imagebuilder start-image-pipeline-execution --region ${REGION} --image-pipeline-arn ${DOCKER_UPDATE_IMAGE_PIPELINE}

这会触发 EC2 Image Builder 管道的构建,该管道负责获取最新的可用Amazon ParallelCluster部署 API 版本的 Docker 镜像。

调用Amazon ParallelClusterAPI

这些区域有:Amazon ParallelClusterAmazon API Gateway 终端节点配置了AWS_IAM授权类型,因此要求所有请求都必须使用有效的 IAM 证书进行 Sigv4 签名 (API 参考:发出 http 请求)。

使用默认设置部署时,API 调用权限仅授予使用 API 创建的默认 IAM 用户。

要检索此类用户的 ARN,请运行:

REGION=<region> API_STACK_NAME=<stack-name> aws cloudformation describe-stacks --region ${REGION} --stack-name ${API_STACK_NAME} --query "Stacks[0].Outputs[?OutputKey=='ParallelClusterApiUserRole'].OutputValue" --output text

通过致电即可获得此类用户的临时证书STSAssumeRole.

这些区域有:Amazon ParallelCluster可以使用以下命令获取 API 终端节点:

REGION=<region> API_STACK_NAME=<stack-name> aws cloudformation describe-stacks --region ${REGION} --stack-name ${API_STACK_NAME} --query "Stacks[0].Outputs[?OutputKey=='ParallelClusterApiInvokeUrl'].OutputValue" --output text

这些区域有:Amazon ParallelCluster任何符合 OpenAPI 规范的 HTTP 客户端都可以调用 API,可以在这里找到:

https://<REGION>-aws-parallelcluster.s3.<REGION>.amazonaws.com/parallelcluster/<VERSION>/api/ParallelCluster.openapi.yaml

请求需要根据记录进行 Sigv4 签名这里.

目前我们不提供任何官方 API 客户端实施。但是,API 客户端可以通过使用OpenAPI 生成器. 生成客户端后,如果没有开箱即用,则需要添加 Sigv4 签名。

有关 Python API 客户端的参考实现,可在Amazon ParallelCluster知识库.

要实施更高级的访问控制机制,例如 Amazon Cognito 或 Lambda 授权者,或使用进一步保护 APIAmazon WAF或者 API 密钥请按照Amazon API Gateway 文档.

警告

获得授权调用的 IAM 用户Amazon ParallelClusterAPI 将能够间接控制所有Amazon管理的资源Amazon ParallelCluster中的Amazon Web Services 账户. 这包括创建Amazon由于对用户 IAM 策略的限制,IAM 用户无法直接控制的资源。例如,创建Amazon ParallelCluster集群的配置可能包括 Amazon EC2 实例、Amazon Route 53、Amazon Amazon Elastic File System 统、Amazon FSx 文件系统、IAM 角色以及其他资源的部署Amazon Web Services使用者使用Amazon ParallelClusterIAM 用户可能无法直接控制权。

警告

使用创建集群时AdditionalIamPolicies在配置中指定,其他策略必须与以下模式之一匹配:

- !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/parallelcluster* - !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/parallelcluster/* - !Sub arn:${AWS::Partition}:iam::aws:policy/CloudWatchAgentServerPolicy - !Sub arn:${AWS::Partition}:iam::aws:policy/AmazonSSMManagedInstanceCore - !Sub arn:${AWS::Partition}:iam::aws:policy/AWSBatchFullAccess - !Sub arn:${AWS::Partition}:iam::aws:policy/AmazonS3ReadOnlyAccess - !Sub arn:${AWS::Partition}:iam::aws:policy/service-role/AWSBatchServiceRole - !Sub arn:${AWS::Partition}:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role - !Sub arn:${AWS::Partition}:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy - !Sub arn:${AWS::Partition}:iam::aws:policy/service-role/AmazonEC2SpotFleetTaggingRole - !Sub arn:${AWS::Partition}:iam::aws:policy/EC2InstanceProfileForImageBuilder - !Sub arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

如果您需要其他其他策略,您可以执行以下操作之一:

  • 编辑DefaultParallelClusterIamAdminPolicy在:

    https://<REGION>-aws-parallelcluster.s3.<REGION>.amazonaws.com/parallelcluster/<VERSION>/api/parallelcluster-api.yaml

    将策略添加到ArnLike/iam:PolicyARN部分。

  • 省略指定策略AdditionalIamPolicies在配置文件中,然后手动将策略添加到Amazon ParallelCluster在集群中创建的实例角色。

访问 API 日志和指标

API 日志已发布到亚马逊CloudWatch保留 30 天。检索LogGroup与 API 部署关联的名称运行以下命令:

REGION=<region> API_STACK_NAME=<stack-name> aws cloudformation describe-stacks --region ${REGION} --stack-name ${API_STACK_NAME} --query "Stacks[0].Outputs[?OutputKey=='ParallelClusterLambdaLogGroup'].OutputValue" --output text

Lambda 指标、日志和Amazon X-Ray也可以通过 Lambda 控制台访问跟踪日志。要检索与 API 部署关联的 Lambda 函数的 ARN,请运行以下命令:

REGION=<region> API_STACK_NAME=<stack-name> aws cloudformation describe-stacks --region ${REGION} --stack-name ${API_STACK_NAME} --query "Stacks[0].Outputs[?OutputKey=='ParallelClusterLambdaArn'].OutputValue" --output text