在AWS EC2中,启动配置的生命周期挂钩和用户数据都允许在启动实例时执行一些自定义操作。
您能告诉我是在执行Lifecyle挂钩相关操作之前还是在执行启动配置中定义的用户数据之前?
您何时选择哪个?它们有什么区别?
用户数据和Cloud-Init
启动Amazon EC2实例时,您可以提供用户数据字段。可以通过http://169.254.169.254/latest/user-data/
在实例中使用在此字段中输入的信息。
这是将信息传递给实例的最佳方法],实例上运行的软件可以访问。
Then Canonical,Ubuntu的制造商,conceived Cloud-Init
,作为在虚拟机启动期间运行脚本的一种方式。 Cloud-Init接受通过EC2用户数据传递的脚本,并在实例的首次启动期间将其作为root
运行。初次使用时,这是安装软件并配置机器的好方法。Amazon EC2自动扩展生命周期挂钩
Amazon EC2 Auto-Scaling是一种基于工作负载自动扩展一组EC2实例的方法。根据目标容量度量标准,启动或终止
实例。通过Auto-Scaling启动的实例是普通的EC2实例,因此可以使用用户数据来配置这些实例。但是,有时启动/终止实例时需要执行更复杂的操作。例如,在启动实例时,可能有必要联系外部配置服务,而在终止实例时,可能有必要从实例中复制数据。这些任务可以通过Lifecycle Hooks。
完成。来自Amazon EC2 Auto Scaling Lifecycle Hooks - Amazon EC2 Auto Scaling:
的内容来处理生命周期挂钩。生命周期挂钩使您可以通过在Auto Scaling组启动或终止实例时暂停实例来执行自定义操作。实例暂停后,它将一直处于等待状态,直到您使用complete-lifecycle-action CLI命令或CompleteLifecycleAction API操作完成生命周期操作,或者超时时间结束(默认为一小时)。
与用户数据相比,很少使用生命周期挂钩。如果在实例准备好处理请求之前需要较长时间运行或外部流程,则通常需要使用它们。例如,新实例可能需要很长的启动过程,超过了正常运行状况检查所允许的时间。或者,可能需要在实例开始处理流量之前触发外部进程(实例外部)。
生命周期挂钩更为复杂,因为它们涉及信号机制。启动或终止Auto Scaling实例时,Auto Scaling将通过Amazon SQS或Amazon SNS发送消息。然后,您负责运行响应该信号的进程。该过程完成后,必须将信号发送回Auto Scaling,以便可以将实例完全添加到Auto Scaling组或从中删除。这通常需要运行EC2实例外部
底线:您要使用用户数据。您很少使用生命周期挂钩。