写在前面:如有问题,以你为准,

流程

  • Lambda 函数创建自定义 AWS Identity and Access Management (IAM) 策略和 IAM 角色。
  • EC2 实例的 Lambda 函数。
  • Lambda 函数。
  • EventBridge 计划任务,按计划运行您的函

EC2 ID

Lambda 函数

创建 IAM 策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:Start*",
                "ec2:Stop*"
            ],
            "Resource": "*"
        }
    ]
}

创建角色

选择上面创建IAM 策略

创建 Lambda

  • “基本信息”下,输入以下信息:对于“函数名称”
  • StopEC2InstancesStartEC2Instances。对于“运行时”,选择Python 3.13。在“权限”下,
  • “更改默认执行角色”。在“执行角色”下,选择“使用现有角色”。在“现有角色”下,选择上面创建 IAM 角色。

更新代码

注意:将us-west-1替换为您的实例所在的 AWS 区域,并将InstanceIds替换为要停止和启动的实例的 ID

停止实例

mport boto3  
region = 'us-west-1'
instances = ['i-0cbf27af2446a4644']
ec2 = boto3.client('ec2', region_name=region)

def lambda_handler(event, context):
    ec2.stop_instances(InstanceIds=instances)
    print('stopped your instances: ' + str(instances))

启动实例

import boto3  
region = 'us-west-1'
instances = ['i-0cbf27af2446a4644']
ec2 = boto3.client('ec2', region_name=region)

def lambda_handler(event, context):
    ec2.start_instances(InstanceIds=instances)
    print('started your instances: ' + str(instances))
  • “部署”。要提示成功更新函数

  • “配置”选项卡上,选择“常规配置”,然后选择“编辑”
  • 设置为 10 秒,然后选择“保存”

测试效果

关闭EC2 实例测试

创建 EventBridge 规则

  • EventBridge 控制台
  • “创建规则”
  • StopEC2InstancesStartEC2Instances
  • “描述”栏中,输入规则的描述。
  • 规则类型选择“计划”然后在 EventBridge Scheduler 中选择“继续”

  • “周期性计划”

根据需求编写

  • “选择目标”页面上,从“目标”下拉列表中选择Lambda 函数
  • “函数”,请选择用于停止或启动实例的函数。

SNS 邮件通知(可选)

创建主题订阅

创建主题

创建订阅

Lambda 选择目标

会发一个邮件让你确认,确认后就可以正常接收通知了

增加返回内容,可自行修改

import boto3  
region = 'us-east-1'
instances = ['i-0cbf27af2446a4644']
ec2 = boto3.client('ec2', region_name=region)

def lambda_handler(event, context):
    ec2.start_instances(InstanceIds=instances)
    return {
        'statusCode': 200,
        'body': {
            'message': 'Started instances successfully',
            'instances': instances,
            'details': "start"
        }
    }

更多推荐