Skip to content

CHICPRO

  • Life Log
  • Cycling Log
  • Photo Log
    • Portrait
    • Landscape
    • Flower
    • Etc
  • Coding Log
  • Information

[PHP] aws cli 를 이용한 Lambda 함수 생성

2021-06-24 by 편리

최근에 Lambda(이하 람다) 관련 작업을 하고 있는데.. 초기에는 AWS 콘솔에서 직접 람다함수를 생성했다. 그런데 이렇게 하면 나중에 따로 정리된 문서가 없다면 제대로 세팅을 할 수도 없을 뿐더라 다른 이가 담당하게 되면 세팅이 불가능할 수도 있다. 그래서 aws cli(이하 cli) 를 이용하여 람다 함수를 세팅하는 스크립트 비슷한 것을 작업했다. cli 리턴 값이 json 형태로 넘어오는데 쉘에서 처리할 방법이 있겠지만.. 나는 모르기에 그나마 익숙한 PHP 에서 처리하도록 했다. 여담이지만 윈도우 PC에서 사진 파일 이름 일괄 변경을 위해 php 코드를 작성해서 처리했던 적도 있다.

람다 함수는 node 14.x 버전을 사용하도록 세팅했으며 람다 함수 실행을 위한 권한은 IAM 에서 미리 세팅 후 사용하도록 했다. 람다 함수에서 사용되는 nodejs 모듈은 람다 계층으로 분리해서 설정되도록 했다. 람다 계층에 대한 내용은 이 문서를 참고하면 된다.

<?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;

cli 사용을 위한 계정 정보 등은 미리 설정되어 있는 것으로 간주해서 따로 기술하지 않았다.

Post navigation

Previous Post:

[nodejs] S3 내의 파일을 zip 압축하기

Next Post:

pem 파일을 ppk 파일로 변환하기

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Recent Posts

  • php 배열 연산에서 + 와 array_merge 의 차이
  • pcntl_fork 를 이용한 다중 프로세스 실행
  • 아이폰 단축어를 이용하여 주중 공휴일엔 알람 울리지 않게 하기
  • 구글 캘린더 전체일정 재동기화
  • OpenLiteSpeed 웹서버에 HTTP 인증 적용
  • OpenLiteSpeed 웹어드민 도메인 연결
  • WireGuard를 이용한 VPN 환경 구축
  • Ubuntu 22.04 서버에 OpenLiteSpeed 웹서버 세팅
  • 맥 vim 세팅
  • 우분투 시스템 터미널쉘 zsh 로 변경

Recent Comments

  • 편리 on 업무관리용 그누보드 게시판 스킨
  • 임종섭 on 업무관리용 그누보드 게시판 스킨
  • 캐논 5D 펌웨어 | Dslr 펌웨어 업그레이드 방법 82 개의 베스트 답변 on 캐논 EOS 30D 펌웨어 Ver 1.0.6 , EOS 5D 펌웨어 Ver 1.1.1
  • Top 5 캐논 5D 펌웨어 Top 89 Best Answers on 캐논 EOS 30D 펌웨어 Ver 1.0.6 , EOS 5D 펌웨어 Ver 1.1.1
  • 편리 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 임팀장 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 편리 on Notepad++ NppFTP 플러그인 수동 설치
  • paul-j on Notepad++ NppFTP 플러그인 수동 설치
  • YS on Windows 10 iCloud 사진 저장 폴더 변경
  • 편리 on Docker를 이용한 Centos7 + httpd + php 5.4 개발환경 구축

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org
© 2025 CHICPRO | Built using WordPress and SuperbThemes