Amazon web services AWS EC2生命周期挂钩与启动配置中的用户数据

Amazon web services AWS EC2生命周期挂钩与启动配置中的用户数据,amazon-web-services,amazon-ec2,autoscaling,Amazon Web Services,Amazon Ec2,Autoscaling,在AWS EC2中,生命周期钩子和启动配置的用户数据都允许在启动实例时执行一些自定义操作 你能告诉我生命周期钩子相关的动作是在之前执行的,还是在启动配置中定义的用户数据在之前执行的 你什么时候选的?它们的区别是什么?用户数据和Cloud Init 启动AmazonEC2实例时,可以提供一个用户数据字段。此字段中输入的信息可通过http://169.254.169.254/latest/user-data/ 这是一种极好的方法,可以将信息传递到实例上运行的软件可以访问的实例 然后是Ubuntu的制

在AWS EC2中,生命周期钩子和启动配置的用户数据都允许在启动实例时执行一些自定义操作

你能告诉我生命周期钩子相关的动作是在之前执行的,还是在启动配置中定义的用户数据在之前执行的


你什么时候选的?它们的区别是什么?

用户数据和Cloud Init

启动AmazonEC2实例时,可以提供一个用户数据字段。此字段中输入的信息可通过
http://169.254.169.254/latest/user-data/

这是一种极好的方法,可以将信息传递到实例上运行的软件可以访问的实例

然后是Ubuntu的制造商Canonical,Cloud Init,作为虚拟机启动期间运行脚本的一种方式。Cloud Init接受通过EC2用户数据传递的脚本,并在实例的第一次启动期间以
根用户身份运行它。第一次使用时,这是安装软件和配置机器的好方法

亚马逊EC2自动扩展生命周期挂钩

AmazonEC2自动伸缩是一种基于工作负载自动伸缩EC2实例组的方法。实例根据目标容量指标启动终止。通过自动缩放启动的实例是正常的EC2实例,因此可以使用用户数据来配置这些实例

但是,有时在启动/终止实例时需要更复杂的操作。例如,启动实例时可能需要联系外部配置服务,终止实例时可能需要从实例复制数据。这些任务可以通过生命周期挂钩来完成

发件人:

生命周期挂钩使您能够通过在自动缩放组启动或终止实例时暂停实例来执行自定义操作。暂停实例时,它将保持等待状态,直到您使用complete lifecycle action CLI命令或CompleteLifecycle action API操作完成生命周期操作,或者超时时间结束(默认情况下为一小时)

与用户数据相比,很少使用生命周期挂钩。在实例准备好处理请求之前,如果需要更长时间的运行或外部进程,则通常需要它们。例如,新实例可能需要很长的启动过程,超过了正常允许的运行状况检查时间。或者,在实例开始处理流量之前,可能需要触发外部进程(实例外部)

生命周期挂钩更复杂,因为它们涉及一种信号机制。启动或终止自动缩放实例时,自动缩放将通过Amazon SQS或Amazon SNS发送消息。然后,您负责运行响应此信号的进程。当该过程完成时,它必须将信号发送回自动缩放,以便可以将实例完全添加到自动缩放组或从中删除。这通常需要在EC2实例外部运行一些东西来处理生命周期挂钩

底线:您想使用用户数据。很少使用生命周期挂钩。

谢谢您的回答。 实际上,生命周期挂钩在某种程度上是有用的。例如,在我的情况下,我必须在实例终止之前停用Tableau服务器许可证。这是一个使用它的好情况

然而,在启动期间,用户数据被执行,但一旦操作系统本身启动,实例将进入“服务”状态,即使用户数据尚未完成执行


因此,要在这两种方法之间做出选择,这完全取决于您希望在脚本中执行的操作。

感谢John的回复。那么问题是:每一个的执行顺序如何?想象一下,我有一个包含用户数据的脚本,还有一个用于启动的生命周期钩子,哪个将首先执行?当Amazon EC2 Auto Scaling启动一个新实例时,该实例会像正常情况一样启动。当实例启动时,用户数据脚本将在实例上执行。这完全独立于生命周期挂钩。自动缩放将使实例进入自动缩放“等待状态”(这只是一种状态,不会影响实例本身),因此不会将其添加到负载平衡器中。自动缩放将等到收到信号后再将实例放入组中并发送流量(或者,如果一小时后没有收到信号,它仍将将其放入组中)。你好@JohnRotenstein,请问如何发送完成的信号-lifecycle@Hamza您可以使用AWS CLI或AWS SDK发送信号(例如)。这是非常有用的,并提到您可以使用元数据获取实例Id以调用aws autoscaling complete lifecycle操作。