Serverless Framework에서 자신의 API URL을 얻고 싶습니다.
11575 단어 APIGateway람다ServerlessFrameworkAWS
소개
Serverless Framework에서 API Gateway를 사용할 때
사활 감시나 어떤 목적으로
내부적으로 API를 호출하고 싶은 경우가 있을까 생각합니다.
그냥 배포 한 후 URL을 확인하십시오.
Lambda의 환경 변수에 ... 등은 조금 번거롭기 때문에
serverless.yml 내에서만 설정할 수 없는지 시도했습니다.
custom으로 URL 생성
주제 부분은 API Gateway에서 생성되는 URL을 문자로 연결합니다.
이제 API Gateway URL을 생성할 수 있습니다.
custom:
region: ap-northeast-1
stage: ${opt:stage,"default"}
my_url:
{
"Fn::Join":
[
"",
[
"https://",
{ "Ref": "ApiGatewayRestApi" },
".execute-api.${self:custom.region}.amazonaws.com/${self:custom.stage}/",
],
],
}
custom으로 만든 URL을 Lambda의 environment로 설정
절각이므로 실제로 API를 두드려 보겠습니다.
※언어는 node를 전제로 기술하고 있습니다.
API를 두드린다
shikatsukannshi
shikatsukannshi
에 두드리는 tergetA
, tergetB
를 만듭니다.shikatsukannshi
가 30분에 한 번 일어나서느낌으로 만들고 있습니다.
functions:
shikatsukannshi:
handler: shikatu/handler.main
environment:
MY_URL: ${self:custom.my_url}
events:
- schedule: rate(30 minutes)
tergetA:
handler: api/handler.main
environment:
MY_NAME: A
events:
- http:
path: target/a
method: get
tergetB:
handler: api/handler.main
environment:
MY_NAME: B
events:
- http:
path: target/b
method: get
이제
tergetA
Lambda 환경 변수 MY_URL에자신과 연결하는 API Gateway URL을 입력해야 합니다.
serverless.yml 전체로서는 다음과 같은 것을 작성했습니다.
service: qiita-sample
custom:
region: ap-northeast-1
stage: ${opt:stage,"default"}
my_url:
{
"Fn::Join":
[
"",
[
"https://",
{ "Ref": "ApiGatewayRestApi" },
".execute-api.${self:custom.region}.amazonaws.com/${self:custom.stage}/",
],
],
}
provider:
name: aws
runtime: nodejs12.x
memorySize: 128
region: ${self:custom.region}
functions:
shikatsukannshi:
handler: shikatu/handler.main
environment:
MY_URL: ${self:custom.my_url}
events:
- schedule: rate(30 minutes)
tergetA:
handler: api/handler.main
environment:
MY_NAME: A
events:
- http:
path: target/a
method: get
tergetB:
handler: api/handler.main
environment:
MY_NAME: B
events:
- http:
path: target/b
method: get
api 및 모니터링 용 Lambda 만들기
API에서
환경 변수에서 자신의 이름을 검색하고 반환하는 API
api/handler.js
module.exports.main = async (event) => {
return {
body: 'Qiitaサンプル:' + process.env['MY_NAME'],
statusCode: 200
}
}
그리고 감시용 람다
이쪽도 요청을 던져 결과를 로그에 낼 뿐의 것
shikatu/handler.js
module.exports.main = (event) => {
const request = require("request");
const url = process.env['MY_URL']
// 監視A
request.get({
url: url + 'target/a'
}, function (error, response, body) {
console.log(body);
});
// 監視B
request.get({
url: url + 'target/b'
}, function (error, response, body) {
console.log(body);
});
}
결과 확인
배포 및 로그 확인
안전한 API에 액세스 할 수있는 것 같습니다.
Reference
이 문제에 관하여(Serverless Framework에서 자신의 API URL을 얻고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryrytk/items/ac752585549ea84ddd2b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)