Lambda의 https 팟캐스트 시도

16279 단어 AWSLambdatech
lambda가https 팟캐스트에 대응해서 해봤어요.
https://aws.amazon.com/jp/blogs/aws/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/

창설


기본적으로 lambda 함수를 만들고 설정 탭으로 이동하면 '함수 URL - 새로 만들기' 항목이 나타납니다. 선택하십시오.

함수 URL 작성 및 작성을 선택합니다.
AWS IAM 및 NONE에서 인증 유형을 선택하고 CORS를 설정하면 URL이 공개됩니다.

NONE 액세스


'NONE'을 설정한 뒤 이벤트에만 로그를 설치해 방문해 봤다.
curl "https://zuksfx3kpofw5jrarpkju3c45u0vztbr.lambda-url.ap-northeast-1.on.aws/test?param=true" \
    -X POST \
    -H "SignatureHeader: XYZ" \
    -H "Content-type: application/json" \
    -d '{"type": "payment-succeeded"}'
  • 로그를 보는 느낌에서 일반적인https의 팟캐스트로 사용할 수 있을 것 같다.
  • {
      version: '2.0',
      routeKey: '$default',
      rawPath: '/test',
      rawQueryString: 'param=true',
      headers: {
        'x-amzn-trace-id': 'Root=1-624e32ed-740a44c5619c101d7e8fd44a',
        'x-forwarded-proto': 'https',
        host: 'zuksfx3kpofw5jrarpkju3c45u0vztbr.lambda-url.ap-northeast-1.on.aws',
        'x-forwarded-port': '443',
        'content-type': 'application/json',
        'x-forwarded-for': 'xxx.xxx.xxx.xxx',
        signatureheader: 'XYZ',
        accept: '*/*',
        'user-agent': 'curl/7.68.0'
      },
      queryStringParameters: { param: 'true' },
      requestContext: {
        accountId: 'anonymous',
        apiId: 'zuksfx3kpofw5jrarpkju3c45u0vztbr',
        domainName: 'zuksfx3kpofw5jrarpkju3c45u0vztbr.lambda-url.ap-northeast-1.on.aws',
        domainPrefix: 'zuksfx3kpofw5jrarpkju3c45u0vztbr',
        http: {
          method: 'POST',
          path: '/test',
          protocol: 'HTTP/1.1',
          sourceIp: 'xxx.xxx.xxx.xxx',
          userAgent: 'curl/7.68.0'
        },
        requestId: '454b3ade-8808-42c2-a65e-b5ed9cc7f1bb',
        routeKey: '$default',
        stage: '$default',
        time: '07/Apr/2022:00:40:13 +0000',
        timeEpoch: 1649292013195
      },
      body: '{"type": "payment-succeeded"}',
      isBase64Encoded: false
    }
    
  • 잡담을 하는데 Content-type: application/json에 조회 파라미터를 추가하지 않으면 다음과 같은 오류가 발생합니다.또한 바디의 내용은 베이스 64입니다. 주의하세요.
  • {"message":"When Content-Type:application/x-www-form-urlencoded, URL cannot include query-string parameters (after '?'): '/test?param=true'"}

    IAM 액세스

  • IAM으로 설정하고 URL 방문 후 403 상태로 돌아가기
  • {"Message":"Forbidden"}
    다른 lambda를 만들고 싶은데 불러보려고 했는데 잘 안 돼요.액세스가 완료되면 업데이트됩니다.
    https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html

    serverless frame work로 해볼게요.


    서버리스 프레임 워크도 맞춰서 해봤어요.
    https://www.serverless.com/blog/aws-lambda-function-urls-with-serverless-framework
    먼저 템플릿에서 생성합니다.
    npx serverless create -t aws-nodejs-typescript -n sls-url-test
    
    서버리스 프레임 워크는 3.12에서 시작된 대응이기 때문에 수정되었습니다.
      "devDependencies": {
    -    "@serverless/typescript": "^2.23.0",
    +    "@serverless/typescript": "^3.8.0",
        "@types/aws-lambda": "^8.10.71",
        "@types/node": "^14.14.25",
        "json-schema-to-ts": "^1.5.0",
    -    "serverless": "^2.23.0",
    +    "serverless": "^3.12.0",
        "serverless-webpack": "^5.3.5",
        "ts-loader": "^8.0.15",
        "ts-node": "^9.1.1",
        "tsconfig-paths": "^3.9.0",
        "tsconfig-paths-webpack-plugin": "^3.3.0",
        "typescript": "^4.1.3",
        "webpack": "^5.20.2",
        "webpack-node-externals": "^2.5.2"
      },
    
    src/functions/hello/index.수정ts
    - import schema from './schema';
    import { handlerPath } from '@libs/handlerResolver';
    
    export default {
      handler: `${handlerPath(__dirname)}/handler.main`,
    +  url: true
    -  events: [
    -    {
    -      http: {
    -        method: 'post',
    -        path: 'hello',
    -        request: {
    -          schemas: {
    -            'application/json': schema
    -          }
    -        }
    -      }
    -    }
    -  ]
    }
    
    버전이 3 계열이기 때문에 서버리스입니다.수정ts
    -  frameworkVersion: '2',
    +  frameworkVersion: '3',
    
    준비됐습니다. 지금부터 디버깅을 시작하겠습니다.이렇게 하면 제한이 없는 URL 접근을 할 수 있다.
    npm install
    npx serverless deploy
    

    좋은 웹페이지 즐겨찾기