Amazon CloudFormation 自定义资源 - Amazon ParallelCluster
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon CloudFormation 自定义资源

从 3.6.0 Amazon ParallelCluster 版开始,您可以在堆栈中使用 Amazon ParallelCluster CloudFormation 自定义资源。 Amazon CloudFormation 自定义资源是 Amazon ParallelCluster 托管堆栈。这样,您就可以使用 CloudFormation 来配置和管理您的集群。例如,您可以在 CloudFormation 堆栈中配置群集外部资源,例如网络、共享存储和安全组基础架构。此外,您可以使用 CloudFormation 基础设施即代码管道来管理集群。

通过执行以下操作向 CloudFormation 模板添加 Amazon ParallelCluster 自定义资源:

  1. 添加由其拥有和托管的自定义资源提供程序堆栈 Amazon ParallelCluster。

  2. 将 CloudFormation 模板中的提供程序堆栈作为自定义资源引用。

自定义资源提供程序堆栈处理和响应 CloudFormation 请求。例如,在部署 CloudFormation 堆栈时,还要配置和创建集群。要更新集群,您需要更新 CloudFormation 堆栈。在删除堆栈时,将会删除集群。有关 CloudFormation 自定义资源的更多信息,请参阅Amazon CloudFormation 用户指南中的自定义资源

警告

CloudFormation 未检测到自定义资源偏差。仅 CloudFormation 用于更新集群配置和删除集群。

您可以使用 pcluster CLI 或 Amazon ParallelCluster UI 来监控集群的状态或更新计算实例集,但不得使用它们来更新集群配置或删除集群。

注意

我们建议您为堆栈添加终止保护,以避免意外删除。

由托管的提供商堆栈 Amazon 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 (可选):

具有运行 Amazon Lambda (可创建和管理集群)的权限的自定义角色。默认情况下,该角色使用 Amazon ParallelCluster 文档中默认定义的相同策略。

AdditionalIamPolicies (可选):

要为 Lambda 使用的角色添加的其他 IAM 策略 Amazon 资源名称 (ARN) 的逗号分隔列表。仅在未指定 CustomLambdaRole 时使用,并且可以留空。

如果需要对头节点、计算节点使用其他策略或需要其他策略以访问 Amazon S3 存储桶,请将其添加到 CustomLambdaRoleAdditionalIamPolicy 属性中。

有关默认策略的更多信息,请参阅 Amazon Identity and Access Management 中的权限 Amazon ParallelCluster

TemplateURL(必需):

Amazon ParallelCluster 自定义资源文件 URL。

输出:
ServiceToken:

可用作自定义资源 ServiceToken 属性的值。自定义资源ServiceToken指定 Amazon CloudFormation 将请求发送到何处。这是您在 Amazon CloudFormation 模板中包含的群集资源的必填输入。

LogGroupArn:

底层资源登录到 CloudWatch LogGroup的 ARN。

LambdaLayerArn:

用于运行操作的 Lambda 层的 ARN。 Amazon 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:

Amazon 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 ]

示例:带有 Amazon ParallelCluster 自定义资源的简单、完整的 CloudFormation 模板:

AWSTemplateFormatVersion: '2010-09-09' Description: > Amazon 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 Amazon ParallelCluster 自定义资源的更多信息,请参阅使用创建集群 Amazon CloudFormation

集群操作

将群集自定义资源添加到 CloudFormation 堆栈后, CloudFormation 可以执行以下群集操作:

  • CloudFormation 在部署包含 Amazon ParallelCluster 自定义资源的堆栈时,会在新的单独堆栈中创建集群。

  • 如果您更新堆栈中定义的群集配置,则会根据配置更新策略 CloudFormation 更新群集。 Amazon ParallelCluster 自定义资源提供程序不会在更新集群之前停止计算队列。我们建议对集群更新使用 QueueUpdateStrategy 设置。这样,在使用 Amazon ParallelCluster 自定义资源时,可以避免在更新前后进行显式pcluster update-compute-fleet调用。

  • 如果删除堆栈,则会删除集群。

对包含 Amazon ParallelCluster 自定义资源的堆栈进行故障排除

使用 Amazon ParallelCluster 自定义资源,从新的独立堆栈 CloudFormation 部署群集。您可以通过执行以下步骤来监控集群创建:

  1. 导航到, Amazon Web Services Management Console 然后 CloudFormation 在导航窗格中选择 Stacks

  2. 选择名为您为集群名称定义的名称的堆栈。

  3. 如果堆栈状态为 ROLLBACK_COMPLETE,则表明在创建集群过程中出现了错误。

  4. 选择堆栈详细信息,然后选择事件选项卡。

  5. 逻辑 ID 上搜索事件,查找您为集群名称定义的名称。该事件包含一个 Status reason,给出问题的理由。

  6. 您也可以选择堆栈下拉菜单,然后选择已删除以查看已删除堆栈的列表。选择包含该集群名称的堆栈并查看事件以了解更多详细信息。

  7. 要查看管理群集的自定义资源提供程序的输出,请选择描述为 “Amazon ParallelCluster 群集自定义资源” 的堆栈。选择资源选项卡,找到逻辑 IDPclusterCfnFunctionLogGroup 的资源,然后点击提供的链接。查看显示 Lambda 调试输出的日志流。

  8. 要对集群进行故障排除,请参阅 Amazon ParallelCluster 故障排除