IT/AWS

Serverless with AWS Lambda (3) - 삽질

Terriermon 2021. 3. 9. 09:44

오랜만에 쓰는 Serverless 시리즈. 아직 정리할게 많은데, 왜이렇게 귀찮은지...

삽질

1. Lambda - DynamoDB 연결

  • DynamoDB 연결 시 에러 발생

    . Cannot access stream arn:aws:dynamodb:ap-northeast-2:527478947915:table/serverless_1/stream/2020-10-21T05:15:39.587. Please ensure the role can perform the GetRecords, GetShardIterator, DescribeStream, and ListStreams Actions on your stream in IAM. (Service: AWSLambda; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: 22d8f50c-d443-4d6c-84e2-c74c04f455f5; Proxy: null)

    https://stackoverflow.com/questions/46276837/aws-lambda-not-connecting-with-dynamo-db

    • IAM 설정 필요

      IAM에서 액세스 권한을 주지 않으면 기본적으로 접근할 수 없는 듯

      IAM은 Lambda 함수 생성 후 바꿀 수 없는가?

      IAM 창에서 정책 연결로 설정 가능

    • IAM 에서

      { "Effect": "Allow", "Action": [ "dynamodb:DescribeStream", "dynamodb:GetRecords", "dynamodb:GetShardIterator", "dynamodb:ListStreams" ], "Resource": "arn:aws:dynamodb:ap-northeast-2:527478947915:table/*" }

      해당 정책 설정 -> JSON으로 정책 편집 가능

    • AWS 공식 문서

      https://aws.amazon.com/ko/getting-started/hands-on/build-serverless-web-app-lambda-apigateway-s3-dynamodb-cognito/module-3/

 

2. Lambda - VPC 설정

 

3. invoke API를 호출하면 이 메시지를 사용한 작업에 실패했습니다. Rate Exceeded.

해결 못함

 

4. Gateway URL

배포를 하면 된다.

{"message":"Missing Authentication Token"}

link 뒤에 /board, 리소스 정보를 줄 것

https://sarc.io/index.php/aws/767

html 입히기

  • 보안적인 문제로 인해 HTML을 일반적으로 두게 되면 CORS 에러 발생

 

5. 502 Bad Gateway

https://medium.com/@yumenohosi/aws-lambda-api-gateway-dynamodb-node-js-%EC%82%AC%EC%9A%A9%EA%B8%B0-%EC%82%BD%EC%A7%88%EA%B8%B0-b5352e00b396

  • CloudWatch에서 로그 확인 -->

    • Malformed Lambda proxy response.

      lambda 호출 시 원하는 response 형태가 정해져 있음

      return { statusCode, body, headers, };

      해당 형식을 꼭 지켜야 함

 

6. VPC 설정

https://changhoi.github.io/posts/serverless/serverless-vpc-deploy-demo/

  • 간단한 프로젝트

    별다른 옵션 없이 Public한 오픈 API

  • 개발 서버 분리 || 일정 기간 동안 유지 보수 및 배포

    내부 VPC에서 배포필요

    • S3, DynamoDB 접근을 위해 NAAT Gateway || VPC Endpoint 필요

 

7. HTML로 접근 시 CORS 에러

:warning: Access to fetch at 'https://92ziazl1wi.execute-api.ap-northeast-2.amazonaws.com/2020-10-22/board' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

callback(null, { 'statusCode': 200, 'headers': {'Access-Control-Allow-Origin': '*'}, 'body': JSON.stringify(body) } ); }

header에서 Allow 설정 필수!

 

8. CORS policy 에러

:warning: Access to XMLHttpRequest at 'file:///C:/Users/jihong.kim/Desktop/serverless/[object%20Object]' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

https://velog.io/@takeknowledge/%EB%A1%9C%EC%BB%AC%EC%97%90%EC%84%9C-CORS-policy-%EA%B4%80%EB%A0%A8-%EC%97%90%EB%9F%AC%EA%B0%80-%EB%B0%9C%EC%83%9D%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0-3gk4gyhreu

npm install http-server -g npx http-server (chrome 주소창) http://127.0.0.1:8080 - 해당 파일에 접속

  • CORS 해결법: 서버에 올려서 해결

  • Why?

    • 자바 스크립트 모듈 보안 요구사항

    • 파일 리소스 요청 시 origin(출처)가 null로 넘어감

 

9. jQuery ajax post 405 method not allowed

https://stackoverrun.com/ko/q/10901283

ajax에 type: post 명시

 

10. API Gateway Ajax POST 400 error

https://stackoverflow.com/questions/38987256/aws-api-gateway-cors-post-not-working

Ajax에서 data 전송 시, json.stringfy를 해줘야 형식이 맞음..

 

11. jQuery로 특정 위치에 html 뿌리기

https://stackoverflow.com/questions/55371920/display-data-in-table-on-ajax-success

div로 영역 + id 잡아준 후 해당 위치에 .html(html);

 

12. This XML file does not appear to have any style information associated with it. The document tree is shown below.

https://zamezzz.tistory.com/299

 

s3 버킷을 public으로 설정


관련 글 목록

2021/01/26 - [IT/AWS] - Serverless with AWS Lambda (1)

2021/01/26 - [IT/AWS] - Serverless with AWS Lambda (2)