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

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

· 4년 전 · 2178 · 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년 전
오..

게시글 목록

번호 제목
16801
16798
16796
16795
16791
16790
16785
16777
16776
16766
16760
16759
16740
16737
16735
16728
16713
16700
16691
16669
16668
16660
16655
16654
16647
16639
16637
16634
16629
16620