Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 有没有办法每3个月自动安排Lightsail实例的启动?_Amazon Web Services_Cron_Aws Cli_Certbot_Amazon Lightsail - Fatal编程技术网

Amazon web services 有没有办法每3个月自动安排Lightsail实例的启动?

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命令以启动实例,并让实例在完成其工

我希望使用certbot auto自动更新我在GitLab页面上托管的网站的SSL证书。我已经有这个工作,但我必须保持我的Lightsail实例持续运行

我只是在寻找一种每3个月自动启动一次Lightsail实例的方法,启动后运行一个小脚本,然后再次关机。目前它每月花费我5美元,而我每次只使用几分钟


有没有办法每3个月自动安排Lightsail实例的启动时间?

我可以想到两种选择。可能还有更多

:每3个月安排一次shell活动,并选择一个微实例。指定AWS CLI命令以启动实例,并让实例在完成其工作后发送停止实例命令成本:1小时微实例。

(首选):计划Lambda事件以每3个月启动一次实例。指定AWS CLI命令以启动实例,并让实例在完成其工作后发送停止实例命令成本:无(可能在免费范围内)

从停止状态启动特定的Amazon Lightsail实例。到 重新启动实例,请使用重新启动实例操作


在我看来,在您的实例上安装代理只是为了发送一个命令,这是一种过分的做法。

建议的方法:一个计划的Lambda函数,每3个月启动一次,执行4个步骤

  • 启动您的实例
  • 使用EC2 RunCommand API在lightsail实例上远程执行命令
  • 监视命令直到完成
  • 关闭实例
  • 一些先决条件:

    • 创建Lambda函数并授予其使用IAM角色的权限,以使用
      ssm:
      ec2:startinstances
      ec2:stopinstances
      (这将允许Lambda函数与lightsail实例通信,并监视和发送命令
    • 将lambda函数设置为计划函数,以便每3个月自动触发一次
    • 在您的实例上安装SSMAgent,如
    • 通过实例策略为您的实例授予SSM通信的适当IAM权限(这将允许实例与AWS SSM通信)

      “ec2messages:*”、“ssm:updateinstanceinformation”、“ssm:listassociations”

    现在,使用AWS SDK编写lambda函数,它将非常有效。 如果您担心成本,除非您运行一个脚本的母亲,否则您应该属于免费层,因为您每月可以获得400 GB秒的计算时间

    这意味着您可以使用1GB内存每月免费运行400秒的lambda函数


    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!')
        }