使用 “sudo shutdown now” 和 “aws ec2 stop-instances” 停止 AWS EC2 实例的区别

101次阅读
没有评论

问题描述

在登录到 AWS EC2 实例(例如 Ubuntu 系统)并执行以下命令时:

sudo shutdown now

与使用 AWS CLI 命令停止相同实例时:

aws ec2 stop-instances --instance-ids $curr_instanceid --region $AWS_REGION

这两者有何区别?无论哪种方式,实例都会进入 “stopped” 状态,并且在执行以下命令后会转换为 “running” 状态:

aws ec2 start-instances --instance-ids $curr_instanceid --region $AWS_REGION

解决方案

方案概述

使用 “sudo shutdown now” 命令和 “aws ec2 stop-instances” 命令都可以将 AWS EC2 实例停止,但这两种方法在实现上存在一些区别,主要涉及到权限、操作方式和对实例状态的影响。

“sudo shutdown now” 命令

  • 权限要求: 使用 “sudo shutdown now” 命令需要登录到实例的操作系统,并具有足够的权限。你需要有操作系统的访问权限,比如 SSH 密钥或入站安全组规则。
  • 操作方式: 这个命令会在实例内部触发正常的关机流程,就像你在操作系统内执行关机命令一样。它将发送一个关机信号给操作系统,并关闭所有正在运行的进程。这意味着操作系统会做好关闭前的清理工作,确保数据的完整性。
  • 实例状态: 当使用 “sudo shutdown now” 命令停止实例时,实例会按照正常关机的流程关闭。数据存储在 RAM 中的内容不会被保留,这意味着下次启动时,所有在内存中的数据都会丢失。

“aws ec2 stop-instances” 命令

  • 权限要求: 使用 “aws ec2 stop-instances” 命令不需要登录到实例操作系统。相反,这是一个 AWS CLI 命令,需要 API 认证,可以通过 IAM 凭证或 STS 令牌进行认证。
  • 操作方式: 这个命令通过 AWS 的 API 请求来触发实例的停止。AWS EC2 控制平面会接收到请求后,将实例停止,但不会像 “sudo shutdown now” 命令一样在实例内部触发正常的关机流程。实际上,这种停止方式更接近于强制关机,因为它不会等待操作系统做清理工作。
  • 实例状态: 当使用 “aws ec2 stop-instances” 命令停止实例时,实例会被迅速关闭,不会等待操作系统完成关机流程。这可能导致操作系统中的一些未完成的任务或数据丢失,因为操作系统没有机会做正常的关闭操作。

总结

虽然两种方法都能将实例停止,但使用 “sudo shutdown now” 命令更接近于正常关机流程,它会等待操作系统完成清理工作。而使用 “aws ec2 stop-instances” 命令则是通过 API 请求迅速关闭实例,可能导致一些数据的丢失或不完整。

请注意: 如果你在使用 “aws ec2 stop-instances” 命令时想要实现更接近正常关机的效果,可以尝试使用 --hibernate 标志,但这需要实例支持并在内部进行了适当的配置。

参考文献:
aws ec2 stop-instances 文档
实例停止和休眠状态

正文完