CI/CD를 위한 serverless application을 만들것입니다.
# 개요
우선 SAM을 이용하여 API gateway와 lambda를 SAM을 통해 만들고 도커로 로컬에서 돌려봅니다.
그게 됐다면 AWS에 수동으로 코드를 올린뒤
pipeline을 만들어 CI/CD를 구성할 것입니다.
마지막으로 canary 배포 구성을 하여 롤백테스트를 할 것입니다.
AWS SAM은 명령줄 도구인 AWS SAM CLI를 제공하므로 서버리스 애플리케이션을 쉽게 생성하고 관리할 수 있습니다. 특히 Hello World 애플리케이션의 초기 골격을 생성하므로 새 프로젝트의 스캐폴딩을 쉽게 만들어 기본으로 사용하고 거기에서 프로젝트를 계속 빌드할 수 있습니다.
방금 만든 Hello World SAM 프로젝트는 배포 시 다음 아키텍처를 만듭니다. 여기에는 /hello 리소스를 노출하고 HTTP GET 요청과 함께 호출될 때 Lambda 함수를 호출하는 API 게이트웨이인 단일 Lambda 함수가 있습니다. Lambda 함수는 예를 들어 데이터베이스와 같은 다른 AWS 리소스와 상호 작용할 수 있는 권한을 가질 수 있는 IAM 역할을 맡습니다.
# 애플리케이션 아키텍처
# SAM tamplate 살펴보기
SAM 템플릿이 CloudFormation 템플릿의 확장이기 때문에 구문이 AWS CloudFormation과 정확히 비슷하다는 것을 알 수 있습니다. 즉, CloudFormation에서 선언할 수 있는 모든 리소스는 SAM 템플릿에서도 선언할 수 있습니다. 템플릿의 구성 요소를 자세히 살펴보겠습니다.
## Transform
오픈소스를 준수한다라는 뜻이라는..
## Globals
모든 서버리스 기능 및 API에 공통적인 속성 정의.
여기서는 이 프로젝트의 모든 함수에 기본시간제한이 3초로 정해져있습니다.
## hello world function
다음 섹션에서는 IAM 실행 역할이 있는 Lambda 함수를 생성합니다. 또한 이 Lambda 함수의 코드가 hello-world라는 폴더 아래에 있고 진입점이 app.js라는 파일 내의 lambdaHandler라는 함수임을 지정합니다.
IAM 역할은 명시적으로 지정되지 않았습니다. 이는 SAM이 기본적으로 새 역할을 생성하기 때문입니다. Role 매개변수를 지정하여 이 동작을 재정의하고 고유한 역할을 전달할 수 있습니다.
## Event Triggers
이 섹션은 함수 정의의 일부이며 Lambda 함수를 트리거할 다양한 이벤트를 지정합니다. 이 경우 HTTP 메서드 GET에서 수신 대기하는 /hello의 엔드포인트가 있는 API 게이트웨이로 이벤트를 지정합니다.
## Output
출력 섹션은 선택 사항이며 다른 CloudFormation 스택으로 가져오거나(교차 스택 참조를 생성하기 위해) CloudFormation 콘솔에서 단순히 볼 수 있는 출력 값을 선언합니다. 이 경우 API Gateway 엔드포인트 URL, Lambda 함수 ARN 및 IAM 역할 ARN을 출력으로 사용하여 더 쉽게 찾을 수 있도록 합니다.
# Lambda code 살펴보기
핸들러는 이벤트를 처리하는 Lambda 함수의 메서드입니다. 함수를 호출하면 런타임에서 핸들러 메서드를 실행합니다. 핸들러가 종료되거나 응답을 반환하면 다른 이벤트를 처리하는 데 사용할 수 있게 됩니다. 이 경우 람다 핸들러는 SAM template.yaml에 지정된 람다 핸들러 함수입니다.
Lambda 핸들러는 모든 호출에서 실행되기 때문에 모범 사례는 핸들러 범위 외부의 호출에서 재사용할 수 있는 코드를 배치하는 것입니다. 일반적인 예는 핸들러 외부에서 데이터베이스 연결을 초기화하는 것입니다.
이벤트 개체
핸들러 함수에 전달된 첫 번째 인수는 호출자의 정보를 포함하는 이벤트 객체입니다. 이 경우 호출자는 HTTP 요청 정보를 JSON 형식의 문자열로 전달하는 API Gateway이고 Lambda 런타임은 이를 객체로 변환합니다.
컨텍스트 개체
두 번째 인수는 호출, 기능 및 실행 환경에 대한 정보를 포함하는 컨텍스트 개체입니다. CloudWatch 로그 스트림 이름이나 함수의 남은 실행 시간과 같은 정보를 얻을 수 있습니다.
핸들러 응답
API Gateway는 핸들러가 statusCode 및 본문을 포함하는 응답 객체를 반환할 것으로 예상하지만 선택적 헤더를 포함할 수도 있습니다.
# Reference
lambda event payload 예시
https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/lambda-services.html
이 문서를 보고 실습을 하였습니다.
https://cicd.serverlessworkshops.io/javascript.html
'CLOUD > AWS' 카테고리의 다른 글
AWS에 수동 배포(SAM) (0) | 2021.08.23 |
---|---|
로컬에서 프로젝트 실행(SAM) (0) | 2021.08.23 |
AWS SAM(Serverless Application Model) (0) | 2021.08.23 |
AWS 지역(region)에 따라 속도가 다름 (0) | 2021.08.20 |
AWS ELB(Elastic Load Balancing) (0) | 2021.08.18 |
댓글