最近、複数のLambda関数のとある環境変数を更新しなければならなくなったのですが、関数が100個くらいあり、マネジメントコンソールから環境変数の値を含むLambda関数を検索する機能も見当たらず、手動で探しきれませんでした。
そこで調査を進めると、AWS CLIやBoto3(Python SDK)を利用すれば、該当の環境変数を含む関数をフィルタリングすることができることが可能だとわかりました。
似たような記事がたくさんありそうなのですが、駆け出しエンジニア向けに調査内容をあらためてまとめました。
AWS CLIをつかう方法
jqコマンドでフィルタリングして、特定の環境変数を含む関数を抽出します。
aws lambda list-functions --query 'Functions[].[FunctionName,Environment]' --output json | jq '.[] | select(.[1].Variables.YOUR_VARIABLE_NAME == "your-value")'
こんな感じで出力されます。
{
"Reservations": [
{
"Groups": [],
"Instances": [
{
"AmiLaunchIndex": 0,
"ImageId": "<ami>",
"InstanceId": "<instance-id>",
"InstanceType": "t2.micro",
"KeyName": "<key-name>",
"LaunchTime": "2022-01-17T15:07:53+00:00",
"Monitoring": {
"State": "disabled"
},
"Placement": {
"AvailabilityZone": "ap-northeast-1a",
"GroupName": "",
"Tenancy": "default"
},
...
}
Boto3をつかう方法
Boto3で特定の環境変数の値を持つLambda関数を検索する場合、以下のPythonコードを使用できます。
Lambda関数の一覧を取得し、指定された環境変数名(YOUR_VARIABLE_NAME)と値(your-value)を持つ関数をフィルタリングします。
import boto3
def find_lambda_functions_with_env_var(variable_name, variable_value):
lambda_client = boto3.client('lambda')
functions = lambda_client.list_functions()['Functions']
matched_functions = []
for function in functions:
env_variables = function.get('Environment', {}).get('Variables', {})
if variable_name in env_variables and env_variables[variable_name] == variable_value:
matched_functions.append(function['FunctionName'])
return matched_functions
if __name__ == "__main__":
your_variable_name = "YOUR_VARIABLE_NAME"
your_value = "your-value"
matched_functions = find_lambda_functions_with_env_var(your_variable_name, your_value)
print(matched_functions)
※Google Colaboratoryで実行する際は、Boto3のインストールとAWSクレデンシャルの設定を忘れずに行いましょう。
!pip install boto3
import os
os.environ['AWS_ACCESS_KEY_ID'] = 'your-access-key'
os.environ['AWS_SECRET_ACCESS_KEY'] = 'your-secret-key'
os.environ['AWS_DEFAULT_REGION'] = 'your-default-region'