re:Invent 2018 검증 실험: Lambda Layer
9426 단어 CloudFormation람다AWS
개요
지금까지 여러 Lambda 함수에서 호출하는 라이브러리가 있어도 각 함수에 대해 패키징해야했습니다.
이번에 발표된 AWS Lambda Layers를 이용하여 공통 모듈/공통 처리를 Layer화하여 여러 Lambda 함수에서 이용할 수 있는 것 같습니다.
Lambda Layer 제한
사전 준비
샘플 만들기
공통 처리 라이브러리
콘솔에 메시지 출력 기능 만들기
src/library/utils.ts
export const test = () => console.log('Lambda Layer Test.');
외부 라이브러리
외부 라이브러리를 지정된 폴더에 사전 설치
cd nodejs && npm install
or
npm run initial
테스트 코드
두 라이브러리의 함수 실행 결과가 표시되면 성공합니다.
src/lambda/app.ts
import * as utils from 'library/utils';
import * as moment from 'moment';
export const handler = (event: any, context: any, callback: any) => {
// 共通処理のライブラリ
console.log(utils.test());
// 外部のライブラリ
console.log(moment.now());
callback(null, null);
};
Lambda Layer용 모듈 만들기
package.json
scripts에서 관리하는 작업 수행npm run release
...
"scripts": {
"initial": "cd nodejs && npm install",
"release": "npm run build && npm run package",
"prebuild": "rimraf dist && rimraf nodejs/node_modules/library",
"build:src": "tsc",
"build:lib": "tsc -p tsconfig_lib.json",
"build": "npm run build:src && npm run build:lib",
"package:src": "cd dist/lambda && zip -r ../lambda.zip *",
"package:lib": "zip -r dist/nodejs.zip nodejs",
"package": "npm run package:src && npm run package:lib"
},
...
아티팩트 확인
dist
폴더에 아래 zip
파일이 만들어졌습니다.검증 환경 구축
CloudFormation
템플릿을 준비했습니다.검증용 모듈이 S3에 업로드되었으므로 누구나 쉽게 재현할 수 있습니다.
템플릿
AWSTemplateFormatVersion: 2010-09-09
Resources:
ExPoliy:
Type: AWS::IAM::Policy
Properties:
PolicyName: LambdaLayer_LambdaBasicExecution
PolicyDocument:
Version: '2012-10-17'
Statement:
-
Sid: LambdaLogs
Effect: Allow
Action:
- logs:CreateLogGroup
- logs:CreateLogStream
- logs:PutLogEvents
Resource: !Sub 'arn:aws:logs:${AWS::Region}:*:*'
Roles:
- !Ref ExRole
ExRole:
Type: AWS::IAM::Role
Properties:
RoleName: LambdaLayer_LayerRole
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
-
Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action:
- sts:AssumeRole
Path: '/'
ExFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: LambdaLayer_Function
Handler: app.handler
Role: !GetAtt ExRole.Arn
Runtime: nodejs8.10
Code:
S3Bucket: reinvent-2018-examples
S3Key: lambda_layer/lambda.zip
Layers:
- !Ref ExLayer
ExLayer:
Type: AWS::Lambda::LayerVersion
Properties:
CompatibleRuntimes:
- nodejs8.10
LayerName: LambdaLayer_Layer
LicenseInfo: MIT
Content:
S3Bucket: reinvent-2018-examples
S3Key: lambda_layer/nodejs.zip
ExLayerPermission:
Type: AWS::Lambda::LayerVersionPermission
Properties:
Action: lambda:GetLayerVersion
LayerVersionArn: !Ref ExLayer
Principal: '*'
템플릿 실행
aws cloudformation deploy --template-file ./cfn/lambda_layer.yml --stack-name lambda-layer-example --capabilities CAPABILITY_NAMED_IAM
콘솔에서 Lambda Layer 확인
CloudFormation에서 구성 성공
Function 확인
레이어 확인
레이어가 추가됨
실행 결과 확인
Reference
이 문제에 관하여(re:Invent 2018 검증 실험: Lambda Layer), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/wwalpha/items/43354d22a3450292d529텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)