0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

大量にあるLambda Functionsのトリガーとの紐付き一覧を出力する

Last updated at Posted at 2021-10-18

Lambdaって便利でついつい量産しちゃいますよね。
負債は負債として、量産してしまったLambda関数を整理する際に、どのトリガーから起動する設定になっているかを出したくなった際のエントリーになります。

トリガーを見れば、どのLambda関数がもう不要なのかの当てが付くかなと思い。

環境

$ sw_vers
ProductName:	macOS
ProductVersion:	11.5.2
BuildVersion:	20G95
$ uname -mrsv
Darwin 20.6.0 Darwin Kernel Version 20.6.0: Wed Jun 23 00:26:27 PDT 2021; root:xnu-7195.141.2~5/RELEASE_ARM64_T8101 arm64

aws-vaultのセットアップ

本エントリーでは認証情報を直接ローカルに保存するaws configureではなく、aws-vaultを利用します。

$ brew install aws-vault
$ aws-vault add default
Enter Access Key ID: XXXXXXXXXXXXXXXXXXXX
Enter Secret Access Key:
(ここでプロンプトが立ち上がり、aws-vaultの新しいパスワードの設定を行います。)

Added credentials to profile "default" in vault
$ vi ~/.aws/config
[profile default]
region=us-west-2
mfa_serial=arn:aws:iam::000000000000:mfa/shionel31

[profile hoge-dev]
source_profile=default
region=us-west-2
role_arn=arn:aws:iam::111111111111:role/OrganizationAccountAccessRole
mfa_serial=arn:aws:iam::000000000000:mfa/shionel31
$ aws-vault exec hoge-dev -- aws sts get-caller-identity
Enter token for arn:aws:iam::000000000000:mfa/shionel31: 432975
{
    "UserId": "AAAAAAAAAAAAAAAAAAAA:2222222222222222222",
    "Account": "111111111111",
    "Arn": "arn:aws:sts::111111111111:assumed-role/OrganizationAccountAccessRole/2222222222222222222"
}

432975の部分はMFAトークンの例です。
Image 2021-10-18 at 4.25.38 PM.jpg
※↑Authyというアプリのスクショ。

プロンプト例
ss 2021-10-18 16.21.32.png

キーチェーンに古い認証情報が残ってしまった際にリセットする便利コマンド

$ aws-vault remove hoge-dev
$ rm -fr ~/Library/Keychains/aws-vault.keychain-db

結論

$ aws-vault exec hoge-dev -- \
aws lambda list-functions \
| jq -r '.Functions[] | .FunctionName' \
| xargs -I% -n1 aws-vault exec hoge-dev -- \
aws lambda get-policy --function-name % --query Policy --output text 2> /dev/null \
| jq -r '.Statement[] | [.Resource[47:], .Condition.ArnLike["AWS:SourceArn"]] | @csv'
Enter token for arn:aws:iam::000000000000:mfa/shionel31: xxxxxx
"HogeTelemetry","arn:aws:iot:us-west-2:111111111111:rule/HogeTopic"
"HogeConversion","arn:aws:s3:::hoge-image-bucket"
"HogeAPI","arn:aws:execute-api:us-west-2:111111111111:qjor8q08ne/*/POST/hoge"
"HogeTarget","arn:aws:elasticloadbalancing:us-west-2:111111111111:targetgroup/alb-hoge-tg/63dbffcb04e4b2e1"
"HogeStream","arn:aws:kinesis:us-west-2:111111111111:stream/update-hoge-stream"
...

Lambdaの起動トリガーをFunction名と対で出力できました。

  • | xargs -I% -n1 ... --function-name %の部分はパイプ前のコマンドの出力(リスト形式)を一個ずつ次のコマンドに渡す処理
  • aws lambda get-policyはトリガーを取得するためのコマンド。一見get-function-configurationかと思ったのですが取得できず 参照
  • 2> /dev/nullは、トリガー(実態としてはポリシー)が設定されていないLambda関数に対して当コマンドを実行すると

An error occurred (ResourceNotFoundException) when calling the GetPolicy operation: The resource you requested does not exist.`

  • というエラーが発生してしまうため、標準出力結果を綺麗なCSVにするために標準エラーに投棄
  • jq内の.Resource[47:]は、純粋にFunction名だけ欲しかったのでARNのprefix(arn:aws:lambda:us-west-2:111111111111:function:)を無理やり除去

おわりに

お使いの環境によってはすんなりいかない場合もあるかとは思います。
しかしjq便利だなー

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?