AWS Lambda를 사용한 Symfony 어플리케이션 배포, 빠른 설명서
7374 단어 lambdaserverlessphpaws
반대로, 다른 모든 백엔드 개발자들과 마찬가지로, 나는 나의 일을 더욱 잘 완성할 수 있는 새로운 도구를 얻었다.
본문에서, 나는 서버가 없는 것이 무엇인지, 그리고 그것이 우리에게 어떤 이익을 가져다 주었는지 간단명료하게 설명할 것이다.Bref 라이브러리와 AWS Lambda에 Symfony 애플리케이션을 배치하는 방법에 대해 알아봅니다.
다음 글에서 저는 배치의 세부 사항을 깊이 있게 토론하고 관련된 각종 구성 요소를 분석하며 이 체계 구조에 해결 방안과 용례를 제시할 것입니다.
시작합시다!
실제로 서버가 없다는 것은 무엇을 의미합니까?
Serverless라는 단어는 프로그램이 실행되는 곳에 서버가 없다고 생각하게 하기 때문에 자주 사람들을 오도할 수 있다.
서버가 없다는 것은 개발자가 인프라를 더 이상 유지할 필요가 없다는 것을 의미할 뿐이다. 왜냐하면 AWS가 그것을 책임질 것이기 때문이다. 개발자는 코드에만 관심을 가질 수 있기 때문이다.
AWS는 서버를 구성하거나 관리하지 않고도 코드를 실행할 수 있는 Lambda라는 서버 없는 서비스를 제공합니다.Lambda는 함수와 이벤트라는 두 가지 주요 개념을 바탕으로 한다.함수는 어떤 조작을 실행하는 코드이다.이벤트는 인프라에서 발생하는 이벤트입니다(예:
이벤트가 발생하면 Lambda 함수를 트리거하고 코드가 실행됩니다.
AWS Lambda 서비스의 가장 큰 장점은'사용에 따라 비용을 지불'모델이다. 실제 사용하는 계산 시간에만 비용을 지불한다. 코드가 실행되지 않을 때 비용을 받지 않는다.기존 EC2 시나리오와 비교해보겠습니다.다음 그림에서 비용(녹색 구역)이 이 기간 동안 변하지 않는 것을 볼 수 있다. 서버의 실제 사용 상황(파란색 구역)에 상관없이 똑같은 금액을 지불해야 한다.
서버가 없는 상황에서 비용은 시종 인프라 시설의 실제 사용과 관련이 있다.
Lambda는 매우 저렴한 서비스입니다. 요청 (함수 하나 실행) 당 00000002달러이고, 매달 100만 개의 요청은 무료입니다.메모리나 다른 설정이 더 필요하면 증가합니다.
Lambda는 출시 시 지원하는 언어가 적고 PHP도 포함되지 않습니다.2018년 12월, AWS 발표:
"Lambda의 네이티브 PHP 지원은 이러한 기능 중 하나가 아니지만 새로운 AWS Lambda가 실행될 때 API와 레이어 기능은 Lambda에 깨끗하고 지원 가능한 PHP를 구축할 수 있게 해 준다."
이것은 PHP 바이너리 파일을 Lambda 층으로 가져올 수 있음을 의미하며, 심지어는 Symfony 프로그램도 실행할 수 있습니다.
PHP 바이너리 파일은 특정 규칙에 따라 만들어야 합니다.이 파일들을 만들고 유지하는 것은 매우 비싸고 시간이 걸리는 활동이지만, 다행히도 Matthieu Napoli는 Lambda에 PHP 프로그램을 배치하는 데 도움을 주는 Bref라는 소스 라이브러리를 만들었다.
규정:
그림https://blog.theodo.com/2019/05/serverless-symfony-on-aws-lambda-with-bref/
요구 사항
Bref를 사용하여 Symfony 애플리케이션을 Lambda에 배치하려면 다음이 필요합니다.
aws configure
터미널에서는 액세스 키 ID, 비밀 액세스 키, 기본 영역 이름 및 기본 출력 형식을 입력해야 합니다.현재 서버 없는 프로그램을 개발, 배치, 테스트, 보호, 모니터링하는 데 사용되는 무서버 프레임워크를 설치해야 합니다.
npm install -g serverless
이 도구를 사용하려면 다음 명령을 사용하여 자격 증명을 연결해야 합니다.serverless config credentials — provider aws — key <key> — secret <secret>
이제 터미널이 설정되어 있습니다. Symfony 프로그램을 사용할 수 있습니다.브레프
Symfony 응용 프로그램을 만들고 구성한 후 Bref를 설치할 수 있습니다.
설치하려면 명령줄 인터페이스에서 시작해야 합니다.
composer require bref/bref
이제vendor/bin/bref init
bref를 초기화하면 프로젝트 루트 디렉토리에 두 개의 파일이 자동으로 생성됩니다.표준 구성의 예:
service: symfony-bref
provider:
name: aws
region: eu-central-1
runtime: provided
environment:
APP_ENV: prod
plugins:
- ./vendor/bref/bref
functions:
api:
handler: public/index.php
description: ''
timeout: 30 # in seconds (API Gateway has a timeout of 30 seconds)
layers:
- ${bref:layer.php-73-fpm}
events:
- http: 'ANY /'
- http: 'ANY /{proxy+}'
일반적으로 APP ENV를 사용하여 환경을 추가하고 영역 이름을 변경해야 합니다.Symfony 어플리케이션을 배포하기 위한 서버 없음 구성
이 일을 하기 전에 왜 서버 프레임워크가 우리를 도울 수 있는지 이해하는 것이 중요하다.
몇 달 전bref는 deploy with AWS SAM을 소스 프레임워크로 만들었습니다. 이것은 AWS에 서버 없는 프로그램을 구축할 수 있는 클라우드 정보 도구로 설정이 간단하지 않습니다.
AWS SAM:
AWSTemplateFormatVersion: '2010–09–09'
Transform: AWS::Serverless-2016–10–31
Description: 'Symfony test'
Resources:
MyFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: 'symfony-test'
Description: ''
CodeUri: .
Handler: public/index.php
Timeout: 30 # in seconds (API Gateway has a timeout of 30 seconds)
MemorySize: 1024 # The memory size is related to the pricing and CPU power
Runtime1sw: provided
Layers:
- 'arn:aws:lambda:eu-central-1:209497400698:layer:php-73-fpm:7'
Events:
# The function will match all HTTP URLs
HttpRoot:
Type: Api
Properties:
Path: /
Method: ANY
HttpSubPaths:
Type: Api
Properties:
Path: /{proxy+}
Method: ANY
Environment:
Variables:
MY_CUSTOM_ENV_VARIABLES: 'this is my custom env variables'
AWS_ENV_VARIABLES: '{{resolve:ssm:/env-aws-variable:1}}'
# Outputs show up in the CloudFormation dashboard
Outputs:
DemoHttpApi:
Description: 'URL of our function in the *Prod* environment'
Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/'
이 설정은 서버 프레임워크가 없는 설정보다 더 복잡하고 길다.서버 없는 프레임워크에서는 복잡한 구성에 SAM 구성을 추가할 수 있습니다. 서버 없는 프레임워크의 또 다른 장점은 다중 공급자입니다. 구성을 변경하지 않고 AWS나 Azure 또는 다른 공급자에 사용할 수 있습니다.AWS SAM은 AWS에만 적용됩니다.
이러한 이유로 Bref 커뮤니티는 AWS SAM에서 서버 프레임워크 없음으로 전환하기로 결정했습니다.
배포를 시작하려면 프로덕션 최적화를 위한 Composer 종속성을 설치하고 CLI에서 명령을 시작해야 합니다.
composer install --optimize-autoloader --no-dev
이제 이 명령을 실행하여 애플리케이션을 배포합니다.serverless deploy
현재 일부 하위 프로그램이 시작되었습니다. 마지막으로 링크를 볼 수 있습니다. 만약 당신이 그것을 클릭하면 응용 프로그램이 작동하는 것을 볼 수 있습니다.도대체 무슨 일이 일어난 거야?
Lambda 서비스에 배치할 때 CloudFormation 스택을 통해 완성합니다.
스택은 애플리케이션을 구성하는 서비스 그룹일 뿐입니다. 예를 들면 다음과 같습니다.
이 템플릿을 기반으로 코드를 zip 파일로 저장하는 S3 저장통을 제외하고는 다른 자원이 없는 창고를 만들 것입니다.
Lambda는 새 코드를 받아서 낡은 코드를 압축을 풀고 교체합니다.
서버가 없는 프레임워크는 파일의 산열을 비교하고 필요할 때만 새로운 배치를 실행함으로써 이 동작을 최적화합니다.
이렇게 약속대로 Lambda에 설치된 Symfony 응용 프로그램이 간단합니다.
다음 글에서, 나는 Symfony 조정, 환경 변수의 사용, 이벤트 트리거 등 몇 가지 문제를 처리할 것이다.
Reference
이 문제에 관하여(AWS Lambda를 사용한 Symfony 어플리케이션 배포, 빠른 설명서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/minompi/deploy-a-symfony-application-with-aws-lambda-a-quick-guide-2lhl텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)