You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需user_data,自动在EC2实例创建时触发脚本执行?

实现EC2实例创建后自动运行脚本的自动化方案

你提到的EventBridge其实可以捕获EC2实例创建完成的事件,对应的事件类型是EC2 Instance State-change Notification——当实例状态切换为running时,就代表实例创建完成并可用,这就是你需要的触发点。下面是完整的实现方案:

步骤1:配置EventBridge规则

  • 进入EventBridge控制台创建新规则
  • 事件源选择「AWS服务」,服务名称选「EC2」,事件类型选择「EC2 Instance State-change Notification」
  • 在「具体状态」中勾选running,若需过滤特定实例,可添加标签匹配条件(比如只处理带AutoRunScript: true标签的实例)
  • 目标选择「Lambda函数」,指定后续要创建的Lambda函数

步骤2:创建Lambda函数(以Python为例)

Lambda需要具备执行SSM命令和查询EC2实例的权限,先给Lambda的IAM角色添加以下权限策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:SendCommand",
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        }
    ]
}

然后编写Lambda代码,从EventBridge事件中提取实例ID,再通过SSM发送命令执行脚本:

import boto3

ssm = boto3.client('ssm')

def lambda_handler(event, context):
    # 从事件中提取实例ID
    instance_id = event['detail']['instance-id']
    
    # 发送SSM命令执行自定义脚本,替换为你的实际命令
    response = ssm.send_command(
        InstanceIds=[instance_id],
        DocumentName='AWS-RunShellScript',
        Parameters={
            'commands': [
                '#!/bin/bash',
                'echo "自动脚本运行成功" >> /var/log/auto_script.log',
                'yum update -y',
                'systemctl enable --now nginx'
            ]
        }
    )
    
    print(f"已向实例 {instance_id} 发送命令,命令ID: {response['Command']['CommandId']}")
    return response

步骤3:确保实例满足前置条件

  • SSM Agent:Amazon Linux、Amazon Linux 2、Ubuntu 16.04+等官方镜像默认预装SSM Agent,其他系统需手动安装
  • 实例IAM角色:给实例附加AmazonSSMManagedInstanceCore权限策略,确保实例能和SSM服务通信
  • 网络连通性:实例需能访问SSM服务,可通过公网IP、NAT网关或VPC端点实现

额外注意事项

  • 手动创建实例时,记得绑定具备SSM权限的IAM角色,否则Lambda无法向其发送命令
  • 可在Lambda中添加错误处理逻辑,比如捕获SSM调用异常,记录到CloudWatch Logs或发送告警
  • 存量实例可通过EC2批量操作或手动调用SSM命令补运行脚本

内容的提问来源于stack exchange,提问作者Mit94

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 11:45:32