API Gateway&Lambda&DynamoDB 배포 오류 모음
9890 단어 볼트오류람다APIGateway슬랙
오류 모음
SlackBolt를 사용하여 만든 SlackBot을 API Gateway와 Lambda에 배포할 때 상당히 오류를 만났습니다. 향후 개발되는 분(과 자신)의 참고가 되면(자)라고 생각해, 개발중에 만난 에러집 정리했습니다.
Slack에 API를 등록할 때 URL이 올바르지 않으면 오류가 발생합니다.
index.jsvar body = JSON.parse(event.body);
if (body.type == 'url_verification') {
const res = { challenge: body.challenge }
return {statusCode: 200, body: JSON.stringify(res) }
}
SlackAPI 참조
API를 두드린 후 오류가 발생합니다.
"errorMessage": "No token and no authorize options provided. Apps used in one workspace should be initialized with a token. Apps used in many workspaces should be initialized with a authorize.",
APIGateway 로그를 cloud watch로 출력하는 중 오류
해결책은 이것처럼 보입니다.
API Gateway API 문제를 해결하기 위해 CloudWatch 로그를 활성화하려면 어떻게 해야 합니까?
무한 루프
인기자처럼 알림 멈추지 않는다.
초간 2통 정도 메시지 날아와...
원인은 범 미스로, SlackAPI의 Interactive Components의 설정으로 메시지가 투고되면 Lambda를 킥하는 이벤트를 등록하고 있었기 때문에, 메시지가 투고될 때마다 lambda가 두드려져 엄청 메시지가 도착하는 사양이 되어 버리고 있다 했다. .
API Gateway에서 Lambda를 치는 중 오류
400_client_error
에서 오류가 발생했습니다.
매개변수를 형성하는 방법에는 2가지가 있다.
1. API Gateway 통합 요청으로 매핑 템플릿 생성
h tps://마이타케라멘. 하테나 bぉg. 코m/엔트리/2019/02/22/105438
2. API Gateway 통합 요청에서 Lambda 프록시 통합 사용 확인
htps : // / cs. 아 ws. 아마존. 이 m/그럼_jp/아피가테와 y/ぁてst/로 HTML
이번에는 2가지 방법으로 에러를 해소.
APIGateway에서 보낸 값을 형식화하고 매개 변수 디코딩
CloudWatchLog(54b5c973-9a0e-4109-8082-6dffa303f3d8) Method request body before transformations: payload=%7B%22type%22%3A%22message_action%22%2C%22token~~~~~~`block_id%22%3A%221o [TRUNCATED]
아무래도 파라미터의 값이 갖추어지지 않은 것 같다.
로그에서 확인하면 매개 변수에 불필요한 payload='
가 붙어 있거나 개체가 아니거나 매개 변수를 검색 할 수없는 문제가있었습니다.
여기까지 오는데, 엄청 시간이 걸렸습니다.
뭐니뭐니해도 람다와 APIGateway 디버깅에 너무 오래 걸렸어요...
매개변수를 정렬하고 객체로 변환
index.js const body_split = event.body.split('payload=').join('');
const event_body = decodeURIComponent(body_split);
var obj = JSON.parse(event_body);
특정 문자열을 삭제하는 방법
정규식을 사용하지 않는 경우 다음과 같이 split과 join을 결합하는 방법이 있습니다.
split을 실행하여 a로 구분된 배열로 변환하고 join에서 배열을 모두 결합함으로써 구분자의 a가 삭제된다는 방법입니다.
참고 예var str = 'abcabc';
console.log(str.split('a').join('')); // "bcbc"
-----------------
// jsonぽい形のデータをオブジェクト化する
var date ='{"ts":+"1573443403.004500",+"title":+"テストテスト",+"channel":+"QWERTY~~"}'
var body_split = date.split('+').join('');
var date = (new Function("return " + body_split))();
console.log(date);
JSON 같은 문자열을 객체로 변환하는 JavaScript
Lambda 실행 시간이 UTC가되는 문제
Lambda 콘솔에서 환경 변수를 설정합시다.process.env.TZ = "Asia/Tokyo";
Lambda의 Node.js v8.10에서 시간대를 지정해도 Date가 UTC가되는 문제
DynamoDB에 공백을 저장할 수 없음 오류
DynamoDB에 공란을 저장할 수 없기 때문에 ValidationException 오류가 발생합니다.ValidationException: ExpressionAttributeValues contains invalid value: One or more parameter values were invalid: An AttributeValue may not contain an empty string for key
이하의 사이트를 참고로 해, 공란 허가의 옵션을 추가하는 것으로, null로서 DB에 보존된다.
DynamoDB 는 하늘의 값을 등록할 수 없지만 DynamoDB document client 의 생성자 에 옵션을 건네주는 것만으로 하늘의 값을 NULL 형에는 변환할 수 있어?
요약
하나의 에러를 해소했다고 생각하면, 비교적 곧바로 다음의 에러를 만나서 심심해질 것 같아졌으므로,
😉라든지 😘라든지로 에러 메세지를 팝으로 해 보았습니다.
이번 에러를 메모 정도로 정리해 두는 것으로, 비교적 자신에게 구해졌습니다.
누군가의 뭔가 도움이되면 다행입니다!
만약 뭔가 수정 부분이 있으면 가르쳐 주시면 도움이 됩니다.
이번 구현에서 참고로 한 사이트
var body = JSON.parse(event.body);
if (body.type == 'url_verification') {
const res = { challenge: body.challenge }
return {statusCode: 200, body: JSON.stringify(res) }
}
(54b5c973-9a0e-4109-8082-6dffa303f3d8) Method request body before transformations: payload=%7B%22type%22%3A%22message_action%22%2C%22token~~~~~~`block_id%22%3A%221o [TRUNCATED]
const body_split = event.body.split('payload=').join('');
const event_body = decodeURIComponent(body_split);
var obj = JSON.parse(event_body);
var str = 'abcabc';
console.log(str.split('a').join('')); // "bcbc"
-----------------
// jsonぽい形のデータをオブジェクト化する
var date ='{"ts":+"1573443403.004500",+"title":+"テストテスト",+"channel":+"QWERTY~~"}'
var body_split = date.split('+').join('');
var date = (new Function("return " + body_split))();
console.log(date);
DynamoDB
람다
Reference
이 문제에 관하여(API Gateway&Lambda&DynamoDB 배포 오류 모음), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/naberina/items/4b312945e63733eca651텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)