🐥

【検証不十分】【lambda編】AWS Boto3 by Pythonで特定タグ未付与のリソース抽出

2023/03/15に公開約2,100字

1. 本稿の概要

◆ ゴール

以下のような機能を満たすPythonスクリプトを作成しました。
こちらはlambda向けです。

  • LambdaFunctionsで特定タグ(Owner)の付与状況をリスト化
  • ローカル環境でI/Oが自由なPythonスクリプトとして実行
  • その抽出結果はCSVカンマ区切り形式でローカルに出力

◆ 背景、前提、その他サービスまとめなど

全体論はこちら を参照
※単に見たり付与するだけならタグエディタで見るのが一番楽かとは思います。

2. 開発

◆ 概説

lambdaのID、Ownerタグの一覧を出力します。
とりあえず単体では東京リージョンのみを対象としています。

Lambdaに限らずかもしれませんが、弊環境ではFunctionの数が多く1callで取得できる上限以上をリスト化する必要がありました。結構思いつきで書いてつなぎ合わせた感があるので動作検証が不十分です。
1コールで50ずつFunctionsが得られるので50区切りで再帰的に処理しています。

◆ コード

check_owner_tag_cloudfront.py
import boto3 # pip install boto3

def check_owner_tag_lambda(arg_nextmarker='', arg_region = 'ap-northeast-1', arg_num=0):

    lambdaclient = boto3.client(service_name = 'lambda', region_name=arg_region)
    if arg_nextmarker == '':
        resp_data = lambdaclient.list_functions(MaxItems=50) # 1callで得られる最大のリターンは50まで。NextMakerを使うと次もみられる
    else:
        resp_data = lambdaclient.list_functions(MaxItems=50, Marker=arg_nextmarker)

    for num, function in enumerate(resp_data['Functions'], 1+arg_num):

        resp_tags = lambdaclient.list_tags(
            Resource=function['FunctionArn']
        )
        lambda_name = function['FunctionName']
        lambda_owner = resp_tags['Tags'].get('Owner', 'Ownerタグなし')
        print(str(num)  + ',' + str(arg_region) + ',' + lambda_name + ',' + lambda_owner)
        if (num % 50) == 0:
            check_owner_tag_lambda(resp_data['NextMarker'], arg_region, arg_num+50)

if __name__ == "__main__":
    check_owner_tag_lambda()

◆ 実行例

py .\check_owner_tag_lambda.py
1,ap-northeast-1,web-server,Ownerタグなし
2,ap-northeast-1,xxxx_for_Lambda,Ownerタグなし
...
76,ap-northeast-1,authtest,kangaezaru
77,ap-northeast-1,hello,testtt

◆ 参考等

Discussion

ログインするとコメントできます