[英]Download AWS Lambda source package as Zip from AWS CLI
我想下载 AWS Lambda source package 作为 Zip。我知道有一个选项可以下载 lambda function 作为 SAM 文件或部署 package 在 8835588384713 但是我无权访问生产环境中的 AWS 控制台。 请参阅随附的屏幕。
以下是两个可用选项。
我想使用最少 shell 个脚本命令在 AWS CLI 中执行相同的功能。 下载 zip 格式的 lambda 源后,我将通过 AWS CLI 在生产环境中创建 lambda function。
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 --function-name function_name --query 'Code.Location' | xargs wget -o function_name.zip
你可以在这里找到答案:
https://gist.github.com/nemaniarjun/defdde356b6678352bcd4af69b7fe529还提供了一个简单的 bash 解决方案
# 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
编辑:感谢原作者。 只是共享代码,因为 URL 以后可能无法访问。
查看您的要求,您可以使用aws lambda get-function
CLI 命令下载 lambda 函数部署包。
见概要。
get-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
但是这个命令不会给你 zip 文件。 如果执行命令。
aws lambda get-function --function-name MyLambdaFunction
它会给你类似于下面的结果。
{
"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。
我根据之前共享的原始 Python 脚本创建了一个简单的 Bash 脚本。
不同之处在于它接受 JSON 输入并按顺序而不是并行下载文件。
# !/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
您可以使用此处提供的shell脚本
安装jq:
# for e.g on a Debian based distro (ubuntu, mint, MXlinux, ..)
sudo apt install jq
使用此脚本(将其粘贴到名为download_all_lambda_functions.sh
的文件中,然后运行bash download_all_lambda_functions.sh
)
download_code () {
# clean double quotes if found
local OUTPUT=${1//\"/}
local dest=./lambda_functions/$OUTPUT.zip
local URL=$(aws lambda get-function --function-name $OUTPUT --query 'Code.Location')
# Using curl instead of wget
echo $URL | xargs curl -o $dest
}
mkdir -p lambda_functions
for run in $(aws lambda list-functions | jq -r .Functions[].FunctionName);
do
echo Found lambda function: $run
download_code "$run"
done
echo "Completed Downloading all the Lamdba Functions!"
我相信所选答案的代码已损坏,因为 AWS CLI 正在返回一个 JSON 文件,使用jq
等工具可以更好地探索该文件
在这里找到要点
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.