AWS Lambda에 Jets 프레임워크가 있는 서버 없음 Ruby

AWS가 2014년에 출시되었을 때Lambda 사람들은 루비에 대해 아무런 사랑도 하지 않았다.Python, Node 등의 플랫폼js와 자바는 클라우드에서 위탁 관리와 운영 기능의 혁명을 시작했다.2018년 말에 루비에 대한 지원이 마침내 시작되었다.
원시 함수와 serverless Lambda에서 루비를 사용하여 구축할 수 있습니다. 예를 들어 Serverless Application Model (SAM) templates 에서 말한 바와 같이, 루비는 개발자의 행복감에만 관계되며, 프로필이 프로그램보다 길어질 때 이 과정은 고통스러울 수 있습니다.the getting started guide for Ruby on Lambda "루비의 강력한 기능을 이용하여 모든 사람들이 서버를 그렇게 좋아하지 않게 하는"프레임워크에 들어가다
Jets framework

궤도에서 제트기까지


Jets는 a 를 건설한 경험과 AWS Lambda와 관련 서비스에 배치된 능력을 결합시켜 Rails application, API Gateway, S3 등을 포함한다.이 글에서 우리는 Jets를 사용하기 시작하고 루비로 작성된 Lambda로 구동된 Twilio 응용 프로그램을 배치하는 방법을 볼 수 있다.

발전기 B 뭐 공부 해요?


간단하게 보기 위해서, 우리는 문자 메시지 기반의 응용 프로그램을 개발하고, 그것을 더욱 재미있게 하기 위해서, 우리는 약간의 유머를 넣을 것이다.프로그램에 문자를 보낼 때, 그것은 나쁜 농담에 대답할 것이다.맞아요. 여기 맞춤법이 틀렸어요. 아빠 농담이에요. API에서 제공했어요.
이 프로그램은 컨트롤러, 동작, 노선을 만드는 데 Jets를 사용하는 방법을 보여 줍니다.전송된 SMS 메시지를 숫자로 수신하면 Twilio의 HTTP 요청에 응답하는 노드를 구축합니다.단점이 돌아올 때마다icanhazdadjoke 무작위로 아빠 우스갯소리가 나오고, 뒤이어 소란이 일어난다.

TwiML 뭐 공부 해요?


이 프로젝트를 계속하려면 다음이 필요합니다.
  • Twilio 계정(
  • sign up for a free one here

  • An AWS account(Lambda 지원 버전) 및Ruby 2.5이 설치되었습니다.Ruby 2.5를 설치하지 않은 경우 Bundler 중 하나를 사용할 수 있습니다.
  • 알겠어요?그럼 시작합시다.

    Ruby 버전 설치 및 관리를 위한 도구 목록 입문


    전 세계에 설치jetsgem를 시작합니다.명령줄 유형:
    gem install jets
    
    Jets 실행 파일은 Rails처럼 생성기로 새 프로젝트를 시작하고 프로젝트 내에서 명령을 실행할 수 있습니다.우리는 현재 새로운 프로젝트를 만들 것이지만, 본고의 범위를 감안하여, 우리는 그것에 대해 약간의 제한을 할 것이다.우선 이 응용 프로그램에서 HTML 보기가 필요하지 않기 때문에 API 모드에서 프로젝트를 만들 것입니다.이것 또한 컴파일 자산의 사용을 피하고 우리의 구축 시간을 절약할 것이다.우리도 데이터베이스가 필요 없어.다음 명령을 실행하여 새 항목을 만듭니다.
    jets new dad-jokes-sms --mode api --no-database
    
    생성기가 실행을 마치면 dad-jokes-sms 디렉터리로 전환하고 다음 명령을 사용하여 로컬에서 응용 프로그램을 실행합니다.
    jets serve
    
    webpacker를 열면 다음과 같은 페이지가 표시됩니다.
    http://localhost:8888
    이 페이지를 보시면 새 Jets 프로젝트가 성공적으로 실행되고 있습니다.

    우리의 첫 번째 제트기 컨트롤러


    현재 우리는jets 응용 프로그램이 하나 있는데, 우리는gem를 사용하여 응용 프로그램의 일부분을 생성할 수 있다. 모델과 컨트롤러에서 완전한 브래킷까지.응용 프로그램에 대해 우리는 하나의 동작을 가진 컨트롤러가 필요하다.다음을 사용하여 생성합니다.
    jets generate controller Messages create
    
    생성기는 우리를 위해 많은 파일을 만들고 편집할 것이다.우리는 이렇게 개방된 새로운 노선 config/routes.rb 을 검사해야 한다.
    Jets는 GET 루트를 만들었지만, Twilio 웹hooks는 기본적으로 POST 요청을 합니다. 저는 이런 방식을 유지하는 것을 더 좋아합니다.응용 프로그램을 POST 단점에서 /messages 요청 웹hooks로 설정하려면 다음과 같이 하십시오.
    Jets.application.routes.draw do
      post 'messages', to: 'messages#create'
      root "jets/public#show"
    
      # The jets/public#show controller can serve static utf8 content out of the public folder.
      # Note, as part of the deploy process Jets uploads files in the public folder to s3
      # and serves them out of s3 directly. S3 is well suited to serve static assets.
      # More info here: http://rubyonjets.com/docs/assets-serving/
      any "*catchall", to: "jets/public#show"
    end
    
    이제 컨트롤러 조작을 작성합시다.app/controllers/messages_controller.rb를 열면 create 동작의 방법을 볼 수 있습니다.이것은 우리의 Twilio 네트워크 갈고리를 받아들여 아버지의 농담을 TwiML로 답장하는 동작이다.

    아버지께 우스갯소리를 하다


    아버지의 농담을 돌려보내려면 전화를 해야 한다 .이 점을 실현하기 위해 빠른 개인 방법을 써 봅시다.
    간단한 웹 요청 (포함) 을 만드는 데 유용하기 때문에 open-uri 을 사용할 것입니다.만약 우리가 요구한다면 API는 순수한 텍스트로 응답할 것이다. 이것은 우리가 어떤 해석을 하는 시간을 절약할 수 있다.다음 내용을 MessagesController 에 추가합니다.
    require 'open-uri'
    
    class MessagesController < ApplicationController
      def create
      end
    
      private
    
      def random_joke
        open('https://icanhazdadjoke.com/', { 'Accept' => 'text/plain' }).read
      end
    end
    
    이제 우리는 우리의 농담을 TwiML로 Twilio에 돌려보낼 준비를 하고 있다.

    icanhazdadjoke API TwiML로 돌아가기


    Twilio ruby helper 라이브러리의 도움말 프로그램으로 응답을 만들 것입니다.열기Gemfile 및 추가twilio-ruby:
    source "https://rubygems.org"
    
    gem "jets"
    gem "twilio-ruby"
    
    명령줄에서 bundle install 를 실행하여gem를 설치합니다.현재 create 작업에서 새로운 TwiML 응답 대상을 실례화하여 응답 메시지를 사용하여 XML 응답을 다음과 같이 표시합니다.
    require 'open-uri'
    
    class MessagesController < ApplicationController
      def create
        twiml = Twilio::TwiML::MessagingResponse.new
        twiml.message body: random_joke
        render xml: twiml.to_xml
      end
    
      private
    
      def random_joke
        open('https://icanhazdadjoke.com/', { 'Accept' => 'text/plain' }).read
      end
    end
    
    문서에서 찾을 수 있습니다 <Message> TwiML element.
    우리는 로컬에서 그것을 실행해서 우리가 예상한 응답을 얻었는지 테스트할 수 있다.응용 프로그램을 중지한 경우 twilio-ruby 를 사용하여 다시 시작하십시오.jets serve 를 사용하여 로컬 호스트에 POST 요청: 8888/messages, TwiML 응답에서 read more about how to use the curl helper library for generating TwiML 제공하는 농담을 볼 수 있습니다.
    curl --data "" http://localhost:8888/messages
    <?xml version="1.0" encoding="UTF-8"?>
    <Response>
    <Message>What’s the advantage of living in Switzerland? Well, the flag is a big plus.</Message>
    </Response>
    
    다행이네요. 저희 Jets 프로그램이 실행 중입니다!이제 AWS Lambda에 배포합니다.

    농담 배치할 준비가 되셨습니까?국제 기계사 협회!


    Jets 응용 프로그램을 AWS에 배치하려면 먼저 자격 증명 설정 항목을 사용하여 AWS 서비스에 액세스할 수 있도록 해야 합니다.이 방법의 좋은 방법은 사용자가 필요한 작업을 수행하는 데 필요한 최소 권한 수를 가지고 있는 사용자를 만드는 것이다.사용자가 필요로 하는 것 .AWS 계정에서 이러한 권한을 포함하는 정책과 정책을 할당할 새 사용자를 만듭니다.그리고 우리는 이 사용자의 증빙서류를 사용하여 우리의 응용 프로그램을 배치할 수 있다.
    귀하의 Jets documentation describes the minimum permissions에서 IAM 서비스를 찾거나 직접 IAMAWS console으로 이동하십시오.
    section
    정책 섹션으로 이동하여 새 정책을 작성합니다.

    JSON 탭을 선택하고 다음 JSON을 입력합니다.
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "apigateway:*",
                    "cloudformation:*",
                    "dynamodb:*",
                    "events:*",
                    "iam:*",
                    "lambda:*",
                    "logs:*",
                    "route53:*",
                    "s3:*"
                 ],
                "Resource": [
                    "*"
                ]
            }
        ]
    }
    
    정책을 보고 이름을 지정하려면 을 클릭합니다.
    from the Jets documentation
    정책을 저장합니다.현재, 우리는 새로운 사용자를 만들고 정책을 이 사용자에게 추가하여Jet가 배치해야 할 자원을 만들 수 있는 권한을 부여해야 한다.IAM 콘솔에서 사용자 섹션을 열고 새 사용자를 만듭니다.

    사용자에게 이름을 주고 접근 형식에 대한 프로그래밍 접근을 선택하십시오.

    다음 을 클릭하여 새 사용자에게 사용 권한을 선택합니다."기존 정책 직접 첨부"를 선택하고 방금 만든 정책의 이름을 필터링합니다.정책을 선택하고 다음 을 클릭합니다.

    성공 페이지에 도달할 때까지 Next(다음)를 클릭합니다.

    마지막 화면에서 액세스 키 ID 및 기밀 액세스 키를 저장합니다.우리는 그들이 함께 배치해야 한다.지금 우리는 배치를 준비한다.

    Lambda에 배포


    명령줄에 다음을 입력합니다.
    AWS_ACCESS_KEY_ID=YOUR_USER_KEY AWS_SECRET_ACCESS_KEY=YOUR_USER_SECRET_KEY jets deploy
    
    Jets는 애플리케이션을 실행하기 위해 AWS 계정의 모든 리소스를 환경 변수로 설정합니다.시간이 좀 걸리지만 완료되면 응용 프로그램이 실행하는 URL이 있습니다.

    "dev"환경에 배치되어 있음을 알 수 있습니다.문서에서 에 대한 더 많은 정보를 읽을 수 있습니다.
    우리는 지금 이 URL을 테스트할 수 있다.라우팅curl을 사용하므로 API 게이트웨이 끝점에 추가하고 /messages 요청을 보냅니다.
    $ curl --data "" https://YOUR_API_GATEWAY_ENDPOINT/messages
    <?xml version="1.0" encoding="UTF-8"?>
    <Response>
    <Message>I knew a guy who collected candy canes, they were all in mint condition</Message>
    </Response>
    
    이제 아빠가 언제든지 우스갯소리를 할 수 있도록 트와일리오 숫자에 연결해 봅시다.

    Jets는 환경을 어떻게 처리합니까 아빠가 문자로 장난치시더라고요.


    너의 에 들어간다Twilio console.만약 당신이 사용하고 싶은 번호가 하나 있다면, 그것을 편집하세요. 그렇지 않으면 문자를 받을 수 있는 새 번호를 사세요.메시지 입력 필드에 응용 프로그램 URL을 입력합니다.
    active phone numbers
    번호를 저장하고 메시지를 보냅니다.너는 아버지의 농담에 대답해야 한다.이제 축하하기 위해 근처에 있는 사람들에게 그 농담을 해서 그들이 웃는지 신음하는지 알려줘.

    서버 없는 코미디


    본고에서 Jets를 사용하여 루비 프로그램을 작성하는 방법을 보았습니다. 이를 AWS Lambda에 배치할 수 있습니다.너는 온전한 것을 볼 수 있다 .
    Jets는 응답project on GitHub, events, 심지어storing data in databases 등 더 많은 임무를 완수하는 데 도움을 줄 수 있습니다.체크아웃 run your existing Rails application.
    서버 없는 환경에서 루비를 실행하는 것에 대해 흥분하십니까?제트기 어때요?댓글로 알려주거나 트위터에 메시지를 남겨주세요.네가 가장 좋아하는 아빠 농담도 나하고 나눌 수 있어!

    좋은 웹페이지 즐겨찾기