테스트 사이트 - 개발 중인 베타 버전입니다

PHP에서 aws cli 를 이용하여 Lambda 함수 생성하기

· 4년 전 · 2171 · 4

요 며칠 회사 업무로 람다 함수를 서비스에 적용하기 위해 작업 중입니다.

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개

좋은 정보 감사합니다.!
감사합니다.
3년 전
와우 좋은정보 감사합니다
3년 전
오..

게시글 목록

번호 제목
18200
18195
18193
18181
18179
18173
18170
18164
18158
18155
18152
18151
18150
18140
18139
18138
18131
18130
18120
18119
18118
18117
18116
18111
18110
18108
18107
18106
18100
18090