AWS Lambda:驱动云自动化的无服务器引擎

发布: (2026年1月13日 GMT+8 00:56)
5 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的文章正文内容,我将为您翻译成简体中文,并保持原有的格式、Markdown 语法以及代码块和链接不变。

概述

AWS Lambda 是一种无服务器计算服务,使您能够在无需管理服务器的情况下运行应用程序逻辑。您只需上传代码并定义触发器;AWS 会自动处理资源配置、扩展和执行。Lambda 支持多种语言,包括 Python、Node.js、Java、Go、.NET、Ruby 和自定义运行时。

关键收益

  • 无需配置或维护服务器 – 消除配置、打补丁和管理基础设施的运营负担。
  • 自动扩展 – 无需任何配置即可从零扩展到成千上万的并发请求。
  • 按使用付费计费 – 只为函数实际使用的计算时间付费;空闲时间不产生费用。
  • 深度集成 AWS 服务 – 与 S3、DynamoDB、CloudWatch、EventBridge、SNS/SQS、API Gateway 等原生协作。

Lambda 如何提升自动化

传统自动化通常需要专用服务器,导致成本高昂的闲置基础设施、手动扩展以及操作系统维护。Lambda 用以下方式取代了这种模式:

  • 按需的无服务器计算
  • 基于事件的执行
  • 自动资源管理
  • 降低运维工作负载

开发者可以专注于业务逻辑,而无需关注基础设施问题。

实际使用案例

1. 自动化 EBS 快照清理

组织经常创建 EBS 快照,却忘记删除旧的快照,导致不必要的存储费用。可以使用计划的 EventBridge 规则触发 Lambda 函数,实现:

  1. 检索账户拥有的所有快照。
  2. 确定超过定义保留期限的快照。
  3. 删除过期的快照。

收益: 节省存储成本,确保保留合规,消除手动清理工作。

# lambda_cleanup_snapshots.py
import boto3

ec2 = boto3.client('ec2')

def lambda_handler(event, context):
    snapshots = ec2.describe_snapshots(OwnerIds=['self'])['Snapshots']
    for snap in snapshots:
        snap_id = snap['SnapshotId']
        print(f"Deleting Snapshot: {snap_id}")
        try:
            ec2.delete_snapshot(SnapshotId=snap_id)
        except Exception as e:
            print(f"Error deleting {snap_id}: {e}")

    return {
        "status": "Completed",
        "deleted_snapshots": len(snapshots)
    }

2. 删除未挂载的 EBS 卷

当 EC2 实例被终止后,其 EBS 卷可能仍处于 available 状态,继续产生费用。计划的 Lambda 函数可以:

  1. 列出所有状态为 available 的卷。
  2. 删除每个未挂载的卷。

收益: 降低浪费的存储成本,提升云环境卫生,实现自动化清理。

# lambda_cleanup_volumes.py
import boto3

ec2 = boto3.client('ec2')

def lambda_handler(event, context):
    volumes = ec2.describe_volumes(
        Filters=[{'Name': 'status', 'Values': ['available']}]
    )['Volumes']

    for vol in volumes:
        vol_id = vol['VolumeId']
        print(f"Deleting Unattached Volume: {vol_id}")
        try:
            ec2.delete_volume(VolumeId=vol_id)
        except Exception as e:
            print(f"Error deleting {vol_id}: {e}")

    return {
        "status": "Completed",
        "deleted_volumes": len(volumes)
    }

3. 自动启动已停止的 EC2 实例

某些环境需要在工作时间或补丁窗口后启动 EC2 实例。每日计划触发(例如上午 9 点)可以运行 Lambda 函数,完成:

  1. 查找处于 stopped 状态的实例。
  2. 根据标签过滤或特定实例 ID 启动它们。

收益: 确保所需服务器准时可用,减少人工操作,支持 DevOps 自动化。

# lambda_start_instances.py
import boto3

ec2 = boto3.client('ec2')

def lambda_handler(event, context):
    response = ec2.describe_instances(
        Filters=[{'Name': 'instance-state-name', 'Values': ['stopped']}]
    )

    stopped_instances = [
        instance['InstanceId']
        for reservation in response['Reservations']
        for instance in reservation['Instances']
    ]

    if stopped_instances:
        print(f"Starting instances: {stopped_instances}")
        ec2.start_instances(InstanceIds=stopped_instances)
    else:
        print("No stopped instances found")

    return {
        "action": "start_instances",
        "instances": stopped_instances
    }

与其他 AWS 服务的集成

Lambda 可以由广泛的 AWS 事件触发,例如:

  • S3 – 对象创建或删除
  • DynamoDB – 流记录
  • CloudWatch – 定时 cron 作业或警报
  • EventBridge – 自定义事件总线
  • SNS / SQS – 消息通知
  • API Gateway – HTTP 请求

这些集成使得能够构建完全自动化、事件驱动的架构,而无需专用服务器。

Back to Blog

相关文章

阅读更多 »

你好,我是新人。

嗨!我又回到 STEM 的领域了。我也喜欢学习能源系统、科学、技术、工程和数学。其中一个项目是…