AWS Lambda의 Function을 apex로 관리
이번 요건
동작에 필요한 매개변수를 정의할 수 있습니다.
apex에서는 project에서 공통의 설정치, 각 function마다의 설정치를 각각 json 파일에 써내, deploy시에 읽어 줍니다.
dev, prod 환경의 구분을 할 수 있다
AWS Lambda 자체에는 dev, prod를 분리하는 방법이 없지만, apex에서는 하나의 function에 대해 여러 환경용의 정의 파일을 갖게 되어 있어, deploy시에 대상을 분리할 수 있게 되어 있다 하고, 지정한 환경 마다 이름을 나누어 다른 function으로서 배치해 주기로 되어 있습니다.
주의
deploy 전에 필요한 사전 처리 자동화
실제로 운용해 보면, 몇 번인가 clone한 채로 deploy를 걸어 버려 npm modules가 비어 있는 채로 배포되어 버리는 사고가 일어났습니다.
apex에는 build, deploy, clean이 실행되는 타이밍을 hook 할 수 있으므로 코드가 zip되는 build시에 npm install이 이루어지도록 하여 문제를 해결했습니다.
환경을 실수로 배포하지 않기 위해
deploy시에 환경을 지정할 수 있는 것은 좋지만, 그렇다면 커멘드 이력으로부터 배포하려고 했을 때 등에 배포처 환경을 잘못해 사고가 일어날 수 있습니다. 모범 사례를 모르겠지만 IAM에서 deploy 환경을 제한하는 것이 쉽고 안전하다고 생각합니다. 몇 가지 방법은 있을 것 같습니다만, 이번은 작업시의 인스턴스에 부여하고 있는 IAM에서는 dev*로 시작되는 function 밖에 조작할 수 없게 하는 것으로, 평상시의 작업 환경에서는 prod 환경에 deploy를 할 수 있습니다 없도록 대응했습니다.
apex에 필요한 Role은 이쪽
ht tp // // 아 x. 룬 / # 미니무 m-i m-po cy
환경별 기능을 배포하기 전의 모든 명령
apex init 명령으로 프로젝트를 만듭니다. 대화형 형식으로 프로젝트 이름, 설명문을 입력하면 apex 프로젝트에 필요한 파일이 생성되고 동시 AWS 측에 Lambda 관리에 필요한 Role, Policy가 생성됩니다.
% AWS_PROFILE=personal apex init
_ ____ _______ __
/ \ | _ \| ____\ \/ /
/ _ \ | |_) | _| \ /
/ ___ \| __/| |___ / \
/_/ \_\_| |_____/_/\_\
Enter the name of your project. It should be machine-friendly, as this
is used to prefix your functions in Lambda.
Project name: lambda_sample
Enter an optional description of your project.
Project description: sample for lambda
[+] creating IAM lambda_sample_lambda_function role
[+] creating IAM lambda_sample_lambda_logs policy
[+] attaching policy to lambda_function role.
[+] creating ./project.json
[+] creating ./functions
Setup complete, deploy those functions!
$ apex deploy
생성된 Role, Policy는 아래와 같이 입력한 function명에 묶는 이름으로 생성됩니다.
*Roles...lambda_sample_lambda_function
*Policy...lambda_sample_lambda_logs
바로 deploy 해 봅시다.
AWS_REGTION=ap-northeast-1 AWS_PROFILE=personal apex deploy
• creating function env= function=hello
• created alias current env= function=hello version=1
• function created env= function=hello name=lambda_sample_hello version=1
제대로 기능이 deploy 할 수있었습니다.
다음으로 환경별로 deploy 할 수 있도록 해 봅시다. 다음과 같이 project.json과 function.json을 환경별로 분리합니다.
% tree [git][* master]:~/dev/lambda
.
├── functions
│ └── hello
│ ├── function.dev.json
│ ├── function.json
│ └── index.js
├── project.dev.json
└── project.json
% cat project.json
{
"name": "lambda_sample",
"description": "sample for lambda",
"memory": 128,
"timeout": 5,
"role": "arn:aws:iam::hogehuga:role:role/lambda_sample_lambda_function",
"environment": {}
}% % cat project.dev.json
% cat project.dev.json
{
"name": "dev_lambda_sample",
"description": "sample for lambda",
"memory": 128,
"timeout": 5,
"role": "arn:aws:iam::hogehuga:role/lambda_sample_lambda_function",
"environment": {}
}
% cat functions/hello/function.json
{
"environment": { "target": "prod" }
}
% cat functions/hello/function.dev.json
{
"environment": { "target": "dev" }
}
이쪽도 deploy 해 봅시다.
% AWS_REGTION=ap-northeast-1 AWS_PROFILE=personal apex deploy [git][* master]:~/dev/lambda
• config unchanged env= function=hello
• code unchanged env= function=hello
• updated alias current env= function=hello version=6
% AWS_REGTION=ap-northeast-1 AWS_PROFILE=personal apex deploy --env dev [git][* master]:~/dev/lambda
• creating function env=dev function=hello
• created alias current env=dev function=hello version=1
• function created env=dev function=hello name=dev_lambda_sample_hello version=1
제대로 환경별로 다른 function으로 deploy할 수 있었습니다.
Reference
이 문제에 관하여(AWS Lambda의 Function을 apex로 관리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hiroyukimizukami@github/items/1351d50731dc0b5f1583텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)