[记录]AWS lightsail 光帆流量控制自动关机

exit 2026-07-21 01:34 1

顶尖的富贵云RFC出完了,绿云Gen2用不起,还是继续上5刀的光帆了。34W是我的单线程只有320M:


此处以日本区域为例:(记住实列名和区域,一会要考)



  • 创建 Lambda

  • 设置自动定时任务

  • 测试与维护

  • 清理/删除


第一步:


创建 Lambda 脚本

创建函数

在 AWS 搜索栏输入 Lambda​ 并进入。

点击 “创建函数”。

选择 “从头开始创作”。

填写基本信息:

函数名称:LightsailAutoStop

运行时:选择 Python 3.12(或最新的 3.x 版本)

点击 “创建函数”​ 按钮。

2. 粘贴核心代码

创建成功后,向下滚动到 “代码源”​ 编辑器。

把默认的 lambda_function.py 里的所有内容删掉。

完整复制下面这段代码,粘贴进去:


import json
import os
import boto3
from datetime import datetime, timezone

def get_monthly_usage(client, instance_name):
"""
获取本月累计流量(流入+流出)
"""
now = datetime.now(timezone.utc)
# 从本月1号零点开始统计
start_time = datetime(now.year, now.month, 1, tzinfo=timezone.utc)
end_time = now

total_bytes = 0
# 统计入口流量和出口流量
for metric in ['NetworkIn', 'NetworkOut']:
resp = client.get_instance_metric_data(
instanceName=instance_name,
metricName=metric,
period=86400, # 按天统计
unit='Bytes',
statistics=['Sum'],
startTime=start_time,
endTime=end_time
)
for dp in resp.get('metricData', []):
total_bytes += dp.get('sum', 0)

return total_bytes

def lambda_handler(event, context):
# 从环境变量读取配置
instance_name = os.environ['INSTANCE_NAME']
region_name = os.environ['REGION_NAME']

# 连接 Lightsail
client = boto3.client('lightsail', region_name=region_name)

# 计算已用流量
used_bytes = get_monthly_usage(client, instance_name)
used_gb = used_bytes / 1024 / 1024 / 1024

# =======================
# 重点:关机阈值(单位 GB)
# =======================
THRESHOLD_GB = 990

print(f"实例 {instance_name} 本月已用流量: {used_gb:.2f} GB")

# 判断是否超过阈值
if used_gb >= THRESHOLD_GB:
print(f"⚠️ 流量已达 {THRESHOLD_GB} GB,执行关机")
# 执行关机命令
client.stop_instance(instanceName=instance_name, force=True)
msg = f"流量超限,已停止实例 {instance_name}"
else:
print(f"✅ 流量未超限(< {THRESHOLD_GB} GB),不执行关机")
msg = f"流量安全,当前 {used_gb:.2f} GB"

return {
'statusCode': 200,
'body': json.dumps(msg)
}

点击右上角的 “部署”(橙色按钮)。

3. 设置环境变量(告诉脚本关哪台机器)

点击上方的 “配置” (Configuration)​ 标签页。

点击左侧的 “环境变量”​ (Environment variables)。

点击 “编辑”,然后添加以下两条(实例名和区域):

Key: INSTANCE_NAME Value: aws-jp

Key: REGION_NAME Value: ap-northeast-1

点击 “保存”。

4. 给脚本“授权”

还是在 “配置”​ 页面,点击左侧的 “权限”​ (Permissions)。

点击角色名称(那串蓝色的文字,如 LightsailAutoStop-role-xxxx)。

会跳转到 IAM 页面。点击 “添加权限”​ -> “附加策略”。

在搜索框输入 Lightsail,勾选 AmazonLightsailFullAccess。

点击底部的 “添加权限”。



第二步:


设置自动定时任务

  1. 创建规则

    回到 AWS 控制台主页,搜索 EventBridge​ 并进入。

    点击左侧 “规则”​ (Rules)。

    点击 “创建规则”。

    填写名称:LightsailAutoStopRule

    规则类型:选择 “计划”​ (Schedule)。

    点击 “下一步”。

  2. 设置时间(每15分钟)

    选择 “Cron 表达式”。

    在输入框中输入:*/15 * * * ? *

    点击 “下一步”。

  3. 绑定 Lambda

    目标类型:选择 “AWS 服务”。

    选择目标:选择 “Lambda 函数”。

    函数:在下拉列表中选择 LightsailAutoStop。

    点击 “下一步”,再点击 “创建规则”。



第三步:


测试与维护

  1. 手动测试(检查脚本是否报错)

    回到 Lambda​ 页面,进入 LightsailAutoStop 函数。

    点击 “测试”​ 选项卡。

    事件名称填 TestStop,其余默认,点击 “测试”。

    结果:如果显示 流量安全...,说明脚本逻辑正确。

  2. 模拟“流量爆表”测试(验证自动关机)

    修改代码:把代码里的 THRESHOLD_GB = 990 改为 THRESHOLD_GB = 2。

    点击 “部署”。

    点击 “测试”。

    验证:此时去 Lightsail 控制台,会发现 aws-jp 实例正在停止。

    复原:测试完后,一定要记得把代码改回 THRESHOLD_GB = 990 并再次点击 “部署”。

  3. 查看运行日志

    在 Lambda 页面,点击 “监控”​ -> “查看 CloudWatch 日志”。

    这里记录了每一次执行的详细信息,如果哪天没关机,来这里查原因。




第四步:


清理/删除

EventBridge:找到规则,点击“禁用”或“删除”。

Lambda:找到函数,点击“删除”。

IAM:进入 IAM -> 角色,删除 LightsailAutoStop-role-xxxx。

Lightsail:在 Lightsail 控制台停止或删除实例



都喂给AI照做的,经测试能跑起来,设置2G流量后自动关机了。

最新回复 (28)
  • MarkFloyd 07-21 01:36
    1

    帮楼主顶一下

  • 暴躁青年 07-21 01:37
    2

    牛逼 正是我用的上的 ^-^

  • exit 楼主 07-21 01:38
    3

    @MarkFloyd #1 @暴躁青年 #2 没有技术含量,需求喂AI就行,只是记录一下,以便我下次用,如果能帮到你,我也很开心。

  • MarkFloyd 07-21 01:39
    4

    @exit #3 楼主也是联通吧?我是华北联通也在用

  • exit 楼主 07-21 01:40
    5

    @MarkFloyd #4 是的,主用联通。备电信。

  • yurimaster-1874 07-21 01:41
    6

    ^-^

  • exit 楼主 07-21 01:44
    7

    完整的 区域 点用户名左边就能看到了:


  • loganyoyo 07-21 02:05
    8

    大佬, 这个Lambda会不会收费

  • exit 楼主 07-21 02:08
    9

    @loganyoyo #8 AWS Lambda 是有收费标准的,但你目前的用法基本是“永久免费”的,不用担心产生费用。


    收费模式与免费额度


    Lambda 按两个维度计费:请求次数 + 执行时长(GB-秒)。AWS 提供了一个永久免费的套餐(不限于首年):


    请求:每月 100 万次免费


    计算时间:每月 40 万 GB-秒免费


    结合你的场景算笔账


    你的配置是每 15 分钟触发一次,函数内存 128MB(约 0.125GB),执行约 3 秒:


    月请求数:24小时 × 4次 × 30天 = 2880 次(远低于 100 万)


    月计算量:2880次 × 0.125GB × 3秒 ≈ 1080 GB-秒(远低于 40 万)


    结论:你每月用量连免费额度的 1% 都不到,完全在免费范围内,不会产生任何 Lambda 费用。

  • adang 07-21 02:57
    10

    这个方案实用,记得给告警留余量。

  • exit 楼主 07-21 07:55
    11

    @adang #10 警留余量是什么?

  • shenjinkai 07-21 08:20
    12

    BD

  • at 07-21 08:28
    13

    看着不错,还有一种情况好像楼主没有考虑,就是lightsail首月不一定是1日开通的,总流量可能是按小时计算的残值,所以可能需要按订单时间判断一下,如果都按1日计算可能会超流量

  • kkk哎 07-21 08:29
    14

    帮顶 ^-^

  • gamecrafters 07-21 08:34
    15

    站内原本是有教程的,而且你的脚本好像有点问题,那个for networkin和networkout的意义没看懂。官方有一篇专门的文章https://aws.amazon.com/cn/blogs/china/monitor-amazon-lightsail-data-traffic-using-lambda/

  • scope5814 07-21 08:35
    16

    想法很好的👍

  • exit 楼主 07-21 08:42
    17

    @kkk哎 #14 是这样计算的吗?真不知道呢。

  • exit 楼主 07-21 08:43
    18

    @gamecrafters #15 应该是入和出吧。

  • BarkQ 07-21 08:50
    19

    我也让GPT搓了个,不过用的是AWS的接口


  • bigAlol 07-21 09:04
    20

    楼主哪里联通

  • exit 楼主 07-21 12:43
    21

    @BarkQ #19 ^-^

  • chevis 07-21 12:45
    22

    停机会不会变ip呀

  • dfff840 07-21 12:47
    23

    没看懂, 请问这是什么机子能跑到34W, 我的瓦工DC6最高8W

  • exit 楼主 07-21 13:07
    24

    @chevis #22 加一个静态 IP 呀,又不给钱

  • exit 楼主 07-21 13:07
    25

    @dfff840 #23 aws jp

  • pan260 07-21 13:15
    26

    不错,那我后面不用重复造轮子了

  • exit 楼主 07-21 14:15
    27

    @pan260 #26 很简单的,喂AI就可以

  • NES2025 07-21 14:22
    28

    值得学习 ^-^

* 帖子来源NodeSeek
返回