API Gateway์ SQS๋ก ์ฝ๋ฐฑ ๊ฒฐ๊ณผ ์ฒ๋ฆฌํ๊ธฐ
Amazon API Gateway๋ REST API๋ฅผ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ ์๋น์ค๋ก ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ฅผ ๋ณ๋๋ก ์์ฑํ์ง ์์๋ Lambda ํจ์ ๋๋ AWS ์๋น์ค์ ํตํฉํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์๋ค. Amazon API Gateway์ Amazon SQS ์๋น์ค๋ฅผ ์ฌ์ฉํด ์ธ๋ถ ์์คํ ์ผ๋ก๋ถํฐ ์ ๋ฌ๋๋ ์ฝ๋ฐฑ ๊ฒฐ๊ณผ๋ฅผ ์์ ํ๊ณ SQS ๋๊ธฐ์ด์ ๋ฉ์์ง๋ก ์ฐ๋ํ๋ ๊ตฌ์ฑ์ ๋ง๋ค ์ ์๋ค. ์๋ฅผ ๋ค์ด, Bizppurio API๋ฅผ ํตํด ์นด์นด์ค ์๋ฆผํก ๋ฉ์์ง๋ฅผ ๋ฐ์กํ๋ ๊ฒฝ์ฐ ๋ฐ์ก ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ ์ ๋ฑ๋กํ URL๋ก ๋น๋๊ธฐ๋ก ์ฝ๋ฐฑํด์ฃผ๋ ๋ฐฉ์์ ์ ๊ณตํด์ฃผ๊ณ ์๋๋ฐ ์ด ๋ฐ์ก ๊ฒฐ๊ณผ๋ฅผ ์์ ํ์ฌ ๋น๋๊ธฐ ๋๊ธฐ์ด๋ก ๋ฑ๋กํด๋๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์์ ์ค์ผ์ค์ ์ํด ์ฒ๋ฆฌํ ์ ์๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ ๋ฐ์ก ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋๋ก ๋ฐ๋ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ ๋ฐฐํฌ๋๋ ๊ณผ์ ์์๋ ์ผ๋ถ ๋ฐ์ก ๊ฒฐ๊ณผ๊ฐ ์ ์ค๋ ์ ์๋ ๋ฌธ์ ๋ฅผ ๋ด์ฌํ๊ฒ ๋๋ค.
Amazon API Gateway REST API
REST API๋ HTTP API์ ๋ค๋ฅด๊ฒ ์์ฒญ์ ๋ํ ๊ฒ์ฆ ๋๋ ๋ฆฌ์์ค ์ ์ฑ
์ ์ํ ํธ๋ํฝ ์ ํ ๋ฑ ์ฌ๋ฌ๊ฐ์ง ๋ถ๋ถ์ ์ค์ ํ ์ ์๋๋ก ์ ๊ณตํ๊ณ ์๋ค. ๋ํ, ์์ฒญ ํ์ด๋ก๋๋ฅผ ๋ณํํ ์ ์์ผ๋ฏ๋ก SQS ๋ฉ์์ง๋ฅผ ๋ฑ๋กํ๊ธฐ ์ํด์๋ REST API๋ก ๋ง๋ค์ด์ผ ํ๋ค. ์๋์ ๊ฐ์ด AWS ์๋น์ค ํตํฉ์ผ๋ก Simple Queue Service
๋ฅผ ์ ํํ๊ณ ๊ฒฝ๋ก ์ฌ์ ์๋ฅผ ์ ํํ์ฌ SQS ๋๊ธฐ์ด์ ์
๋ ฅํ๋ฉด ๋๋ค. ์คํ ์ญํ ์ SQS ๋๊ธฐ์ด์ ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์ ์๋๋ก SQS:SendMessage
๊ถํ์ด ํฌํจ๋ IAM Role์ ARN์ ์
๋ ฅํ๋ฉด ๋๋ค.
Amazon SQS ๋๊ธฐ์ด์ ๋ํ ์ก์ธ์ค ์ ์ฑ
Amazon API Gateway์ ๋ํ IAM Role์ AmazonSQSFullAccess ์ ์ฑ ์ ์ฐ๊ฒฐํด๋ ๋์ง๋ง ์๋์ ๊ฐ์ด SQS ๋๊ธฐ์ด์ ์ก์ธ์ค ์ ์ฑ ์ IAM Role์ด ๊ถํ์ ๊ฐ์ง๋๋ก ์ค์ ํ ์ ์๋ค. ์คํ ์ญํ ์ ์ ๋ ฅํ ARN์ด SQS ๋๊ธฐ์ด์ ๋ํ ๊ถํ์ ๋ณด์ ํ๊ณ ์์ง ์์ ๊ฒฝ์ฐ Access Denied ์๋ต์ ๋ฐ๊ฒ ๋๋ค.
๋ฉ์๋ ์์ฒญ ์ค์ ํ๊ธฐ (Optional)
REST API๋ ๋ฉ์๋ ์์ฒญ ์ค์ ์ ํตํด ์์ฒญ ํค๋์ ๋ณธ๋ฌธ์ ๋ํ ๊ฒ์ฆ์ ์ํํ ์ ์๋ค. ์์ฒญ ๊ฒ์ฌ๊ธฐ์ ์ฟผ๋ฆฌ ๋ฌธ์์ด ํ๋ผ๋ฏธํฐ ๋ฐ ํค๋ ๊ฒ์ฆ์ ์ ํํ๊ณ ์๋์ ๊ฐ์ด Content-Type ํค๋ ์ ๋ฌด์ ์์ฒญ ํ์ด๋ก๋์ ๋ํ ๋ชจ๋ธ ์คํค๋ง๋ฅผ ๋ง๋ค์ด์ ์ง์ ํ ์ ์๋ค. REST API์ ๋ํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ JSON ์คํค๋ง ๋๋ํํธ 4๋ก ์ ์ํ ์ ์๋ค.
ํตํฉ ์์ฒญ ์ค์ ํ๊ธฐ
REST API์ ํตํฉ ์์ฒญ ์ค์ ์์๋ ์ฝ๋ฐฑ ๊ฒฐ๊ณผ๋ก ํฌํจ๋๋ ์์ฒญ ํ์ด๋ก๋๋ฅผ SQS ๋ฉ์์ง๋ก ์ ๋ฌํ ์ ์๋๋ก Content-Type: application/x-www-form-urlencoded
๋ก ๋ณ๊ฒฝํ๊ณ ๋งคํ ํ
ํ๋ฆฟ์ SendMessage์ MessageBody๋ฅผ ๊ตฌ์ฑํ์ฌ SQS ๋ฉ์์ง๋ก ์ ๋ฌ๋๋๋ก ์ค์ ํด์ผํ๋ค.
ํตํฉ ์๋ต ์ค์ ํ๊ธฐ (Optional)
ํตํฉ ์๋ต ์ค์ ์ด ๋ฐ๋์ ํ์ํ์ง๋ ์์ง๋ง SQS ๋ฉ์์ง ๋ฑ๋ก ์ ์ ๋ฌ๋๋ ๊ฒฐ๊ณผ๋ฅผ ์๋ตํ์ง ์๋๋ก ์ค์ ํ ์ ์๋ค. ๋น์ฆ๋ฟ๋ฆฌ์ค์์ ์๋ฆผํก ๋ฐ์ก ๊ฒฐ๊ณผ๋ฅผ ์ฝ๋ฐฑ์ผ๋ก ์ ๋ฌํด์ค๋ ์๋ต ํ์ด๋ก๋๋ฅผ ํ์ธํ์ง ์์๊ฒ์ด๋ฏ๋ก ์๋์ ๊ฐ์ด ๋น ์๋ต์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค. ๋ง์ฝ, ๋น ์๋ต์ผ๋ก ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด ํตํฉ ์๋ต์ ์ค์ ํ๊ธฐ ์ด์ ์ ๋ฉ์๋ ์๋ต์ 200์ ๋ํ ์ํ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ผํ๋ค.
ํธ๋ฌ๋ธ์ํ ๐ฅ
Amazon API Gateway์ Amazon SQS ์ฐ๋ ๊ตฌ์ฑ ์ ๋ฐ์ํ ์ ์๋ ์ค๋ฅ์ ๋ํด์ ์์๋ณด๋๋ก ํ์. REST API๋ฅผ Amazon SQS์ ํตํฉํ๊ณ ์ผ๋ฐ์ ์ธ ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?์ ์ผ๋ถ ์ค๋ฅ์ ๋ํ ํด๊ฒฐ ๋ฐฉ์์ด ์ ๋ฆฌ๋์ด์๋ค.
UnknownOperationException
Thu Sep 19 09:44:10 UTC 2024 : Received response. Status: 404, Integration latency: 2 ms
Thu Sep 19 09:44:10 UTC 2024 : Endpoint response body before transformations: <UnknownOperationException/>
- Content-Type ์ application/x-www-form-urlencoded ๋ก ์ ๋ ฅํ์ง ์์ ๊ฒฝ์ฐ
- ๋งคํ ํ ํ๋ฆฟ์ Action=SendMessage๋ฅผ ํฌํจํ์ง ์์ ๊ฒฝ์ฐ
AccessDenied
{"Error":{"Code":"AccessDenied","Message":"Access to the resource https://sqs.ap-northeast-2.amazonaws.com/xxxxxxxx/kakao-at-result is denied.","Type":"Sender"},"RequestId":"aba6b507-a4c5-512c-a55f-ea625778d5ff"}
- ์คํ ์ญํ ์ IAM Role์ด SQS ๋๊ธฐ์ด์ ๋ํ ๊ถํ์ด ์๋ ๊ฒฝ์ฐ
- ์์ฒญ ๋ณธ๋ฌธ์ ํน์ ๋ฌธ์๊ฐ ํฌํจ๋์ด์๋๋ฐ
$util.urlEncode
๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ
Nginx ์์ API Gateway ๋ก ํธ๋ํฝ ๋ฏธ๋ฌ ์ ์ค๋ฅ
no resolver defined to resolve xxxxxx.execute-api.ap-northeast-2.amazonaws.com
xxxxxx.execute-api.ap-northeast-2.amazonaws.com could not be resolved (110: Operation timed out) while sending to client
Amazon API Gateway ์์ ์ฌ์ฉ์ ์ ์ ๋๋ฉ์ธ์ ๊ตฌ์ฑํ๊ธฐ ์ด์ ์ ๊ธฐ์กด์ ์ฝ๋ฐฑ ๊ฒฐ๊ณผ๋ฅผ ์์ ํ๋ ๊ฒ์ API Gateway์ ์คํ ์ด์ง URL์ ํตํด ๋ฐ์ก ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฌ๋๋๋ก ํ ์คํธํ๊ธฐ ์ํด์ Nginx์ ํธ๋ํฝ ๋ฏธ๋ฌ๋ง์ ๊ตฌ์ฑํ๊ณ ์ ํ์๋ ๋๋ฉ์ธ์ ์ฐพ์ ์ ์๋ ์ค๋ฅ๋ฅผ ๊ฒฝํํ๋ค. ์ด์ ๋ํด์ ์ฐพ์๋ณด๋ ๋ด๋ถ DNS ๊ฐ ์๋ ํด๋ผ์ฐ๋ํ๋ ์ด ๋๋ ๊ตฌ๊ธ DNS๋ก ์ง์ ํ๋ฉด ํด๊ฒฐ ๊ฐ๋ฅํ๋ค.
location = /mirror_api_gw {
internal;
resolver 1.1.1.1 8.8.8.8 valid=10s;
proxy_pass https://xxxxxx.execute-api.ap-northeast-2.amazonaws.com/dev$request_uri;
}