AWS Lambda를 사용한 Symfony 어플리케이션 배포, 빠른 설명서

서버가 없다는 말을 처음 들었을 때, 나는 곧 실직할 것이라고 생각했다.서버도 더 없고 코드도 더 없고 할 일도 더 없고 간단하지 않습니까?
반대로, 다른 모든 백엔드 개발자들과 마찬가지로, 나는 나의 일을 더욱 잘 완성할 수 있는 새로운 도구를 얻었다.
본문에서, 나는 서버가 없는 것이 무엇인지, 그리고 그것이 우리에게 어떤 이익을 가져다 주었는지 간단명료하게 설명할 것이다.Bref 라이브러리와 AWS Lambda에 Symfony 애플리케이션을 배치하는 방법에 대해 알아봅니다.
다음 글에서 저는 배치의 세부 사항을 깊이 있게 토론하고 관련된 각종 구성 요소를 분석하며 이 체계 구조에 해결 방안과 용례를 제시할 것입니다.
시작합시다!

실제로 서버가 없다는 것은 무엇을 의미합니까?


Serverless라는 단어는 프로그램이 실행되는 곳에 서버가 없다고 생각하게 하기 때문에 자주 사람들을 오도할 수 있다.
서버가 없다는 것은 개발자가 인프라를 더 이상 유지할 필요가 없다는 것을 의미할 뿐이다. 왜냐하면 AWS가 그것을 책임질 것이기 때문이다. 개발자는 코드에만 관심을 가질 수 있기 때문이다.
AWS는 서버를 구성하거나 관리하지 않고도 코드를 실행할 수 있는 Lambda라는 서버 없는 서비스를 제공합니다.Lambda는 함수와 이벤트라는 두 가지 주요 개념을 바탕으로 한다.함수는 어떤 조작을 실행하는 코드이다.이벤트는 인프라에서 발생하는 이벤트입니다(예:
  • 파일을 S3 스토리지 통에 업로드
  • Amazon DynamoDB 테이블
  • 에 기록 삽입
    이벤트가 발생하면 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라는 소스 라이브러리를 만들었다.
    규정:
  • AWS Lambda의 PHP 작동 시
  • Lambda API
  • 와 PHP 코드를 연결하는 라이브러리
  • 풍부한 문서
  • 배포 도구

  • 그림https://blog.theodo.com/2019/05/serverless-symfony-on-aws-lambda-with-bref/

    요구 사항


    Bref를 사용하여 Symfony 애플리케이션을 Lambda에 배치하려면 다음이 필요합니다.
  • 액세스 키 ID 및 비밀 액세스 키
  • 가 있는 AWS 계정
  • 서버 프레임워크 없음
  • 설치 및 구성
  • Bref 라이브러리 설치 및 초기화
  • 첫 번째 단계는 이 명령을 사용하여 명령줄 인터페이스를 통해 AWS를 구성하는 것이다
    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를 초기화하면 프로젝트 루트 디렉토리에 두 개의 파일이 자동으로 생성됩니다.
  • 색인.함수 코드를 포함하는 php
  • 서버가 없습니다.AWS
  • 에 배포할 구성을 포함하는 yml
    표준 구성의 예:
        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:
  • 템플릿 사양
  • 명령줄 인터페이스
  • 표준 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 스택을 통해 완성합니다.
    스택은 애플리케이션을 구성하는 서비스 그룹일 뿐입니다. 예를 들면 다음과 같습니다.
  • 데이터베이스
  • S3 삽
  • 서버 프레임워크가 없는 서버에서 설정을 변환합니다.yaml 파일을 작성하고 AWS CloudFormation 템플릿을 작성합니다.
    이 템플릿을 기반으로 코드를 zip 파일로 저장하는 S3 저장통을 제외하고는 다른 자원이 없는 창고를 만들 것입니다.
    Lambda는 새 코드를 받아서 낡은 코드를 압축을 풀고 교체합니다.
    서버가 없는 프레임워크는 파일의 산열을 비교하고 필요할 때만 새로운 배치를 실행함으로써 이 동작을 최적화합니다.
    이렇게 약속대로 Lambda에 설치된 Symfony 응용 프로그램이 간단합니다.
    다음 글에서, 나는 Symfony 조정, 환경 변수의 사용, 이벤트 트리거 등 몇 가지 문제를 처리할 것이다.

    좋은 웹페이지 즐겨찾기