투케이2K

231. (python/파이썬) [AWS] [Lambda] 런타임 Python 3.13 - boto3 모듈 사용해 ListFunctions Lambda 함수 목록 리스트 조회 본문

Python

231. (python/파이썬) [AWS] [Lambda] 런타임 Python 3.13 - boto3 모듈 사용해 ListFunctions Lambda 함수 목록 리스트 조회

투케이2K 2026. 3. 1. 10:40
728x90
반응형

[개발 환경 설정]

개발 툴 : Aws / Lambda / Runtime Python 3.13

개발 언어 : python

 

[소스 코드]

 

// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------

- 언어 : Python


- 개발 툴 : Aws / Lambda / Runtime Python 3.13


- 개발 기술 : AWS Lambda 이벤트 동작 함수


- 사전) AWS Lambda 설명 : 

  >> Aws Lambda 는 서버 리스 FaaS 솔루션으로, 함수의 인스턴스를 실행하여 이벤트를 처리할 수 있습니다.

  >> Aws Lambda 는 이벤트에 응답하여 코드를 실행 하고 해당 코드에 필요한 컴퓨팅 리소스를 자동으로 관리합니다.


- 사전) AWS ListFunctions API 설명 : 

  >> ListFunctions 는 AWS Lambda 함수들의 목록을 조회하는 API 입니다.

  >> ListFunctions 는 각 함수의 버전별 구성 정보 (FunctionConfiguration) 일부를 포함하여 반환하며, 한 번의 호출에서 최대 50개 함수만 반환됩니다.

  >> ListFunctions 주요 기능 : 

    - Lambda 함수 목록 조회 : 계정에 존재하는 Lambda 함수 목록을 반환합니다. FunctionVersion=ALL을 설정하면 각 함수의 '모든 게시된 버전 + 게시되지 않은 버전(latest)' 을 포함합니다. (기본값은 latest 버전만 조회)
    - 페이징 (Pagination) 지원 : 50개 이상일 경우 Marker 값을 사용해 다음 페이지 조회 가능합니다
    - 일부 구성 필드만 반환 : 단, State, LastUpdateStatus 등의 정보는 반환하지 않으며 필요하면 GetFunction API로 조회해야합니다

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------

# ========================================================================
# [Aws] : [boto3 모듈] : IAM 계정 정보 사용해 Lambda 함수 목록 리스트 조회 - ListFunctions
# ========================================================================
# [참고] : API Gateway 와 연동 되어 Post 방식으로 Lambda 함수 호출 및 응답 값 반환 수행
# ========================================================================
"""
1. aws lambda python 3.13 런타임 환경 기반
2. boto3 모듈 기본 내장 AWS 사용 모듈
3. import ClientError : AWS SDK for Python 인 boto3 에서 발생할 수 있는 예외 중 하나로, AWS 서비스 호출 중 오류가 발생했을 때 사용됩니다
"""
# ========================================================================

import json
import os

import boto3
from botocore.exceptions import ClientError
from decimal import Decimal

def lambda_handler(event, context): # Lambda 호출 시 동작 되는 메인 함수

    # [event , context 정보 디버깅 로그 출력]
    print(f"DLOG = event : {event} / context {context}")


    # [Return 반환 Json 변수 선언]
    response = {
        "statusCode" : 0,
        "headers" : {},
        "body" : ""
    }


    # [AWS IAM 계정 AccessKey, SecretKey 변수 선언]
    iamAccessKey = "AK..A6"
    iamSecretKey = "mP..5J"
    iamRegion = "ap-northeast-2"  # 서울 리전


    # [명시적 인증 정보로 세션 생성]
    session = boto3.Session(
        aws_access_key_id=iamAccessKey,
        aws_secret_access_key=iamSecretKey,
        region_name = iamRegion
    )


    # [AWS 클라이언트 생성]
    aws_client = session.client('lambda')

    
    try:

      # ---------------------------------------------
      # ✅ [주요 에러 정리]
      # ---------------------------------------------
      # InvalidParameterValueException : 잘못된 파라미터(예: MasterRegion 형식 오류, FunctionVersion에 허용값 외 지정 등)
      # ---------------------------------------------
      # TooManyRequestsException : 호출 속도/동시성 등 쿼터 (요청 처리량) 초과
      # ---------------------------------------------
      # ServiceException : 내부 서비스 오류. 보통 재시도 시 복구
      # ---------------------------------------------


      # ---------------------------------------------
      # ✅ [요청 파라미터 생성]
      # ---------------------------------------------
      # MaxItems (int) : “응답에 포함할 항목 수 상한” 이지만 한 응답은 최대 50개
      # Marker (str) : 이전 응답의 NextMarker를 넣어 다음 페이지 조회
      # FunctionVersion (str) : "ALL" 지정 시 각 함수의 모든 게시 버전 + 미게시 버전 포함
      # MasterRegion (str) : Lambda@Edge 필터용. 지정 시 FunctionVersion="ALL" 필요. 일반 리전 나열에는 보통 사용하지 않음
      # ---------------------------------------------
      maxItems = 1 # 1회 호출: 최대 50개까지만 응답됨 (더 있으면 NextMarker 제공)
      

      # [요청 수행]
      aws_res = aws_client.list_functions(MaxItems=maxItems)

      print(f"DLOG = aws_res : {aws_res}")


      # [응답 데이터 파싱]
      functions = aws_res.get("Functions", [])


      # [리턴 변수 삽입] : ApiGateWay 응답 반환 설정 : Lambda 통합 요청 사용
      response["statusCode"] = 200 
      response["headers"] = {
        "Content-Type": "application/json",
        'Access-Control-Allow-Origin': '*',  # CORS 허용 (필요 시)
      }
      response["body"] = json.dumps({        
        "functions": functions
      })
        
    except ClientError as e: # AWS 서비스 호출 중 오류 발생 처리
        error_code = e.response['Error']['Code']
        error_message = e.response['Error']['Message']

        # [리턴 변수 삽입]
        response["statusCode"] = 400
        response["headers"] = {
          "Content-Type": "application/json",
          'Access-Control-Allow-Origin': '*',  # CORS 허용 (필요 시)
        }
        response["body"] = json.dumps(
          {
            "exception" : "ClientError",
            "error_code" : error_code,
            "error_message" : error_message
          }
        )


    # [리턴 반환 수행]
    return response

# ========================================================================
"""
{
  "statusCode": 200,
  "headers": {
    "Content-Type": "application/json",
    "Access-Control-Allow-Origin": "*"
  },
  "body": "{\"functions\": [{\"FunctionName\": \"event-queue-manager\", \"FunctionArn\": \"arn:aws:lambda:ap-northeast-2:123456789012:function:event-queue-manager\", \"Runtime\": \"python3.9\", \"Role\": \"arn:aws:iam::123456789012:role/event-queue-manager-role\", \"Handler\": \"lambda_function.lambda_handler\", \"CodeSize\": 858, \"Description\": \"\", \"Timeout\": 3, \"MemorySize\": 128, \"LastModified\": \"2025-06-17T09:39:24.502+0000\", \"CodeSha256\": \"tBdfsfef4fsfdsf43GKGrc=\", \"Version\": \"$LATEST\", \"Environment\": {\"Variables\": {\"SQS_QUEUE_URL\": \"https://sqs.ap-northeast-2.amazonaws.com/123456789012/event-queue\"}}, \"TracingConfig\": {\"Mode\": \"PassThrough\"}, \"RevisionId\": \"7c339..f8db5\", \"PackageType\": \"Zip\", \"Architectures\": [\"x86_64\"], \"EphemeralStorage\": {\"Size\": 512}, \"SnapStart\": {\"ApplyOn\": \"None\", \"OptimizationStatus\": \"Off\"}, \"LoggingConfig\": {\"LogFormat\": \"Text\", \"LogGroup\": \"/aws/lambda/event-queue-manager\"}}]}"
}
"""
# ========================================================================

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

[자바스크립트 AWS Lambda 함수 목록 리스트 조회 수행 - ListFunctions]

https://kkh0977.tistory.com/8645

https://blog.naver.com/kkh0977/224190780409


[자바스크립트 AWS Lambda 함수 세부 정보 조회 수행 - GetFunction]

https://kkh0977.tistory.com/8647

https://blog.naver.com/kkh0977/224193151696


[Amazon API Gateway] Aws API Gateway 게이트웨이 설명 정리 - 중개 서버

https://blog.naver.com/kkh0977/223827753479


[Aws Lambda] Aws 사이트에서 생성 된 Lambda 람다 검증 함수 리스트 및 내용 소스 코드 확인 방법

https://blog.naver.com/kkh0977/223765198383


[AWS] Lambda 람다 함수 수행 errorType Sandbox.Timedout 에러 발생

https://blog.naver.com/kkh0977/223962778768

// --------------------------------------------------------------------------------------
 
728x90
반응형
Comments