AWS SAM에 따라 Lambda를 병합하는 방법
Summary
API Gateway에서 받은 메일을 lambda에 전송하고 싶은 것이 있는데, SAM에서 lambda 합병을 진행하는 일이 있어 내용을 정리했다.
오리진(Origin) 값을 얻으려고 lambda 쪽에서 IP 제한을 하려는 분들은 참고할 수 있을 것 같습니다.
합병이란?
lambda를 병합하여 API 메서드Lambda 함수에 병합할 수 있습니다.
전제 조건
$ aws --version
aws-cli/2.2.5 Python/3.8.8 Darwin/20.4.0 exe/x86_64 prompt/off
@ sam --version
SAM CLI, version 1.21.1
$ node -v
12.22.1
$ volta -v
1.0.2
필자는 버전 관리를 겸비하여volta를 사용했지만 특별히 가입할 필요가 없다.volta, package가 설치되어 있지 않은 경우json의 "volta": { ...
아래 부분을 삭제하십시오.미리 준비하다
AWS의 S3의 us-east-1 구역으로 적당히 이름을 지어 긴 빵을 만들어 보세요.
프로비저닝
폴더 구성
.
├──src
│ └── index.ts
├── package.json
├── yarn.lock
├── node_modules
├── dist
└── template.yml
template.yml
코스는
*
입니다.여기 설정이 적당히 바뀌었으면 좋겠어요.template.yml
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Globals:
Api:
EndpointConfiguration: REGIONAL
Cors: "'*'"
Resources:
ExampleFunction:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: nodejs12.x
CodeUri: dist/
Events:
Handler:
Type: Api
Properties:
Path: /handler
Method: get
RestApiId:
Ref: ExampleAPIGateway
ExampleAPIGateway:
Type: AWS::Serverless::Api
DependsOn: ExampleFunction
Properties:
StageName: prod
DefinitionBody:
swagger: 2.0
info:
version: "1.0"
title: "Lambda Integration Example"
basePath: /prod
schemes:
- "https"
paths:
/handler:
get:
responses: {}
x-amazon-apigateway-integration:
uri:
Fn::Sub: arn:${AWS::Partition}:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${ExampleFunction.Arn}/invocations
passthroughBehavior: "when_no_match"
httpMethod: "POST"
type: "aws_proxy"
package.json
Summary도 썼으니 volta를 사용하지 않는 사람은
"volta": {...
이하의 내용을 삭제해 주십시오.또
--s3-bucket
부분은 미리 준비한 물통의 이름을 적으세요.{
"name": "lambda-integration-example",
"version": "1.0.0",
"description": "Lambda Integration Example for Typescript",
"main": "index.ts",
"scripts": {
"build": "yarn tsc -p ./tsconfig.json && cp ./package.json ./dist/package.json",
"deploy": "sam deploy --template-file template.yml --stack-name lambda-integration-example-add-your-name --s3-bucket lambda-integration-example-add-your-name --region us-east-1 --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND"
},
"dependencies": {
"aws-lambda": "^1.0.6"
},
"devDependencies": {
"@types/aws-lambda": "^8.10.85",
"typescript": "^4.4.4"
},
"keywords": [],
"author": "",
"license": "ISC",
"volta": {
"node": "12.22.1",
"yarn": "1.22.10"
}
}
index.ts
여기, 나는 API를 치는 원래의 IP를 바디에 넣고 보고 싶다.
index.ts
import { APIGatewayProxyHandler } from 'aws-lambda'
export const handler: APIGatewayProxyHandler = async(event) => {
console.info('headers', event.headers)
const ip = event.headers['X-Forwarded-For']
return {
statusCode: 200,
body: `IP is ${ip}, and handler is success`,
}
}
프로그램 설계
루트 디렉터리에서 실행하십시오.
$ yarn build
$ yarn deploy
상의 명령을 실행하면 API Gateway에서 Lambda Integration Example
라는 이름으로 API Gateway가 제작될 것으로 보인다.위 사진의
URLの呼び出し
섹션에서 API Gateway URL이 생성됩니다. 다음 명령을 입력하십시오.$ curl https://xxxxxxxx.execute-api.us-east-1.amazonaws.com/prod/handler
IP is xxx.xxx.xxx.xxx, and handler is success
위에서 보듯이 호출 소스의 IP 주소가 성공했습니다.최후
SAM에서 lambda 합병을 진행한다는 기사를 쓰게 해주세요.
평소 프런트엔드를 주로 쓰던 엔지니어가 최근 AWS를 사용하는 경우가 늘자 기사를 써보려고 이번에 기고했다.
이번이 처음 기사를 쓰는 거라 읽기 힘들겠지만 나쁘지 않아...
나는 이번 보도에 사용된 코드가 담긴 창고를 위에 놓을 것이다.
끝까지 읽어주셔서 감사합니다.만약 나를 도와 버튼을 좀 눌러 줄 수 있다면 나는 매우 기쁠 것이다.
Thank you!
Reference
이 문제에 관하여(AWS SAM에 따라 Lambda를 병합하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/tabigaeru/articles/ca9b996268faf8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)