TatsuyaのテクTechブログ

IT技術を中心に勉強したことを書くブログ

Lambdaコンソール画面のモニタリング表示に必要だったアクセス許可

Lambdaのコンソール画面で引っかかった事象と解決方法の備忘録になります。

背景

社内で開催するAWSハンズオンで使うAWSアカウントに、参加者向けのポリシーを作る必要があった。 ハンズオンではLambdaをメインに触ってもらうが、他の案件や施策などで作った関数は非表示または実行できないように細かく設定していた。

事象

Lambdaコンソール画面のモニタリングタブを開くと表示されるはずのCloudWatch metricsなどが表示されない。エラーメッセージもないので何が悪いのか分からない状態。 CloudWatch関係のアクセス許可は設定済み。

何も表示されないモニタリングタブ

解決策

Lambdaの「ListVersionsByFunction」へのアクセス許可を与える。

表示されるようになったモニタリングタブ

解決のヒントは他のタブにありました。「エイリアス」「バージョン」タブを見ると「ListVersionsByFunction」のアクセス許可がないことを伝えるエラーメッセージがあったので許可を与えてみたところ、モニタリングタブも表示されるようになりました。

「バージョン」タブのエラーメッセージ

ListVersionsByFunctionとは?

事象は無事解決しましたが、せっかくなのでこの「ListVersionsByFunction」は何か調べてみました。 ListVersionsByFunction - AWS Lambda
list_versions_by_function - Boto3 1.34.39 documentation これは指定した関数名のバージョン固有の構成を含むバージョンのリストを返してくれるAPIになります。 以下のコードでどんなリクエストが返ってくるのか試してみました。

import json
import boto3

client = boto3.client('lambda')

def lambda_handler(event, context):

    response = client.list_versions_by_function(
        FunctionName='XXXX', #関数名を指定(必須)
        MaxItems=2 #リクエストに含むバージョンの最大数(任意)
    )

    print(json.dumps(response))

リクエストの結果は以下になります。(一部マスキング)

{
    "ResponseMetadata": {
        "RequestId": "9cdf1a2d-a8c5-40c1-8ac1-8dfd84d25a77",
        "HTTPStatusCode": 200,
        "HTTPHeaders": {
            "date": "Mon, 12 Feb 2024 06:21:58 GMT",
            "content-type": "application/json",
            "content-length": "1211",
            "connection": "keep-alive",
            "x-amzn-requestid": "XXXXX-XXXX-XXXX-XXXX-XXXXXXXX"
        },
        "RetryAttempts": 0
    },
    "Versions": [
        {
            "FunctionName": "XXXX",
            "FunctionArn": "arn:aws:lambda:ap-southeast-2:XXX:function:XXX:$LATEST",
            "Runtime": "python3.12",
            "Role": "arn:aws:iam::XXX:role/service-role/XXX-role-XXX",
            "Handler": "lambda_function.lambda_handler",
            "CodeSize": 543,
            "Description": "",
            "Timeout": 10,
            "MemorySize": 256,
            "LastModified": "2024-02-00T16:26:22.000+0000",
            "CodeSha256": "XXXXXXXXXX",
            "Version": "$LATEST", #最新バージョン
            "TracingConfig": {
                "Mode": "PassThrough"
            },
            "RevisionId": "XXXXX-XXXX-XXXX-XXXX-XXXXXXXX",
            "PackageType": "Zip",
            "Architectures": [
                "x86_64"
            ],
            "EphemeralStorage": {
                "Size": 512
            },
            "SnapStart": {
                "ApplyOn": "None",
                "OptimizationStatus": "Off"
            }
        }
    ]
}

取得するバージョンの最大数に2を指定しましたが、指定した関数にはバージョンが1つしかないので最新バージョンの構成情報だけ入っています。
リクエスト内容を見るとランタイムやロール名にメモリサイズなどの構成情報が取得できているのが分かります。CLIで構成情報を見たいときや、Lambdaの構成管理ツールを自作したいことがあればこのAPIを使うのが良さそうですね。
推察ですが、モニタリングタブのCloudWatch metrics表示するときにはこのAPIで取得できるバージョンとロール名の情報を使っているでしょうか?