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

通过Lambda启动Windows EC2时Powershell Userdata未执行求助

问题原因及修复方案
  • 核心问题:缺少Base64编码处理
    AWS EC2的UserData参数要求传入Base64编码后的内容,直接传入原始字符串会导致EC2服务端无法正确解析,是本次脚本未执行的最核心原因。
  • 次要排查点:代码缩进异常(粘贴场景大概率为格式丢失)
    你贴出的代码中ec2.run_instances调用不在lambda_handler函数作用域内,若实际运行代码也是该写法,会导致函数触发时未执行传入UserData的实例创建逻辑,如果你确认实例能正常启动,可忽略该点,仅排查编码问题。
  • 可选优化:避免脚本前导冗余空格+补充执行权限
    原始init_script中每行PowerShell代码带大量前导缩进,同时可补充PowerShell执行策略设置,避免权限限制导致脚本执行失败。
修正后的代码示例
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import boto3
import base64

AMI = os.environ["AMI"]
INSTANCE_TYPE = os.environ["INSTANCE_TYPE"]
KEY_NAME = os.environ["KEY_NAME"]
SUBNET_ID = os.environ["SUBNET_ID"]
REGION = os.environ["REGION"]
ec2 = boto3.client("ec2", region_name=REGION)

def lambda_handler(event, context):
    init_script = '''<powershell>
Set-ExecutionPolicy Unrestricted -Force
$USERNAME="Latchu"
$PASSWORD="eM2An@ydxk"
net user /add $USERNAME $PASSWORD
</powershell>'''
    # 手动对UserData做Base64编码
    encoded_script = base64.b64encode(init_script.encode('utf-8')).decode('utf-8')
    instance = ec2.run_instances(
        ImageId=AMI,
        InstanceType=INSTANCE_TYPE,
        KeyName=KEY_NAME,
        SubnetId=SUBNET_ID,
        MaxCount=1,
        MinCount=1,
        InstanceInitiatedShutdownBehavior="terminate",
        UserData=encoded_script,
    )
后续排查方法

如果修改后仍未执行,可登录Windows实例查看UserData执行日志定位问题,日志路径为:C:\ProgramData\Amazon\EC2-Windows\Launch\Log\UserdataExecution.log

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 21:36:03