Serverless Framework라면 바로 할 수 있네요 AWS에서 서버리스(API+Lambda[java]를 간단 셋업)

소개



  • Serverless Conf Tokyo자신의 등단에 하지만 건드리지만, Serverless로 하고 있으면 코드나 Build+Deploy의 관리가 엉망이 되어, 메인터넌스성이 부족하기 쉽습니다.
  • 그 근처의 솔루션을 프레임워크로서 제공해 주는 것이 Serverless Framework 입니다

  • License은 MIT License입니다.
  • 이 기사에서는 설정과 Hello World를 시도합니다. 다음 기사에서 좀 더 깊은 파고 있기 때문에.
  • Serverless Framework는 Lambda의 Template로 다음을 제공합니다. 이번에는 당사에서 가장 잘 알려진 java-maven을 채용합니다.
  • aws-nodejs
  • aws-python
  • aws-java-maven
  • aws-java-gradle
  • aws-scala-sbt
  • aws-csharp

  • 덧붙여서, Lambda는 java 느리다고 생각하는 분은 이하의 슬라이드를 읽어 봅시다.
    h tp // w w. s에서 멋지다. 네 t / 케이스 케 69 / 츠네 우 푸아 ws-mb

  • 환경 설정





    Serverless Framework 설치


  • npm에서 일발입니다.
  • $ node -v
    v5.12.0
    $ npm install -g serverless
    $ serverless —version
    1.5.1
    

    AWS CLI 설정


  • AWS CLI를 두드리므로 설치합니다. (설치 된 경우 건너 뛰십시오)
  • $ pip install awscli
    
  • 관리자 권한을 가진 IAM 사용자를 준비하여 사용자 정보를 설정합니다.
  • $ aws configure
    AWS Access Key ID [None]:(Access Key)
    AWS Secret Access Key [None]:(Secret Key)
    Default region name [None]: ap-northeast-1
    Default output format [None]:json
    

    Serverless Framework에서 Deploy



    서비스 만들기


  • 다음 명령으로 템플릿을 만듭니다.
  • $ serverless create --template aws-java-maven --path myService
    ・
    ・
    Serverless: Successfully generated boilerplate for template: "aws-java-maven"
    Serverless: NOTE: Please update the "service" property in serverless.yml with your service name
    

    STS (Eclipse)로 가져 오기


  • STS를 시작하고 Project Explorer -> 오른쪽 클릭 -> Maven -> Existing Maven Projects에서 방금 만든 "myService"폴더를 선택합니다.

  • serverless.yml 수정 + Build


  • serverless.yml의 L20 주변 설정을 다음과 같이 지정합니다.

  • serverless.yml
    provider:
      name: aws
      runtime: java8
      stage: prod
      region: ap-northeast-1
    
  • 프로젝트를 마우스 오른쪽 버튼으로 클릭 -> Run As -> Maven Install로 빌드합니다.
  • target 아래에 hello-dev.jar가 완성됩니다.

  • Deploy 그 1(Lambda만)


  • Serveress Framework는 다음과 같은 명령을 사용하여 Lambda 설정, Jar 업로드를 CloudFormation을 사용하여 실행합니다.
  • $ cd myService
    $ serverless deploy -v
    Serverless: Uploading CloudFormation file to S3...
    Serverless: Uploading service .zip file to S3 (1.98 MB)...
    Serverless: Updating Stack...
    Serverless: Checking Stack update progress...
    CloudFormation - UPDATE_IN_PROGRESS - AWS::CloudFormation::Stack - aws-java-maven-prod
    ・
    ・
    Serverless: Stack update finished...
    Service Information
    service: aws-java-maven
    stage: prod
    region: ap-northeast-1
    api keys:
      None
    endpoints:
      None
    functions:
      aws-java-maven-prod-hello: arn:XXXXXXXX
    
  • 지금까지의 콘솔에서 Lambda 설정하고, Jar 업로드 해보고 싶은 작업이 가 있습니다.
  • invoke 명령으로 Lambda가 반응하는지 확인합니다.
  • $ echo '{"key1":"value1","key2":"value2","key3":"value3"}' > event.json
    $ serverless invoke --function hello -p event.json
    {
        "statusCode": 200,
        "body": "{\"message\":\"Go Serverless v1.x! Your function executed successfully!\",\"input\":{\"key1\":\"value1\",\"key2\":\"value2\",\"key3\":\"value3\"}}",
        "headers": {
            "X-Powered-By": "AWS Lambda & serverless"
        },
        "isBase64Encoded": false
    }
    

    Deploy 그 2(API Gateway+Lambda)


  • 위에서는 endpoints가 없으므로 API Gateway+Lambda가 되도록 설정을 변경하고 다시 Deploy합니다.
  • 이전 serverless.yml의 L51 주변의 function 절의 주석 처리를 제거합니다.

  • serverless.yml
    functions:
      hello:
        handler: com.serverless.Handler
        events:
          - http:
              path: users/create
              method: get
    
  • 다시 Deploy합니다.
  • $ serverless deploy -v
    Serverless: Uploading CloudFormation file to S3...
    Serverless: Uploading service .zip file to S3 (1.98 MB)...
    Serverless: Updating Stack...
    Serverless: Checking Stack update progress...
    CloudFormation - UPDATE_IN_PROGRESS - AWS::CloudFormation::Stack - aws-java-maven-prod
    ・
    ・
    Service Information
    service: aws-java-maven
    stage: prod
    region: ap-northeast-1
    api keys:
      None
    endpoints:
      GET - https://XXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/prod/users/create
    functions:
      aws-java-maven-prod-hello: arn:XXXXXXXX
    
  • endpoint를 향해 요청하여 응답하는지 확인합니다.
  • $ curl https://XXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/prod/users/create
    {"message":"Go Serverless v1.x! Your function executed successfully!","input":{"resource":"/users/create","path":"/users/create","httpMethod":"GET","headers":{"Accept":"*/*","CloudFront-Forwarded-Proto":"https","CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":
    ・
    ・
    

    스택 삭제


  • 다음 명령을 사용하여 위에서 만든 CloudFormation의 Stack별로 삭제할 수 있습니다.
  • $ serverless remove
    Serverless: Getting all objects in S3 bucket...
    Serverless: Removing objects in S3 bucket...
    Serverless: Removing Stack...
    Serverless: Checking Stack removal progress...
    .....................
    Serverless: Stack removal finished...
    

    요약


  • 이제 더 많은 Serverless가 재미있을 것 같습니다.
  • 근일중에 좀 더 심파한 재료를 투고할 예정입니다.
  • 좋은 웹페이지 즐겨찾기