1.脚本说明
脚本运行说明:
1.机器需要手动安装jq命令,以及配置好aws的命令环境信息,这个自行百度
2.下方脚本有注释需要手动修改两个位置,一个lambda_clone是克隆lambda的项目名,还有clone_name是克隆后的名字
3.脚本内有一个写死的--code 这个是必带参数,目前解决方案是手动在s3创建clone-lambda桶,本地生成txt文件在打包成zip上传的,就下方,脚本也有
COMMAND="aws lambda create-function --function-name \"clone_name\" --code S3Bucket=clone-lambda,S3Key=test.zip"
2.脚本代码
################### ################### ################### ################### ###################
# 下方是纯shell,复制后请根据下方脚本两处,请找到lambda_clone,修改成需要克隆的lambda名字,
# 修改clone_name则替换成克隆的名字,然后需要再s3创建clone-lambda项目,上传test.zip,这个
# --code 是必须的,我无法找到替代解决只能手动做一个替代,克隆后手动上传项目即可
# 克隆后麻烦比对一下,目前脚本仅对运行环境,代码层,常规配置,环境变量,vpc,rds这些克隆
# 如果需要其他则请查看官方文档,然后手动运行下方CONFIG_JSON变量检查环境,机器必须安装jq,手动配置aws命令
################### ################### ################### ################### ###################
#!/bin/bash
# 获取原函数配置
CONFIG_JSON=$(aws lambda get-function-configuration --function-name "lambda_clone")
# 检查 CONFIG_JSON 是否有效
if [[ -z "$CONFIG_JSON" || "$CONFIG_JSON" == "null" ]]; then
echo "获取配置失败,CONFIG_JSON 为空或为 null"
exit 1
fi
# 提取必要信息
RUNTIME=$(echo "$CONFIG_JSON" | jq -r '.Runtime // empty')
ROLE=$(echo "$CONFIG_JSON" | jq -r '.Role // empty')
HANDLER=$(echo "$CONFIG_JSON" | jq -r '.Handler // empty')
MEMORY_SIZE=$(echo "$CONFIG_JSON" | jq -r '.MemorySize // empty')
TIMEOUT=$(echo "$CONFIG_JSON" | jq -r '.Timeout // empty')
LAYERS=$(echo "$CONFIG_JSON" | jq -r '.Layers | map(.Arn) | join(",") // empty')
# 提取 VPC 信息
VPC_CONFIG=$(echo "$CONFIG_JSON" | jq -r '.VpcConfig // empty')
if [[ -n "$VPC_CONFIG" ]]; then
SUBNET_IDS=$(echo "$VPC_CONFIG" | jq -r '.SubnetIds | join(",") // empty')
SECURITY_GROUP_IDS=$(echo "$VPC_CONFIG" | jq -r '.SecurityGroupIds | join(",") // empty')
VPC_OPTION="--vpc-config SubnetIds=$SUBNET_IDS,SecurityGroupIds=$SECURITY_GROUP_IDS"
else
VPC_OPTION=""
fi
# 提取环境变量
ENV_VARS=$(echo "$CONFIG_JSON" | jq -r '.Environment.Variables // empty')
ENV_VARS_JSON=$(echo "$ENV_VARS" | jq -c '{Variables: .}')
# 生成创建函数的命令,使用指定的 S3Bucket 和 S3Key
COMMAND="aws lambda create-function --function-name \"clone_name\" --code S3Bucket=clone-lambda,S3Key=test.zip"
# 添加非空参数
[[ -n "$RUNTIME" ]] && COMMAND+=" --runtime \"$RUNTIME\""
[[ -n "$ROLE" ]] && COMMAND+=" --role \"$ROLE\""
[[ -n "$HANDLER" ]] && COMMAND+=" --handler \"$HANDLER\""
[[ -n "$MEMORY_SIZE" ]] && COMMAND+=" --memory-size $MEMORY_SIZE"
[[ -n "$TIMEOUT" ]] && COMMAND+=" --timeout $TIMEOUT"
[[ -n "$LAYERS" ]] && COMMAND+=" --layers \"$LAYERS\""
[[ -n "$ENV_VARS_JSON" ]] && COMMAND+=" --environment '$ENV_VARS_JSON'"
[[ -n "$VPC_OPTION" ]] && COMMAND+=" $VPC_OPTION"
# 输出命令并执行
echo "生成的命令:"
echo "$COMMAND"
eval "$COMMAND"