Aws lambda 从AWS CLI下载AWS Lambda源程序包(以Zip格式)

Aws lambda 从AWS CLI下载AWS Lambda源程序包(以Zip格式),aws-lambda,aws-cli,Aws Lambda,Aws Cli,我想下载AWS Lambda源代码包作为Zip。我知道在lambda控制台中可以选择下载lambda函数作为SAM文件或部署包。但我无法在生产环境中访问AWS控制台。 请参阅附带的屏幕 下面是两个可用选项 我希望在AWS CLI中使用最少的shell脚本命令实现相同的功能。以zip格式下载lambda源代码后,我将通过AWS CLI在生产环境中创建lambda函数 aws lambda create-function --region [AWSREGION] --function-name

我想下载AWS Lambda源代码包作为Zip。我知道在lambda控制台中可以选择下载lambda函数作为SAM文件或部署包。但我无法在生产环境中访问AWS控制台。 请参阅附带的屏幕

下面是两个可用选项

我希望在AWS CLI中使用最少的shell脚本命令实现相同的功能。以zip格式下载lambda源代码后,我将通过AWS CLI在生产环境中创建lambda函数

aws lambda create-function --region [AWSREGION] --function-name [FUNCTION] --zip-file fileb://[ZIPFILE] --role [ROLEARN] --handler [FILENAME].lambda_handler  --description="[FUNCTIONDESCRIPTION]"  --runtime [RUNTIME] --timeout [TIMEOUT] --memory-size [MEMORYSIZE] --profile [PROFILENAME]

请帮我解决这个问题,我们非常感谢您在linux shell脚本命令方面的帮助。

根据您的要求,您可以使用
aws lambda get function
CLI命令下载lambda function部署包

见大纲

  get-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
它将给你类似于下面的结果

{
    "Code": {
        "RepositoryType": "S3",
        "Location": "https://awslambda-eu-west-1-tasks.s3.eu-west-1.amazonaws.com/snapshots/014747066885/MyLambdaFunction-aa227fd0-4d4a-4690-9447-6e1818aaa752?versionId=HoQu5vbudzRpYLe0laIVQIahVN2NVxET&X-Amz-Security-Token=FQoGZXIvYXdzEIr%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDB%2FdpZU6fCyQG%2ByhJyK3A7Dycy5L9hVWmExELuh6f0jFskmKJ62GhGf3J7LC94wB5E5CU2jplsLhw%2Fd%2FmmmJktzo07wI3XLWvSj6zxbHvJFdscCAqF7AYZOhRQR4mOIN6HkanRrHMBHeoTeDqOT6Yk8elhQYfno7dSHP%2FwdNVutS9P0SNmDLDhrxNLAxceDz8nBj1N9AZqhfMwV65OCtTubgLaLSFei75DosXIUaylWsrXgrz4B%2F6bo8LmeDxhNcYefGOBMvwKtyFSdPAP1TulcJpwQIUIC3losjtcTnRt9CSTxhn7TPMDfw4QI5ITKvxgNzO5T2TF2cJVqbotFFVdqPQNHuL2XLMNU24BwjSwF%2FsKWlV6tygXhdQWpTrJFRW%2FqxV%2BX2C1yq0sjpWtc5SerkrmqHvvDjA0L7GlOpG8Q1BLHyQWj0FPmuhrrPyjyFCNqVkpo6eUl35yK%2BHWa1hsXoEPyccoqdHa4gU%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20190203T092717Z&X-Amz-SignedHeaders=host&X-Amz-Expires=600&X-Amz-Credential=ASIA54NGUQSHZ4CZTFNT%2F20190203%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=ee3bbef557cff32f86d26abc769b14"
    },
    "Configuration": {
        "TracingConfig": {
            "Mode": "PassThrough"
        },
        "Version": "$LATEST",
        "CodeSha256": "l6q5ldtk0YEhEv3wnJhhCiAPyRd2XB1/8nT+ZWk=",
        "FunctionName": "MyLambdaFunction",
        "MemorySize": 3008,
        "RevisionId": "a3bdbef4-8616-4c6a-ba19-074acb80b143",
        "CodeSize": 6083880,
        "FunctionArn": "arn:aws:lambda:us-east-1:014747066885:function:MyLambdaFunction",
        "Handler": "lambda_function.lambda_handler",
        "Role": "arn:aws:iam::014747066885:role/lambda_admin",
        "Timeout": 900,
        "LastModified": "2019-01-30T10:09:50.283+0000",
        "Runtime": "python3.6",
        "Description": "Test MyLambdaFunction"
    }
}
现在,您需要将其转换为zip格式的文件,并进行进一步调整

您可以使用以下两个命令以zip文件格式获取lambda函数

aws lambda get-function --function-name MyLambdaFunction --profile [AWS_ROFILE] | grep "Location" | awk -F ": " '{ print $2}' | sed 's/"//g' > ~/MyLambdaFunction.txt
wget -i ~/MyLambdaFunction.txt -O ~/MyLambdaFunction.zip
下面是一个完整的shell脚本命令

FUNCTION_NAME=${1}
AWS_PROFILE=[AWSPROFILE]
aws lambda get-function --function-name ${FUNCTION_NAME} --profile ${AWS_PROFILE} | grep "Location" | awk -F ": " '{ print $2}' | sed 's/"//g' > ~/${FUNCTION_NAME}.txt
wget -i ~/${FUNCTION_NAME}.txt -O ~/${FUNCTION_NAME}.zip
您可以将其转换为shell脚本(例如getLambdaFunction.sh),并使用下面的命令执行它

./getLambdaFunction.sh [FUNCTIONNAME]
将lambda包作为zip文件获取后,可以创建lambda函数

aws lambda create-function --region us-east-1 --function-name MyLambdaFunction --zip-file fileb://MyLambdaFunction.zip --role arn:aws:iam::[AWSACCOUNT]:role/service-role/[LAMBDAROLE] --handler lambda_function.lambda_handler --description="My Lambda Function" --runtime "python3.6" --profile [AWSPROFILE]

作为示例:假设MyLambdaFunction是lambda函数名,us-east-1是aws区域,运行时是python 3.6

你可以在这里找到答案:

还提供了一个简单的bash解决方案

编辑
归功于原作者。只是共享代码,因为以后可能无法访问URL。

我根据先前共享的原始Python脚本创建了一个简单的Bash脚本

区别在于它接受JSON输入并按顺序下载文件,而不是并行下载

击打一个班轮

aws lambda get-function --function-name function_name --query 'Code.Location'  | xargs wget -o function_name.zip
# Parallelly download all aws-lambda functions 
# Assumes you have ran `aws configure` and have output-mode as "text"
# Works with "aws-cli/1.16.72 Python/3.6.7 Linux/4.15.0-42-generic botocore/1.12.62"
download_code () {
    local OUTPUT=$1
    aws lambda get-function --function-name $OUTPUT | head -n 1 | cut -f 2 | xargs wget -O ./lambda_functions/$OUTPUT.zip  
}

mkdir lambda_functions
for run in $(aws lambda list-functions | cut -f 6 | xargs);
doth
    download_code "$run" &
done
# !/bin/sh
## List the names of all Lambda functions. Can be constrained by using --max-items
for i in `aws lambda list-functions | grep FunctionName | cut -d ":" -f2 | cut -d '"' -f2`
do
  echo 'Fetching code for function:' $i
  ## Using each name, get the function details and then download the zip file containing the source code.
  aws lambda get-function --function-name $i | grep Location | awk -F' ' '{print $2}' | xargs wget -O $i.zip
  echo 'Code downloaded to' $i.zip
done
aws lambda get-function --function-name function_name --query 'Code.Location'  | xargs wget -o function_name.zip