PHP에서 aws cli 를 이용하여 Lambda 함수 생성하기
요 며칠 회사 업무로 람다 함수를 서비스에 적용하기 위해 작업 중입니다.
AWS 콘솔에서 람다 함수를 생성해도 되지만 aws cli 를 사용하면 자동화가 가능하기 때문에 작업해봤습니다.
aws cli 리턴 값이 json 형태라서 그 처리를 위해 가장 익숙한 php 를 이용했습니다.
[code]
<?php
if ($argc < 3) {
echo 'Wrong number of parameters.'.PHP_EOL;
echo "Usage: php ".basename(__FILE__)." 'AWS_ACCESS_KEY_ID' 'AWS_SECRET_ACCESS_KEY'".PHP_EOL;
exit;
}
$aws_access_key_id = $argv[1];
$aws_secrect_access_key = $argv[2];
$s3_access_key = 'S3_ACCESS_KEY';
$s3_secret_key = 'S3_SECRET_KEY';
putenv('AWS_ACCESS_KEY_ID='.$aws_access_key_id);
putenv('AWS_SECRET_ACCESS_KEY='.$aws_secrect_access_key);
putenv('AWS_DEFAULT_REGION=ap-northeast-2');
$func_name = 'my-func';
$layer_name = 'my-layer';
$zip_func_name = $func_name.'.zip';
$zip_layer_name = $layer_name.'.zip';
$role_arn = 'arn:aws:iam::11111222334464:role/lambda-role'; // AWS 콘솔에서 확인 필요
exec('zip -r '.$zip_func_name.' index.js');
mkdir('./nodejs', 0755);
rename('./node_modules', './nodejs/node_modules');
exec('zip -r '.$zip_layer_name.' ./nodejs');
$res = shell_exec('aws lambda create-function --function-name '.$func_name.' --zip-file fileb://'.$zip_func_name.' --handler index.handler --runtime nodejs14.x --role '.$role_arn);
$data = json_decode($res, true);
if (!$data) die($res.PHP_EOL);
$func_arn = $data['FunctionArn'];
if (!$func_arn) die('Function creation error.'.PHP_EOL);
echo 'Lambda Function created.'.PHP_EOL;
$res = shell_exec('aws lambda publish-layer-version --layer-name '.$layer_name.' --description "nodejs modules" --license-info "MIT" --zip-file "fileb://'.$zip_layer_name.'" --compatible-runtimes nodejs14.x');
$data = json_decode($res, true);
if (!$data) die($res.PHP_EOL);
$layer_arn = $data['LayerVersionArn'];
if (!$layer_arn) die('Layer Creation error.'.PHP_EOL);
echo 'Layer created.'.PHP_EOL;
$res = shell_exec('aws lambda update-function-configuration --function-name '.$func_name.' --layers '.$layer_arn.' --memory-size 512 --timeout 900 --environment "Variables={S3_ACCESS_KEY='.$s3_access_key.',S3_SECRET_KEY='.$s3_secret_key.',S3_REGION=ap-northeast-2,S3_BUCKET=nodejs}"');
$data = json_decode($res, true);
if (!$data) die($res.PHP_EOL);
echo 'Lambda Function configuration updated.'.PHP_EOL;
echo 'Completed.'.PHP_EOL;
[/code]
함수코드와 노드 모듈을 하나의 zip 파일로 압축해서 처리해도 되지만 모듈의 경우는 다른 함수를 만든다면 다시 사용할 수도 있을 것이라 생각되어 Layer 로 분리해서 처리되도록 했습니다.
댓글 4개
게시판 목록
개발자팁
질문은 QA에서 해주시기 바랍니다.
| 번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|---|
| 5066 | 기타 |
DogFoot개발
|
4년 전 | 1820 | |
| 5065 | PHP |
DogFoot개발
|
4년 전 | 1532 | |
| 5064 | PHP |
happyl
|
4년 전 | 1921 | |
| 5063 | node.js |
DogFoot개발
|
4년 전 | 1676 | |
| 5062 | node.js |
DogFoot개발
|
4년 전 | 1693 | |
| 5061 | node.js |
DogFoot개발
|
4년 전 | 1419 | |
| 5060 | node.js |
DogFoot개발
|
4년 전 | 1257 | |
| 5059 | node.js |
DogFoot개발
|
4년 전 | 1251 | |
| 5058 | 기타 |
DogFoot개발
|
4년 전 | 2698 | |
| 5057 | 웹서버 |
DogFoot개발
|
4년 전 | 2727 | |
| 5056 | MySQL | 4년 전 | 1507 | ||
| 5055 | 기타 | 4년 전 | 1437 | ||
| 5054 | OS | 4년 전 | 2071 | ||
| 5053 | 웹서버 | 4년 전 | 3634 | ||
| 5052 | OS | 4년 전 | 2427 | ||
| 5051 | PHP | 4년 전 | 2192 | ||
| 5050 | 웹서버 | 4년 전 | 1722 | ||
| 5049 | MySQL | 4년 전 | 1901 | ||
| 5048 | OS | 4년 전 | 2707 | ||
| 5047 | PHP | 4년 전 | 4376 | ||
| 5046 | MySQL | 4년 전 | 1822 | ||
| 5045 | MySQL | 4년 전 | 1945 | ||
| 5044 | MySQL | 4년 전 | 4137 | ||
| 5043 | MySQL | 4년 전 | 1893 | ||
| 5042 | 기타 |
|
4년 전 | 2638 | |
| 5041 | MySQL | 4년 전 | 2000 | ||
| 5040 | MySQL | 4년 전 | 1727 | ||
| 5039 | MySQL | 4년 전 | 1502 | ||
| 5038 | MySQL | 4년 전 | 1339 | ||
| 5037 | OS | 4년 전 | 4434 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기