Inactive 상태의 Lambda 함수를 일괄로 시작해 준다
애초에 왜 그런 일을 하고 싶었어?
Lambda는 매우 편리하지만 몇 주 동안 유휴 상태가 계속되면 함수가 Inactive 상태가됩니다. 그리고 Inactive 상태가 된 함수를 기동하려고 하면 처음에는 기동에 실패합니다.
이 탓에 약간 트러블했기 때문에, 일단 정기적으로 계정 상에 존재하는 모든 Lambnda를 기동해 버린다고 하는 것으로, AWSCLI로 Lambda를 일괄로 기동하는 쉘을 작성했습니다.
Lambda 서비스가 구성된 리소스를 회수하기에 충분한 시간 동안 유휴 상태인 함수는 Inactive 상태로 이동합니다. Inactive 상태의 함수를 호출하면 실패하고 해당 자원이 다시 작성될 때까지 함수가 Pending 상태로 설정됩니다. 자원을 다시 작성하지 못하면 함수는 Inactive 상태로 돌아갑니다.
AWS Lambda 함수 상태 추적 보다 인용
실행 환경
$ aws --version
aws-cli/1.18.219 Python/3.6.0 Windows/10 botocore/1.19.59
$ bash --version
GNU bash, version 4.3.42(5)-release (x86_64-pc-msys)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
하지만 어떻게 시작합니까?
Lambda의 레퍼런스를 읽었습니다만, 원래 「기동한다」라고 하는 커멘드는 준비되어 있지 않다고 합니다. 기동하려면 invoke (실제로 람다를 실행하기 위한 커맨드) 밖에 준비되어 있지 않은 것 같았습니다만, 노력해 낚아 보았더니 publish-version 라는 커멘드를 발견했습니다.
Creates a version from the current code and configuration of a function. Use versions to create a snapshot of your function code and configuration that doesn't change.
AWS Lambda doesn't publish a version if the function's configuration and code haven't changed since the last version. Use UpdateFunctionCode or UpdateFunctionConfiguration to update the function before publishing a version.
본래는 함수의 버전 관리를 위한 커맨드인 것 같습니다만, 함수로 변경하지 않는 경우는 아무것도 갱신하지 않는다고 하는 것. 하지만이 명령을 실행하면 어떻게 함수가 시작되었습니다! !
그래서 이것을 이용하면 모든 함수를 시작할 수 있을 것 같습니다.
마지막으로 만들어진 쉘이 여기
make_active_all_lambda.sh#!/bin/bash -eu
all_lambda_name_list=()
inactive_lambda_name_list=()
# 最初にアカウント上に存在するすべての関数名を取得
function get_all_lambda_name_list() {
readonly lambda_list=$(aws lambda list-functions \
| jq -r '.Functions')
len=$(echo $lambda_list | jq length)
for i in $( seq 0 $(($len - 1)) ); do
all_lambda_name_list+=($(echo $lambda_list | jq -r .[$i].FunctionName))
done
}
# 関数がActiveかどうかの判定
function is_lambda_active() {
local lambda_name=$1
local state=$(aws lambda get-function-configuration \
--function-name $lambda_name \
| jq -r '.State')
if [ $state = "Active" ]; then
echo "true"
else
echo "false"
fi
}
# Activeじゃない関数だけ抽出
function filter_inactive_resources() {
echo == following lambda is inacive ==
for lambda_name in ${all_lambda_name_list[@]}; do
is_active=$(is_lambda_active $lambda_name)
if [ "${is_active}" = "false" ]; then
echo $lambda_name
inactive_lambda_name_list+=($lambda_name)
fi
done
echo == thst\'s all ==
}
# Avctiveじゃない関数をpublish-versionする
function publish_lambda() {
if [ ${#inactive_lambda_name_list[@]} -eq 0 ]; then
echo there is no lambda to publish
return 0
fi
for lambda_name in ${inactive_lambda_name_list[@]}; do
echo now publishing $lambda_name
aws lambda publish-version --function-name $lambda_name
aws lambda wait function-active --function-name $lambda_name # 関数がActiveになるまで待つ
done
}
get_all_lambda_name_list
filter_inactive_resources
publish_lambda
걱정되는 것
함수는 시작하는 것만으로는 돈은 들지 않을 것입니다만, AWS측에 있어서는 그렇게 하고 싶지 않은 것입니까? 만약 이 근처 자세한 사람이 있으면 가르쳐 주었으면 합니다!
가능하면 Inactive 상태에서의 invoke에서도, 실패로 하지 않고 기동시키고 나서 실행할 때까지 해 주었으면 한다.
Reference
이 문제에 관하여(Inactive 상태의 Lambda 함수를 일괄로 시작해 준다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/foie/items/d268f7d46adf5a279385
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ aws --version
aws-cli/1.18.219 Python/3.6.0 Windows/10 botocore/1.19.59
$ bash --version
GNU bash, version 4.3.42(5)-release (x86_64-pc-msys)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
Lambda의 레퍼런스를 읽었습니다만, 원래 「기동한다」라고 하는 커멘드는 준비되어 있지 않다고 합니다. 기동하려면 invoke (실제로 람다를 실행하기 위한 커맨드) 밖에 준비되어 있지 않은 것 같았습니다만, 노력해 낚아 보았더니 publish-version 라는 커멘드를 발견했습니다.
Creates a version from the current code and configuration of a function. Use versions to create a snapshot of your function code and configuration that doesn't change.
AWS Lambda doesn't publish a version if the function's configuration and code haven't changed since the last version. Use UpdateFunctionCode or UpdateFunctionConfiguration to update the function before publishing a version.
본래는 함수의 버전 관리를 위한 커맨드인 것 같습니다만, 함수로 변경하지 않는 경우는 아무것도 갱신하지 않는다고 하는 것. 하지만이 명령을 실행하면 어떻게 함수가 시작되었습니다! !
그래서 이것을 이용하면 모든 함수를 시작할 수 있을 것 같습니다.
마지막으로 만들어진 쉘이 여기
make_active_all_lambda.sh#!/bin/bash -eu
all_lambda_name_list=()
inactive_lambda_name_list=()
# 最初にアカウント上に存在するすべての関数名を取得
function get_all_lambda_name_list() {
readonly lambda_list=$(aws lambda list-functions \
| jq -r '.Functions')
len=$(echo $lambda_list | jq length)
for i in $( seq 0 $(($len - 1)) ); do
all_lambda_name_list+=($(echo $lambda_list | jq -r .[$i].FunctionName))
done
}
# 関数がActiveかどうかの判定
function is_lambda_active() {
local lambda_name=$1
local state=$(aws lambda get-function-configuration \
--function-name $lambda_name \
| jq -r '.State')
if [ $state = "Active" ]; then
echo "true"
else
echo "false"
fi
}
# Activeじゃない関数だけ抽出
function filter_inactive_resources() {
echo == following lambda is inacive ==
for lambda_name in ${all_lambda_name_list[@]}; do
is_active=$(is_lambda_active $lambda_name)
if [ "${is_active}" = "false" ]; then
echo $lambda_name
inactive_lambda_name_list+=($lambda_name)
fi
done
echo == thst\'s all ==
}
# Avctiveじゃない関数をpublish-versionする
function publish_lambda() {
if [ ${#inactive_lambda_name_list[@]} -eq 0 ]; then
echo there is no lambda to publish
return 0
fi
for lambda_name in ${inactive_lambda_name_list[@]}; do
echo now publishing $lambda_name
aws lambda publish-version --function-name $lambda_name
aws lambda wait function-active --function-name $lambda_name # 関数がActiveになるまで待つ
done
}
get_all_lambda_name_list
filter_inactive_resources
publish_lambda
걱정되는 것
함수는 시작하는 것만으로는 돈은 들지 않을 것입니다만, AWS측에 있어서는 그렇게 하고 싶지 않은 것입니까? 만약 이 근처 자세한 사람이 있으면 가르쳐 주었으면 합니다!
가능하면 Inactive 상태에서의 invoke에서도, 실패로 하지 않고 기동시키고 나서 실행할 때까지 해 주었으면 한다.
Reference
이 문제에 관하여(Inactive 상태의 Lambda 함수를 일괄로 시작해 준다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/foie/items/d268f7d46adf5a279385
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#!/bin/bash -eu
all_lambda_name_list=()
inactive_lambda_name_list=()
# 最初にアカウント上に存在するすべての関数名を取得
function get_all_lambda_name_list() {
readonly lambda_list=$(aws lambda list-functions \
| jq -r '.Functions')
len=$(echo $lambda_list | jq length)
for i in $( seq 0 $(($len - 1)) ); do
all_lambda_name_list+=($(echo $lambda_list | jq -r .[$i].FunctionName))
done
}
# 関数がActiveかどうかの判定
function is_lambda_active() {
local lambda_name=$1
local state=$(aws lambda get-function-configuration \
--function-name $lambda_name \
| jq -r '.State')
if [ $state = "Active" ]; then
echo "true"
else
echo "false"
fi
}
# Activeじゃない関数だけ抽出
function filter_inactive_resources() {
echo == following lambda is inacive ==
for lambda_name in ${all_lambda_name_list[@]}; do
is_active=$(is_lambda_active $lambda_name)
if [ "${is_active}" = "false" ]; then
echo $lambda_name
inactive_lambda_name_list+=($lambda_name)
fi
done
echo == thst\'s all ==
}
# Avctiveじゃない関数をpublish-versionする
function publish_lambda() {
if [ ${#inactive_lambda_name_list[@]} -eq 0 ]; then
echo there is no lambda to publish
return 0
fi
for lambda_name in ${inactive_lambda_name_list[@]}; do
echo now publishing $lambda_name
aws lambda publish-version --function-name $lambda_name
aws lambda wait function-active --function-name $lambda_name # 関数がActiveになるまで待つ
done
}
get_all_lambda_name_list
filter_inactive_resources
publish_lambda
함수는 시작하는 것만으로는 돈은 들지 않을 것입니다만, AWS측에 있어서는 그렇게 하고 싶지 않은 것입니까? 만약 이 근처 자세한 사람이 있으면 가르쳐 주었으면 합니다!
가능하면 Inactive 상태에서의 invoke에서도, 실패로 하지 않고 기동시키고 나서 실행할 때까지 해 주었으면 한다.
Reference
이 문제에 관하여(Inactive 상태의 Lambda 함수를 일괄로 시작해 준다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/foie/items/d268f7d46adf5a279385텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)