- 1) 함수
- 1-1) 기본설정
- 작업 :
- Publish new version : 최신에서 작업된 함수를 새로운 하나의 '버전'으로 땀.
- 별칭 생성 : '버전'을 1or2개 선택하여, 명칭을 붙여줌. (2개일 경우, 비율조절 가능)
- 구분자 : 생성된 '버전' 이나 '별칭' 을 선택하여, 해당 함수의 구별된 ARN를 설정하도록 함. ($LATEST가 디폴트)
- 트리거 추가 : API Gateway, AWS IoT, S3, SNS, SQS, ... , 써트파티 이벤스 소스 등과 연결.
- 대상 추가 : SNS토픽, SQS대기열, Lambda함수, EventBridge버스 으로 연결.
- 아키텍처 :
- x86_64 - x86 기반 프로세서에 사용되는 64비트 x86
- arm64 - AWS Graviton2 프로세서에 사용되는 ARM64
- 1-2) 함수설정
- 환경변수 : (외부호출 API키 같은) 환경변수를 등록하여, "os.environ[이름]" 식으로 사용하면 된다.
- 실행역할 : IAM의 특정 Role지정 후, 해당 Role에 사용할 리소스의 특정 권한을 주면 된다.
- VPC : Virtual Private Cloud에 연결하여 인터넷에 노출되지 않고 네트워크 리소스에 액세스.
- X-RAY : 함수 내부적인 호출 tracing 옵션.
- 동시성 : 동시에 몇개의 Thread까지로, 진짜 1로 제한하니~ 하나씩 순차적으로 처리했다...
- 프로비저닝된 동시성 : // TODO : ...
- 비동기식 호출 : // TODO : ...
- 함수 URL : ...
- 1-3) Layers설정
- 함수에서 사용할 Layer를 추가하여, 활용 할수있도록 설정 한다.
- 추가한 이후, 함수코드에서 "import {모듈명}" 식으로 사용하면 된다.
- 특집) Lamdba 함수 동시성 관리
- 동시성 이란? 특정 시각에 'Lambda 함수'가 서비스 할 수 있는 요청의 갯수.
- (하나의 인스턴스가 하나의 요청을 처리하고, 그 도중에 요청이 또 오면~ 다른 인스턴스가 할당되어 동시성이 증가)
- Reserved-Concurrency : 최대 동시 인스턴스 수를 보장(?) 제한(?)
- 설정을 하지않는 'Lambda 함수' 는 "예약되지 않은 동시성 풀"을 공유 하게 됨. (아무나 막쓰면 되는 구조?)
- 설정을 한 'Lambda 함수' 는 "예약된 동시성 풀"의 한도 내에서 사용을 하게 됨.
- Provisioned-Concurrency : 요청에 즉시 응답할 준비가 되도록, 실행 준비가 된 인스턴스 수를 보장. (추가요금발생)
- ...
- 특집) 동시성과 Auto-Scale 상호작용
- Lambda 함수 규모 조정.
- 확장으로 인해, 새로운 인스턴스들의 지연 시간이 늘어나는 현상.
- 미리 Provisioned-Concurrency 를 할당하여~ 지연 시간 거의없이 확장 가능!
- 즉, Application Auto Scaling 를 활용하여~ 사용률 or 스케쥴 에 따라 Provisioned-Concurrency 자동제어 가능!
- Provision 초기화 Burst 제한 : // TODO : ...
- https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/configuration-concurrency.html
- https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/invocation-scaling.html
- ...
- 1-1) 기본설정
- 2) Layers
- 람다함수에서 사용할 외부Lib 등등이 있을경우, Layer를 만들어서 사용할수있다.
- 파이썬의 경우, {압축명}/python/{모듈명}/{코드...} 이런 구조로 압축을하여~ 사용함.
-
- 3) 애플리케이션
- Lambda애플리케이션 == "Lambda함수+event리소스+etc리소스" 의 조합으로 코드, 배포, 모니터링을 관리.
- 쌤플로써... 전형적인 '서버리스API', 'S3파일Worker', 'Watch잡스케쥴러', 'SNS 및 SQS' 식의 아주(?) 멋있어는 보이데!!!
- (막상... 일단 AWS콘솔에서는 Node.js 만 지원된다... 왜죠? ㅎㅎ 구대기 같은 노드ㅈㅅ)
- 기본적으로, {CodeCommit(소스)}->{CodeBuild(빌드)}->{CloudFormation(배포)} 식의~
- CodePipeline으로 "지속적인 개발" 을 할수있는... 무시무시한... 음... ㅎㅎㅋㅋ
- ...
- 별첨) AWS Lambda Cold Start Problem
- https://aithority.com/it-and-devops/cloud/5-ways-to-prevent-aws-lambda-cold-starts
- https://www.pulumi.com/blog/aws-lambda-provisioned-concurrency-no-cold-starts
- https://www.serverless.com/blog/keep-your-lambdas-warm
- https://alphahackerhan.tistory.com/29
- https://novemberde.github.io/aws/2018/02/02/Lambda_coldStart.html
- Python 런타임 기본환경
- 핸들러 :
- zip 배포 :
- image 배포 :
- context :
- Log :
- Test & Err & X-Ray :
- 모니터링
- ...
- 케파
- https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/gettingstarted-limits.html
- timeout : 15분, layer : 5개, payload : 6MB, zip : 50MB, image : 10GB, /tmp : 늘어남, ...
- ...
- ...
-끝-
'AWS' 카테고리의 다른 글
AWS CodePipeline (0) | 2020.03.11 |
---|---|
AWS CodeCommit (0) | 2020.03.10 |
Amazon S3 (0) | 2020.03.05 |
Amazon API Gateway (0) | 2020.02.27 |
Amazon Managed Blockchain (0) | 2019.04.27 |