Lambda를 작성하기 위한 Docker로 테스트하거나 배포까지 해 보았다(PHP편)
7775 단어 dockerfilePHPUnitPHP7람다
소개
만나서 반갑습니다, 홍콩 출신의 라이입니다.
이것은 기념해야 할 Qiita의 첫 게시물입니다. 뭔가 참고할 수 있거나 재미 있다고 생각하면 매우 기쁩니다.
그럼 조속히, 본제 가자.
최근
AWS re:Invent 2018
에 Lambda의 사용자 정의 런타임이 출시되었습니다.그래서, 이 붐을 놓치지 말아야 하기 때문에, 자신도 PHP의 Lambda의 커스텀 런타임 환경을 만들어 보았습니다.
PHP 이외를 쓸 생각은 없었지만
Requirement
php-lambda-layer
aws-sam-cli
도커
람다 레이어 만들기
make php71.zip
를 실행하기 만하면 php71.zip
를 만들 수 있습니다 php71.zip
를 올리고 lambda 레이어를 만듭니다 확장
다음은 지원 Extensions
json.so
bz2.so
calendar.so
ctype.so
curl.so
dom.so
exif.so
fileinfo.so
ftp.so
gettext.so
iconv.so
json.so
phar.so
posix.so
shmop.so
simplexml.so
sockets.so
sysvmsg.so
sysvsem.so
sysvshm.so
tokenizer.so
wddx.so
xml.so
xmlreader.so
xmlwriter.so
xsl.so
zip.so
※
make
를 하기 전에, php.ini
에 extension=json.so
를 넣을 필요가 있다※ 다른
extension
를 넣는 것도 가능합니다프로젝트
├── Lambda_php
| ├── template.yaml
| ├── src
| | └── php
| | ├── index.php
| | └── print.php
| └── test
| └── php
| └── indexTest.php
└── Dockerfile
적당히 만든
해보자
Docker 환경 만들기
layer와 같은 환경의
php7.1
를 넣고 phpunit
도 설치한다FROM lambci/lambda:build-nodejs8.10
WORKDIR /tmp
RUN yum install wget -y
RUN yum install -y php71-cli zip
RUN wget https://phar.phpunit.de/phpunit-6.5.phar
RUN chmod +x phpunit-6.5.phar
RUN mv phpunit-6.5.phar /usr/local/bin/phpunit
WORKDIR /srv
docker build --tag lai:lambdatest .
에서 빌드개발 및 테스트
코딩
좋은 느낌으로~
index.php
<?php
require dirname(__FILE__) . '/print.php';
$print = new PrintInfo();
echo $print->printNum();
print.php
<?php
class PrintInfo {
function printNum() {
return 1;
}
}
테스트 코드
이쪽도 좋은 느낌에~
indexTest.php
<?php
require dirname(__FILE__) . '/../../src/php/print.php';
use PHPUnit\Framework\TestCase;
class IndexTest extends TestCase
{
public function testFunction()
{
$print = new PrintInfo();
$this->assertEquals(1, $print->printNum());
}
}
테스트 실행
docker run --rm --volume ${PWD}/lambda_php:/srv lai:lambdatest /bin/bash -c "phpunit --verbose /srv/test/php/indexTest”
PHPUnit 6.5.13 by Sebastian Bergmann and contributors.
Runtime: PHP 7.1.7
. 1 / 1 (100%)
Time: 118 ms, Memory: 8.00MB
OK (1 test, 1 assertion)
했어!
배포
template.yaml
AWSTemplateFormatVersion: 2010-09-09
Description: My PHP Application
Transform: AWS::Serverless-2016-10-31
Resources:
phpserver:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Sub ${AWS::StackName}-phpserver
Description: PHP Webserver
CodeUri: src/php
Runtime: provided
Handler: index.php
MemorySize: 3008
Timeout: 30
Tracing: Active
Layers:
- <先作ったlambda layerのARN>
Events:
api:
Type: Api
Properties:
Path: /{proxy+}
Method: ANY
sam package --output-template-file serverless-output.yaml --s3-bucket <S3バケット名>
sam deploy --template-file serverless-output.yaml --stack-name <スタック名> --capabilities CAPABILITY_IAM
방문해보기
했어!
결론
lambda는 이제부터 다양한 언어로 쓸 수 있습니다.
이것은 상당히 기쁜 업데이트군요.
다음 프로젝트는 이것으로 가고 싶네요 (웃음).
라는 코피페 많은 기사였습니다.
더 이상 복사하지 마십시오!
Reference
이 문제에 관하여(Lambda를 작성하기 위한 Docker로 테스트하거나 배포까지 해 보았다(PHP편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/caesar0060jp/items/01f84c333dc63c96e466텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)