本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS CloudFormation 自定义资源
从 3.6.0 AWS ParallelCluster 版开始,您可以在堆栈中使用 AWS ParallelCluster CloudFormation 自定义资源。 AWS CloudFormation 自定义资源是 AWS ParallelCluster 托管堆栈。这样,您就可以使用 CloudFormation 来配置和管理您的集群。例如,您可以在 CloudFormation 堆栈中配置群集外部资源,例如网络、共享存储和安全组基础架构。此外,您可以使用 CloudFormation 基础设施即代码管道来管理集群。
通过执行以下操作向 CloudFormation 模板添加 AWS ParallelCluster 自定义资源:
-
添加由其拥有和托管的自定义资源提供程序堆栈 AWS ParallelCluster。
-
将 CloudFormation 模板中的提供程序堆栈作为自定义资源引用。
自定义资源提供程序堆栈处理和响应 CloudFormation 请求。例如,在部署 CloudFormation 堆栈时,还要配置和创建集群。要更新集群,您需要更新 CloudFormation 堆栈。在删除堆栈时,将会删除集群。有关 CloudFormation 自定义资源的更多信息,请参阅AWS CloudFormation 用户指南中的自定义资源。
警告
CloudFormation 未检测到自定义资源偏差。仅 CloudFormation 用于更新集群配置和删除集群。
您可以使用 pcluster CLI 或 AWS ParallelCluster UI 来监控集群的状态或更新计算实例集,但不得使用它们来更新集群配置或删除集群。
注意
我们建议您为堆栈添加终止保护,以避免意外删除。
由托管的提供商堆栈 AWS ParallelCluster
自定义资源提供程序堆栈的格式如以下 CloudFormation 模板片段所示:
PclusterClusterProvider: Type: AWS::CloudFormation::Stack Properties: Parameters: CustomLambdaRole: # (Optional) RoleARN to override default AdditionalIamPolicies: # (Optional) comma-separated list of IAM policies to add TemplateURL: !Sub - https://${AWS::Region}-aws-parallelcluster.s3.${AWS::Region}.${AWS::URLSuffix}/parallelcluster/${Version}/templates/custom_resource/cluster.yaml - { Version: 3.7.0 }
- 属性:
-
- 参数:
-
- CustomLambdaRole (可选):
-
具有运行 AWS Lambda (可创建和管理集群)的权限的自定义角色。默认情况下,该角色使用 AWS ParallelCluster 文档中默认定义的相同策略。
- AdditionalIamPolicies (可选):
-
要为 Lambda 使用的角色添加的其他 IAM 策略 Amazon 资源名称 (ARN) 的逗号分隔列表。仅在未指定
CustomLambdaRole
时使用,并且可以留空。如果需要对头节点、计算节点使用其他策略或需要其他策略以访问 Amazon S3 存储桶,请将其添加到
CustomLambdaRole
或AdditionalIamPolicy
属性中。有关默认策略的更多信息,请参阅 AWS Identity and Access Management 中的权限 AWS ParallelCluster。
- TemplateURL(必需):
-
AWS ParallelCluster 自定义资源文件 URL。
- 输出:
-
- ServiceToken:
-
可用作自定义资源
ServiceToken
属性的值。自定义资源ServiceToken
指定 AWS CloudFormation 将请求发送到何处。这是您在 AWS CloudFormation 模板中包含的群集资源的必填输入。 - LogGroupArn:
-
底层资源登录到 CloudWatch
LogGroup
的 ARN。 - LambdaLayerArn:
-
用于运行操作的 Lambda 层的 ARN。 AWS ParallelCluster
集群资源
CloudFormation 群集资源的格式如以下 CloudFormation 模板片段所示:
PclusterCluster: Type: Custom::PclusterCluster Properties: ServiceToken: !GetAtt [ PclusterClusterProvider , Outputs.ServiceToken ] ClusterName: !Sub 'c-${AWS::StackName}' # Must be different from StackName ClusterConfiguration: # Your Cluster Configuration
- 属性:
-
- ServiceToken:
-
AWS ParallelCluster 提供程序堆栈
ServiceToken
输出。 - ClusterName:
-
要创建和管理的集群的名称。该名称不得与 CloudFormation 堆栈的名称匹配。创建集群后将无法更改该名称。
- ClusterConfiguration:
-
集群配置 YAML 文件,如集群配置文件中所述。但是,您可以使用常用的 CloudFormation 结构,例如内部函数。
- DeletionPolicy:
-
定义在删除根堆栈时是否删除集群。默认值为
Delete
。- Retain:
-
如果删除了自定义资源,则保留集群。
注意
为了使保留的集群继续正常运行,依赖于集群的资源(例如存储和网络)必须将删除策略设置为保留。
- Delete:
-
如果删除了自定义资源,则删除集群。
Fn::GetAtt
返回值:-
Fn::GetAtt
内置函数会为指定属性返回某种类型的值。有关使用该Fn::GetAtt intrinsic
函数的更多信息,请参阅 Fn:: GetAtt。- ClusterProperties:
-
pcluster describe-cluster 操作返回的值。
- validationMessages:
-
包含上次创建或更新操作期间出现的所有验证消息的字符串。
- logGroupName:
-
用于记录 Lambda 集群操作的日志组的名称。日志事件保留 90 天,集群删除后日志组将保留。
示例:Fn::GetAtt
:
# Provide the public IP address of the head node as an output of a stack Outputs: HeadNodeIp: Description: The public IP address of the head node Value: !GetAtt [ PclusterCluster, headNode.publicIpAddress ]
示例:带有 AWS ParallelCluster 自定义资源的简单、完整的 CloudFormation 模板:
AWSTemplateFormatVersion: '2010-09-09' Description: > AWS ParallelCluster CloudFormation Template Parameters: HeadNodeSubnet: Description: Subnet where the HeadNode will run Type: AWS::EC2::Subnet::Id ComputeSubnet: Description: Subnet where the Compute Nodes will run Type: AWS::EC2::Subnet::Id KeyName: Description: KeyPair to login to the head node Type: AWS::EC2::KeyPair::KeyName Resources: PclusterClusterProvider: Type: AWS::CloudFormation::Stack Properties: TemplateURL: !Sub - https://${AWS::Region}-aws-parallelcluster.s3.${AWS::Region}.${AWS::URLSuffix}/parallelcluster/${Version}/templates/custom_resource/cluster.yaml - { Version: 3.7.0 } PclusterCluster: Type: Custom::PclusterCluster Properties: ServiceToken: !GetAtt [ PclusterClusterProvider , Outputs.ServiceToken ] ClusterName: !Sub 'c-${AWS::StackName}' ClusterConfiguration: Image: Os: alinux2 HeadNode: InstanceType: t2.medium Networking: SubnetId: !Ref HeadNodeSubnet Ssh: KeyName: !Ref KeyName Scheduling: Scheduler: slurm SlurmQueues: - Name: queue0 ComputeResources: - Name: queue0-cr0 InstanceType: t2.micro Networking: SubnetIds: - !Ref ComputeSubnet Outputs: HeadNodeIp: Description: The Public IP address of the HeadNode Value: !GetAtt [ PclusterCluster, headNode.publicIpAddress ] ValidationMessages: Description: Any warnings from cluster create or update operations. Value: !GetAtt PclusterCluster.validationMessages
要了解有关如何使用 CloudFormation AWS ParallelCluster 自定义资源的更多信息,请参阅使用创建集群 AWS CloudFormation。
集群操作
将群集自定义资源添加到 CloudFormation 堆栈后, CloudFormation 可以执行以下群集操作:
-
CloudFormation 在部署包含 AWS ParallelCluster 自定义资源的堆栈时,会在新的单独堆栈中创建集群。
-
如果您更新堆栈中定义的群集配置,则会根据配置更新策略 CloudFormation 更新群集。 AWS ParallelCluster 自定义资源提供程序不会在更新集群之前停止计算队列。我们建议对集群更新使用 QueueUpdateStrategy 设置。这样,在使用 AWS ParallelCluster 自定义资源时,可以避免在更新前后进行显式
pcluster update-compute-fleet
调用。 -
如果删除堆栈,则会删除集群。
对包含 AWS ParallelCluster 自定义资源的堆栈进行故障排除
使用 AWS ParallelCluster 自定义资源,从新的独立堆栈 CloudFormation 部署群集。您可以通过执行以下步骤来监控集群创建:
-
导航到, AWS Management Console 然后 CloudFormation 在导航窗格中选择 Stacks。
-
选择名为您为集群名称定义的名称的堆栈。
-
如果堆栈状态为
ROLLBACK_COMPLETE
,则表明在创建集群过程中出现了错误。 -
选择堆栈详细信息,然后选择事件选项卡。
-
在逻辑 ID 上搜索事件,查找您为集群名称定义的名称。该事件包含一个
Status reason
,给出问题的理由。 -
您也可以选择堆栈下拉菜单,然后选择已删除以查看已删除堆栈的列表。选择包含该集群名称的堆栈并查看事件以了解更多详细信息。
-
要查看管理群集的自定义资源提供程序的输出,请选择描述为 “AWS ParallelCluster 群集自定义资源” 的堆栈。选择资源选项卡,找到逻辑 ID 为
PclusterCfnFunctionLogGroup
的资源,然后点击提供的链接。查看显示 Lambda 调试输出的日志流。 -
要对集群进行故障排除,请参阅 AWS ParallelCluster 故障排除。