[AWS Lambda/API Gateway] queryStringParameter(URL 쿼리 문자열 파라미터)를 Lambda 함수 내에서 검색

7389 단어 람다APIGateway

개요



이 기사에서는, http://example.com/books/1?hoge=2 라고 하는 리퀘스트 URL내의 hoge=2 의 부분, 혹은 2queryStringParameter (URL 쿼리 캐릭터 라인 파라미터)라고 부릅니다.

queryStringParameterAPI Gateway 를 통해 AWS Lambda 로 전달하기 위한 설정을 설명했습니다.

전제·대상자


  • 이미 API Gateway를 통해 AWS Lambda 함수를 호출하는 것은 성공적입니다
  • 요청 URL의 끝에 queryStringParameter
    이 상황에 빠져 있는 방향의 기사가 됩니다.
    (내가 이 상태에서 2시간 정도 고민했는데....)

    증상



    본래라면, lambda의 handler 함수의 event 인수에 queryStringParameter 가 건네질 것인데도, event 인수의 내용이 빈 사전이 되어 버린다.

    app_name/lambda_function.py
    
    def lambda_handler(event, context):
        print(event) # <- こうしておけば CloudWatch の EventLog で確認できる
        return {
            'statusCode': 200,
            'headers': {
                # INFO: CORS関係のエラー回避のために必要
                'Access-Control-Allow-Origin': '*'
            },
            # 普通こんなことしないけど、結果を見るために設定
            'body': json.dumps(event)
        }
    

    APIGateway에 대한 요청
    // お好みのブラウザの開発者ツールで実行できます
    >> const API_URL = 'https://xxxxxxxxxx.execute-api.us-east-2.amazonaws.com/default/tradehist'
    >> var response = fetch(API_URL + '?hoge=123').then(response => response.json())
    >> response
    

    결과는, response의 내용을 봐도, 원래 queryStringParameters 의 key조차 없다.

    대책



    event 인수에 queryStringParameters가 포함되도록하기 위해,

    방법 개요


    API Gateway 의 「리소스」를 연 후, 이하의 항목을 조작했습니다.
  • 해당 "메소드 요청"에서 "URL 쿼리 문자열 매개 변수"설정
  • 해당 메소드의 "통합 요청"에서 "Lambda 프록시 통합 사용"을 선택하십시오.
  • "액션"에서 "API 배포"실행

  • 방법에 대해 자세히 알아보기



    1. 해당 '메소드 요청'에서 'URL 쿼리 문자열 매개변수' 설정




    API Gateway 의 「자원」을 연다
    ② 해당 방법을 선택

    ③「메소드 리퀘스트」의 편집 화면에 들어간다


    ④⑤⑥⑦URL 쿼리 문자열 파라미터로서 취득하고 싶은(인식해 주었으면 한다) 파라미터명을 설정(이번이라면 hoge 라고 입력했다)

    2. 해당 메소드의 "통합 요청"에서 "Lambda 프록시 통합 사용"을 선택합니다.




    ① 해당 메소드의 「통합 리퀘스트」를 선택

    ② 「Lambda 프록시 통합의 사용」에 체크를 넣는다

    3. "액션" 중 "API 배포" 수행




    ①②「API 배포」를 선택

    ③「배포되는 스테이지」를 선택
    ④「배포」실행

    보충



    배포 실행 직후라면 배포 전의 상태가 유지되고 있는 경우가 있다.
    반영까지는 타임 러그가 있다고 봐 좋을 것 같다.

    덧붙여서, 나의 경우는 1~3분 정도로 반영되었다.

    결과



    APIGateway에 다시 요청
    >> const API_URL = 'https://xxxxxxxxxx.execute-api.us-east-2.amazonaws.com/default/tradehist'
    >> var response = fetch(API_URL + '?hoge=123').then(response => response.json())
    >> response
    



    감상



    IT 공부라기보다 AWS 서비스 사용법 공부를 하지 않으면 안 돼 왔다.
    전혀 사용법을 모른다(´;ω;`)

    관련 기사



    아래의 기사에는 다른 방법이 쓰여 있다.
  • Amazon API Gateway에서 AWS Lambda 함수에 쿼리 문자열을 파라미터로 전달
  • How to pass a querystring or route parameter to AWS Lambda from Amazon API Gateway

  • 두 방법 모두 방법을 모르기 때문에 포기했지만 아마도 "Lambda 프록시 통합 사용"을하지 않으면 "통합 요청"편집 페이지에 표시된 위치를 입력해야 할 것입니다.

    좋은 웹페이지 즐겨찾기