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

Lambda函数配置两个不同Launch Template仅第一个生效问题排查

为什么只有第一个Launch Template执行成功?

嘿,我一眼就揪出问题所在了——你在代码里重复定义了lambda_handler函数!在Python里,当你写两个同名函数的时候,后面的函数会直接覆盖掉前面的那个。也就是说,你的Lambda实际运行时,只会执行最后那个调用lt_a的lambda_handler,第一个函数根本不会被触发。你看到的第一个Launch Template创建成功的实例,大概率是之前测试留下的,或者你搞反了实际执行的逻辑~

要解决这个问题,你需要把两个创建实例的逻辑合并到同一个lambda_handler里,而且别忘了指定不同的可用区(毕竟你的需求是部署到两个AZ)。这里给你修正后的代码:

import boto3

# 调用EC2资源
ec2 = boto3.resource('ec2')

# 定义Launch Template
lt = { 'LaunchTemplateName': 'My_Launch_Template', 'Version': '1' }
lt_a = { 'LaunchTemplateName': 'My_Launch_Template_2', 'Version': '1' }

def lambda_handler(event, context):
    # 用第一个Launch Template在目标AZ创建实例
    instances_lt = ec2.create_instances(
        LaunchTemplate=lt,
        MinCount=1,
        MaxCount=1,
        Placement={'AvailabilityZone': 'us-east-1a'}  # 替换成你要的第一个AZ
    )
    print(f"从My_Launch_Template创建实例:{instances_lt[0].id}")
    
    # 用第二个Launch Template在另一个AZ创建实例
    instances_lt_a = ec2.create_instances(
        LaunchTemplate=lt_a,
        MinCount=1,
        MaxCount=1,
        Placement={'AvailabilityZone': 'us-east-1b'}  # 替换成你要的第二个AZ
    )
    print(f"从My_Launch_Template_2创建实例:{instances_lt_a[0].id}")

几个关键点说明:

  • 把两个创建实例的操作合并到同一个lambda_handler里,这样Lambda触发时会依次执行这两个操作
  • 通过Placement参数显式指定可用区,确保两个实例部署到不同的AZ,完全符合你的需求
  • 加入了打印语句,你可以在Lambda的日志里查看每个实例的创建情况,方便排查问题

另外,如果你的Launch Template本身已经指定了可用区,那可以去掉Placement参数,但显式指定会更稳妥,避免实例被随机分配到AZ。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:19:04