Amazon web services 有没有办法每3个月自动安排Lightsail实例的启动?
我希望使用certbot auto自动更新我在GitLab页面上托管的网站的SSL证书。我已经有这个工作,但我必须保持我的Lightsail实例持续运行 我只是在寻找一种每3个月自动启动一次Lightsail实例的方法,启动后运行一个小脚本,然后再次关机。目前它每月花费我5美元,而我每次只使用几分钟Amazon web services 有没有办法每3个月自动安排Lightsail实例的启动?,amazon-web-services,cron,aws-cli,certbot,amazon-lightsail,Amazon Web Services,Cron,Aws Cli,Certbot,Amazon Lightsail,我希望使用certbot auto自动更新我在GitLab页面上托管的网站的SSL证书。我已经有这个工作,但我必须保持我的Lightsail实例持续运行 我只是在寻找一种每3个月自动启动一次Lightsail实例的方法,启动后运行一个小脚本,然后再次关机。目前它每月花费我5美元,而我每次只使用几分钟 有没有办法每3个月自动安排Lightsail实例的启动时间?我可以想到两种选择。可能还有更多 :每3个月安排一次shell活动,并选择一个微实例。指定AWS CLI命令以启动实例,并让实例在完成其工
有没有办法每3个月自动安排Lightsail实例的启动时间?我可以想到两种选择。可能还有更多 :每3个月安排一次shell活动,并选择一个微实例。指定AWS CLI命令以启动实例,并让实例在完成其工作后发送停止实例命令成本:1小时微实例。 (首选):计划Lambda事件以每3个月启动一次实例。指定AWS CLI命令以启动实例,并让实例在完成其工作后发送停止实例命令成本:无(可能在免费范围内) 从停止状态启动特定的Amazon Lightsail实例。到 重新启动实例,请使用重新启动实例操作
在我看来,在您的实例上安装代理只是为了发送一个命令,这是一种过分的做法。建议的方法:一个计划的Lambda函数,每3个月启动一次,执行4个步骤
- 创建Lambda函数并授予其使用IAM角色的权限,以使用
、ssm:
和ec2:startinstances
(这将允许Lambda函数与lightsail实例通信,并监视和发送命令ec2:stopinstances
- 将lambda函数设置为计划函数,以便每3个月自动触发一次
- 在您的实例上安装SSMAgent,如
- 通过实例策略为您的实例授予SSM通信的适当IAM权限(这将允许实例与AWS SSM通信)
“ec2messages:*”、“ssm:updateinstanceinformation”、“ssm:listassociations”
PS:我经常提到EC2,我知道您正在使用lightsail,但由于它只是EC2的一个包装器,我想同样的功能是可用的,如果我错了,请纠正我。要做到这一点,我们需要从不同的AWS服务处获得帮助,我们需要创建一个Lambda函数,并编写一个用于启动和停止lightsail的自定义代码然后使用CloudWatch事件按您想要的时间段安排实例 下面是一个示例代码,可用于计划实例的停止和启动: 启动LightSail服务器的代码: 停止LightSail服务器的代码: 注意**:确保编辑您的LIGHTSAIL-SERVER的区域和名称 您可以使用上述代码创建两个不同的lambda函数 一旦这样做,就可以使用CloudWatch事件规则来触发Lambda函数
请参阅:非常感谢,还有大量的细节可以帮助我解决这个问题。如果Lightsail实例启动并执行所需的任何操作需要5分钟以上,那么使用您建议的方法将非常困难。更好的方法是按照helloV的建议,使用Lambda函数只需启动实例,然后让实例在引导时自动运行任务,并在任务完成后自动关闭。我也同意@helloV的观点,即使用AWS数据管道将是一种更顺畅的设置体验。这将迫使您从lightsail到ec2,但因为仅运行一个小时的成本几乎是零nothing($0.0116/小时,在us-east-1中)这是一个同样可行的选项。感谢您的建议,非常有用。@helloV JFYI-SSM代理与大多数AWS的AMI一起预打包。OP的lightsail实例很可能会使用AWS Linux作为其AMI。我应该创建单独的作业吗?以及如何添加这些作业
import json
import boto3
def lambda_handler(event, context):
client = boto3.client('lightsail', region_name='REGION')
response = client.start_instance(
instanceName='NAME-OF-YOUR-LIGHTSAIL-SERVER'
)
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
import json
import boto3
def lambda_handler(event, context):
client = boto3.client('lightsail', region_name='REGION')
response = client.stop_instance(
instanceName='NAME-OF-YOUR-LIGHTSAIL-SERVER'
)
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}