3

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

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

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

4

3 回答 3

4

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

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

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

aws lightsail 启动实例

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

在我看来,在您的实例上安装代理只是为了发送命令是一种过大的杀伤力。

于 2017-12-08T15:06:17.873 回答
3

建议的方法:每 3 个月触发一次并执行 4 个步骤的计划 Lambda 函数。

  1. 启动您的实例
  2. 使用 EC2 RunCommand API 在您的 lightsail 实例上远程执行命令
  3. 监控命令直到完成
  4. 关闭实例

一些先决条件:

  • 创建一个 Lambda 函数并授予它使用 IAM 角色的权限ssm:*ec2:startinstances并且ec2:stopinstances(这将允许您的 Lambda 函数与您的 lightsail 实例进行通信,并监控和发送命令。
  • 将 lambda 函数设为定时函数,这样就可以每 3 个月自动触发一次
  • 像这样在您的实例上安装 SSMAgent
  • 通过实例策略为您的实例授予 SSM 通信的适当 IAM 权限(这将允许实例与 AWS SSM 通信)

    "ec2messages:*","ssm:updateinstanceinformation","ssm:listassociations"

现在使用 AWS 开发工具包编写您的 lambda 函数,它会像魅力一样工作。如果您担心成本,除非您运行一个脚本的母亲,否则您应该属于免费套餐,因为您每月可以获得 400 GB 秒的计算时间。

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

PS:我经常提到 EC2,我知道您正在使用 lightsail,但由于它只是 EC2 的包装器,我想可以使用相同的功能,如果我错了,请纠正我。

于 2017-12-08T15:14:56.400 回答
0

为此,我们需要从不同的 AWS 服务中获得帮助,我们需要创建一个 Lambda 函数并编写自定义代码来启动和停止 LightSail 实例,然后使用 CloudWatch Events 将实例安排在您想要的时间段内.

下面是一个示例代码,您可以使用它来安排实例的停止和启动:

启动 LightSail 服务器的代码:

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

停止 LightSail 服务器的代码:

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

注意**:确保编辑 REGION 和 NAME-OF-YOUR-LIGHTSAIL-SERVER

您可以使用上面的代码创建两个不同的 lambda 函数。

执行此操作后,您可以使用触发 Lambda 函数的 CloudWatch 事件规则。

请参考:https ://docs.aws.amazon.com/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-Rule.html

于 2020-01-05T17:31:18.307 回答