本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon ParallelCluster API
什么是Amazon ParallelCluster API?
Amazon ParallelClusterAPI 是一种无服务器应用程序,一旦部署到您的应用程序,Amazon Web Services 账户即可通过 API 以编程方式访问Amazon ParallelCluster功能。
Amazon ParallelClusterAPI 以独立Amazon CloudFormation模板的形式分发,主要由一个 Amazon API Gateway 终端节点(用于公开Amazon ParallelClusterAmazon Lambda功能)和一个函数(负责执行所调用的功能)组成。
下图显示了Amazon ParallelCluster API 基础设施的高级架构图。
Amazon ParallelClusterAPI 文档
描述 API 的 OpenAmazon ParallelCluster API 规范文件可以从以下地址下载:
https://
<REGION>
-aws-parallelcluster.s3.<REGION>
.amazonaws.com/parallelcluster/<VERSION>
/api/ParallelCluster.openapi.yaml
从 OpenAPI 规范文件开始,您可以使用诸如 Swagger UAmazon ParallelCluster I 或 Redoc 等众多可用工具之一为 API
如何部署Amazon ParallelCluster API
要部署Amazon ParallelCluster API,您需要成为的管理员Amazon Web Services 账户。
用于部署 API 的模板可在以下 URL 获得:
https://
<REGION>
-aws-parallelcluster.s3.<REGION>
.amazonaws.com/parallelcluster/<VERSION>
/api/parallelcluster-api.yaml
API 需要部署到Amazon Web Services 区域哪里,
是Amazon ParallelCluster版本(例如 3.5.0)。<VERSION>
<REGION>
用于部署Amazon Lambda函数实现Amazon ParallelCluster功能的 Docker
中的任何具有Amazon API Gateway 服务的特权访问权限的用户都会自动继承管理Amazon ParallelCluster API 资源的权限。Amazon Web Services 账户Amazon Lambda
使用以下方式部署Amazon CLI
如果尚未配置要在 CLI 中使用的Amazon证书,请配置。
$
aws configure
运行以下命令部署 API
$
REGION=
<region>
$
API_STACK_NAME=
# This can be any name<stack-name>
$
VERSION=3.5.0
$
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}
自定义您的部署
可以使用模板公开的Amazon CloudFormation参数自定义 API 部署。要在通过 CLI 部署时配置参数的值,可以使用以下选项:--parameters
ParameterKey=KeyName,ParameterValue=Value
。
下面记录的参数都是可选的。
-
区域-该
Region
参数可用于确定 API 是能够控制所有资源Amazon Web Services 区域(默认)还是单个资源Amazon Web Services 区域。请将此值设置Amazon Web Services 区域为要部署的 API 以限制访问权限。 -
ParallelClusterFunctionRole-这会覆盖分配给实现Amazon LambdaAmazon ParallelCluster功能的函数的 IAM 角色。参数接受 AM 角色的 ARN。需要将此类角色配置为Amazon Lambda作为 IAM 委托人。
-
CustomDomainName,CustomDomainCertificate,CustomDomainHostedZoneId-使用这些参数为 Amazon API Gateway 终端节点设置自定义域。
CustomDomainName
是要使用的域名,CustomDomainCertificate
是该域名的Amazon托管证书的 ARN,CustomDomainHostedZoneId
也是您要在其中创建记录的 Amazon Route 53 托管区域的 ID。警告 您可以配置自定义域设置,以强制执行 API 的最低传输层安全 (TLS) 版本。有关更多信息,请参阅 API Gateway 中为自定义域选择最低 TLS 版本。
-
EnableIamAdminAccess-默认情况下,执行Amazon ParallelCluster API 操作的Amazon Lambda函数配置为禁止任何 IAM 特权 IAM 访问权限的 IAM 角色 (
EnableIamAdminAccess=false
)。这使得 API 无法执行需要创建 IAM 角色或策略的操作。因此,只有将 IAM 角色作为资源配置的一部分作为输入提供,集群或自定义映像的创建才会成功。当设置
EnableIamAdminAccess
为true
时,Amazon ParallelClusterAPI 将被授予管理创建部署集群或生成自定义 AMI 所需的 IAM 角色的权限。警告 将此设置为 true 会向执行Amazon ParallelCluster操作的Amazon Lambda函数授予 IAM 管理员权限。
Amazon ParallelCluster用于管理 IAM 资源的用户示例策略有关启用此模式时可以解锁的功能的更多详细信息,请参阅。
-
PermissionsBoundaryPolicy-此参数接受 IAM 策略的 ARN,并且只能在设置
EnableIamAdminAccess
为时使用true
。指定 IAM 策略时,授予该 APIAmazon Lambda 函数的 IAM 权限有条件地限制在给定权限边界的使用范围内。有关此模式施加PermissionsBoundary模式的限制的更多详细信息,请参阅。
-
CreateApiUserRole-默认情况下,Amazon ParallelClusterAPI 的部署包括创建 IAM 角色,该角色被设置为唯一有权调用 API 的角色。 实际上,Amazon API Gateway 终端节点配置了基于资源的策略,仅向创建的用户授予调用权限。 取消设置的此类限制,
CreateApiUserRole=false
然后向选定的 IAM 用户授予对 API 的访问权限。有关更多信息,请参阅 Amazon API Gateway 开发人员指南中的控制调用 API 的访问权限。警告 当 Amazon API Gateway 资源策略不限制对 API 终端节点的
CreateApiUserRole=true
访问时,所有具有不受限制execute-api:Invoke
权限的 IAM 角色都将能够访问Amazon ParallelCluster功能。有关更多信息,请参阅《API Gateway 开发者指南》中的 API Gateway 资源策略控制对 API 的访问权限。警告 ParallelClusterApiUserRole
有权调用所有Amazon ParallelCluster API 操作。要限制对 API 资源子集的访问权限,请参阅 API Gateway 开发者指南中的 “控制谁可以使用 IAM 策略调用 API Gateway API 方法”。
更新 API
用例 1:升级到新Amazon ParallelCluster版本
选项 1:通过删除相应的Amazon CloudFormation堆栈来移除现有 API 并部署新的 API,如上所示。
选项 2:通过运行以下说明更新现有 API:
$
REGION=
<region>
$
API_STACK_NAME=
# This needs to correspond to the existing API stack name<stack-name>
$
VERSION=3.5.0
$
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 更新为已部署Amazon ParallelCluster版本的最新可用的 Docker 镜像版本
Amazon ParallelCluster可以定期为包含已更新和修补的依赖项的 APIAmazon Lambda 函数部署刷新的 Docker 镜像。此类刷新后的图像不包括给定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 管道的构建,该管道负责为已部署的 API 版本获取最新的可用的Amazon ParallelCluster Docker 镜像。
调用Amazon ParallelCluster API
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
此类用户的临时凭证可以通过调用 STS
Amazon ParallelClusterAPI 终端节点可以通过运行以下命令获取:
$
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
任何符合 OpenAmazon ParallelCluster API 规范的 HTTP 客户端都可以调用该 API,该规范可以在此处找到:
https://
<REGION>
-aws-parallelcluster.s3.<REGION>
.amazonaws.com/parallelcluster/<VERSION>
/api/ParallelCluster.openapi.yaml
请求需要按此处所述进行 SIGv4 签名。
目前我们不提供任何官方的 API 客户端实现。但是,使用 OpenAPI 生成器可以轻松地从 OpenAPI 模型生成 API
可以在Amazon ParallelCluster存储库
要实现更高级的访问控制机制,例如 Amazon Cognito 或 Lambda Authorizers,或者使用Amazon WAF或 API 密钥进一步保护 API,请遵循 Amazon API Gateway 文档。
有权调用Amazon ParallelCluster API 的 IAM 用户将能够间接控制Amazon ParallelCluster中管理的所有Amazon资源Amazon Web Services 账户。这包括创建由于用户 IAM 策略限制而用户无法直接控制的Amazon资源。例如,根据集群的配置,创建Amazon ParallelCluster集群可能包括部署 Amazon EC2 实例、Amazon Route 53、Amazon Elastic 文件系统、Amazon FsX 文件系统、IAM 角色以及用户可能无法直接控制的其他Amazon Web ServicesAmazon ParallelCluster使用的资源。
在使用配置中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 天。要检索与 API 部署关联的 LogGroup 名称,请运行以下命令:
$
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 控制台访问 Lambda 指标、日志和Amazon X-Ray跟踪日志。要检索与 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