Serverless Framework에서 Lambda + ALB 사용
6745 단어 람다ALBServerlessFrameworkAWS
소개
API Gateway를 이용한다면
functions
에 기재할 뿐이었지만ALB를 Lambda의 트리거로 하는 경우 별도 ALB를 작성할 필요가 있을 것 같았기 때문에 해 보았다
서비스 구성
ALB -> 람다
Lambda는 인수를 그대로 응답으로 반환하는 것만을 작성.
ALB는 2개의 패스로의 라우팅을 각각 같은 Lambda에, 그 이외를 404로 하는 것을 작성.
※사전에 준비한 것
- Lambda에 붙이는 IAM 롤
- ALB에 붙이는 VPC(서브넷 ID 2개와 보안 그룹 ID)
폴더 구성
.
├── handler.js
└── serverless.yml
Lambda 소스 코드
코드는 내용에 특별히 관련이 없으므로 별도로 무엇이든 가능합니다.
handler.js
module.exports.main = async (event) => {
return response = {
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(event),
statusCode: 200
}
}
serverless.yml
API Gateway와 약간 쓰는 방법은 바뀌지만
단순히 ALB를 Lambda의 API로 사용하고 싶다면
ALB와 리스너를 resources로 작성
functions로 그것에 묶는 것만으로 좋은 것 같다.
serverless.yml
service: alb-lambda-example
provider:
name: aws
runtime: nodejs10.x
region: ap-northeast-1
functions:
echo:
handler: handler.main
role: arn:aws:iam::00000000000:role/iam_role # IAMロールのARN
events:
- alb:
listenerArn:
Ref: exampleLoadBalancerListener
priority: 2
conditions:
path: /hello
- alb:
listenerArn:
Ref: exampleLoadBalancerListener
priority: 1
conditions:
path: /world
resources:
Resources:
exampleLoadBalancer:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
Name: alb-lambda-example-alb
Scheme: internet-facing
Subnets:
- subnet-XXXXXXXXXXXXX # サブネットID
- subnet-YYYYYYYYYYYYY # サブネットID
SecurityGroups:
- sg-ZZZZZZZZZZZZZZ # セキュリティグループID
exampleLoadBalancerListener:
Type: "AWS::ElasticLoadBalancingV2::Listener"
Properties:
DefaultActions:
- Type: fixed-response
FixedResponseConfig:
ContentType: text/html
MessageBody: <h1>Not Found</h1>
StatusCode: 404
LoadBalancerArn:
Ref: exampleLoadBalancer
Port: 80
Protocol: HTTP
결과
AWS 콘솔의 ALB 할당 규칙
작성된 ALB의 DNS에 브라우저로 액세스하면
/hello
와 /world
에서는 JSON이 응답되고 그 이외에서는 Not Found
페이지가 표시되었다.트러블 슛
sls deploy는 성공하지만 Lambda는 ALB와 연결되지 않습니다.
serverless
를 업데이트하면 치료할 수 있습니다.
Reference
이 문제에 관하여(Serverless Framework에서 Lambda + ALB 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/aki_lua87/items/6cd4db59c45a6dd794bc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)