Ruby sem servidor no AWS Lambda com a estrutura Jets

Blog

Originalmente publicado por PHIL NASH no twilio.com



Quando a AWS foi lançada Lambda em 2014 não havia amor por Ruby. Plataformas como Python, Node.js e Java iniciaram o sem servidor revolução para hospedar e executar funções na nuvem. No final de 2018, o suporte para Ruby foi finalmente lançado.

Você pode construir com Ruby no Lambda usando funções brutas e Modelos de modelo de aplicativo sem servidor (SAM) como descrito em o guia de primeiros passos para Ruby on Lambda , mas Ruby tem tudo a ver com a felicidade do desenvolvedor e quando o arquivo de configuração é mais longo que o seu programa, o processo pode ser descrito como doloroso. Introduzir o Estrutura de jatos uma estrutura que 'aproveita o poder do Ruby para tornar o sem servidor uma alegria para todos'.



Dos trilhos aos jatos

Jets combina a experiência de construir um Aplicação Rails com a capacidade de implantar no AWS Lambda e serviços relacionados, incluindo API de gateway , S3 , e DynamoDB . Nesta postagem, veremos como começar a usar o Jets e implantar um aplicativo Twilio baseado em Lambda escrito em Ruby.



O que estamos construindo

Para manter as coisas simples, vamos construir um aplicativo baseado em SMS e para torná-lo um pouco mais divertido, vamos incluir um pouco de humor. Quando você envia uma mensagem de texto para o aplicativo, ele responde com uma piada de mau gosto. Desculpe, erro de ortografia aí, eu quis dizer um Papai piada cortesia do icanhazdadjoke INCÊNDIO.

Este aplicativo nos mostrará como começar a usar Jets, criar controladores, ações e rotas. Vamos construir um único endpoint que responde a solicitações HTTP do Twilio quando um número recebe uma mensagem SMS. O endpoint irá retornar TwiML com uma piada aleatória do pai a cada vez e a hilaridade virá.

O que você precisará

Para acompanhar este projeto, você precisará de:

Entendeu tudo isso? Então vamos começar.

Começando

Começaremos instalando o jets gema globalmente. Na linha de comando, digite:

dad-jokes-sms

O executável Jets pode então ser usado como Rails como um gerador para iniciar um novo projeto e então executar comandos dentro do projeto. Vamos criar um novo projeto agora, mas dado o nosso escopo neste post, vamos limitá-lo um pouco. Primeiro, vamos criar o projeto no modo API, pois não há necessidade de visualizações HTML neste aplicativo. Isso também evita a compilação de ativos com webpacker , o que vai economizar em nosso tempo de construção. Também não precisamos de um banco de dados. Execute o seguinte comando para criar um novo projeto:

config/routes.rb

Assim que o gerador terminar de funcionar, mude para o GET diretório e execute seu aplicativo localmente com o seguinte comando:

POST

Abra http: // localhost: 8888 e você verá uma página semelhante a esta:

Se você vir esta página, seu novo projeto Jets está sendo executado com sucesso.

Nosso primeiro controlador de Jets

Agora que temos um aplicativo Jets, podemos usar a gema para gerar partes de nosso aplicativo, de modelos e controladores a scaffolds completos. Para nossa aplicação, vamos precisar de um controlador com uma ação. Gere-o com o seguinte:

moeda de financiamento de arte nft
POST

O gerador criará e editará vários arquivos para nós. Precisamos verificar as novas rotas para abrir /messages.

Os jatos geraram um app/controllers/messages_controller.rb rota, mas os webhooks do Twilio fazem create solicitações por padrão e eu prefiro mantê-lo assim. Configure o aplicativo para receber open-uri solicitar webhooks no MessagesController endpoint em vez disso:

Gemfile

Agora, vamos escrever nossa ação do controlador. Aberto twilio-ruby e você verá um método para bundle install açao. Esta é a ação que receberá nosso webhook Twilio e responderá com TwiML para enviar de volta uma piada de pai.

Buscando uma piada do pai

Para enviar de volta uma piada do pai, precisamos fazer uma ligação para o API icanhazdadjoke . Vamos escrever um método privado rápido que podemos usar para conseguir isso.

Usaremos create pois é útil para fazer solicitações da web simples (incluindo baixando arquivos e imagens ) A API responderá com texto simples se solicitarmos, o que nos poupa de qualquer análise. Adicione o seguinte ao :

twilio-ruby

Agora estamos prontos para devolver nossa piada para Twilio como TwiML.

Retornando TwiML

Vamos construir uma resposta usando os ajudantes da biblioteca auxiliar twilio-ruby. Abra o jets serve e adicione POST:

curl

Na linha de comando, execute curl para instalar a gema. Agora no /messages ação instanciar um novo objeto de resposta TwiML, responder à mensagem de entrada usando o POST Elemento TwiML e renderizar a resposta XML, assim:

gem install jets 

Você pode leia mais sobre como usar o

jets new dad-jokes-sms --mode api --no-database 
biblioteca auxiliar para gerar TwiML na documentação.

Podemos executar isso localmente para testar se estamos obtendo a resposta esperada. Se você interrompeu o aplicativo, inicie-o novamente com

jets serve 
. Faça um
jets generate controller Messages create 
solicitação para localhost: 8888 / messages usando
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

e você verá sua piada, fornecida por icanhazdadjoke , na resposta TwiML:

require ‘open-uri’ 

class MessagesController def create
end

private

def random_joke
open(‘ https://icanhazdadjoke.com/ ’, { ‘Accept’ => ‘text/plain’ }).read
end
end

Ótimo, nosso aplicativo Jets está funcionando! Agora, para implantá-lo no AWS Lambda.

Você está pronto para implantar? EU SOU!

Para implantar nosso aplicativo Jets na AWS, primeiro precisamos configurar nosso projeto com credenciais para permitir que ele acesse os serviços da AWS. Uma boa prática aqui é criar um usuário que tenha o número mínimo de permissões necessárias para fazer tudo o que for necessário. o A documentação dos jatos descreve as permissões mínimas que nosso usuário precisará. Em nossa conta da AWS, vamos criar uma política que contém essas permissões e um novo usuário que receberá a política. Podemos então usar as credenciais desse usuário para implantar nosso aplicativo.

Na tua Console AWS encontre o AGORA serviço (ou vá direto para o AGORA seção )

Vou ao Políticas seção e criar uma nova política.

Escolha a guia JSON e insira o seguinte JSON da documentação do Jets :

source  https://rubygems.org  

gem jets
gem twilio-ruby

como obter o diretório de trabalho em python

Clique para revisar a política e dar um nome a ela.

Salve a política. Agora precisamos criar um novo usuário e anexar a política a ele, dando a ele as permissões para criar os recursos que o Jets precisa para implantar. Abra o Comercial seção no AGORA console e crie um novo usuário.

entre no e-mail do Bellsouth

Dê ao usuário um nome e selecione Acesso Programático para o Tipo de acesso .

Clique Próximo para escolher as permissões para seu novo usuário. Escolher Anexe políticas existentes diretamente e filtre pelo nome da política que você acabou de criar. Selecione essa política e clique em Próximo .

Clique Próximo até chegar à página de sucesso.

Salve o ID da chave de acesso e Chave de acesso secreta na última tela. Precisamos deles para implantar. Agora estamos prontos para implantar.

Implantando no Lambda

Na linha de comando, digite:

require ‘open-uri’ 

class MessagesController 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

Jets usarão as credenciais como variáveis ​​de ambiente para configurar todos os recursos em sua conta AWS para executar o aplicativo. Demora um pouco, mas quando for concluído, você terá uma URL onde seu aplicativo está sendo executado.

Você notará isso implantado em um ambiente de desenvolvimento. Você pode ler mais sobre como Jets lida com ambientes na documentação.

Agora podemos testar este URL usando

curl --data  http://localhost:8888/messages   


What’s the advantage of living in Switzerland? Well, the flag is a big plus.

. Lembre-se de que usamos a rota
{  
Version: 2012-10-17,
Statement: [
{
Effect: Allow,
Action: [
apigateway: ',
'cloudformation:
,
dynamodb: ',
'events:
,
iam: ',
'lambda:
,
logs: ',
'route53:
,
s3: '
],
Resource: [
'

]
}
]
}
portanto, adicione-o ao final de seu ponto de extremidade do API Gateway e crie um
AWS_ACCESS_KEY_ID=YOUR_USER_KEY AWS_SECRET_ACCESS_KEY=YOUR_USER_SECRET_KEY jets deploy  
solicitar.

$ curl --data https://YOUR_API_GATEWAY_ENDPOINT/messages  


I knew a guy who collected candy canes, they were all in mint condition

Agora, para ter sempre as piadas do pai à mão, vamos ligar isso a um número Twilio.

Papai brinca por SMS

Vá para o seu Console Twilio para o seu números de telefone ativos . Se você já tem um número com o qual deseja trabalhar, edite-o; caso contrário, compre um novo número que possa receber mensagens SMS. Em campo para Uma mensagem chega insira o URL do seu aplicativo.

Salve seu número e envie uma mensagem para ele. Você deveria ouvir uma piada sobre o pai em resposta. Agora, em comemoração, conte a piada para alguém próximo e me diga se ele ri ou resmunga.

Comédia sem servidor

Nesta postagem, vimos como começar a usar Jets para escrever aplicativos Ruby que você pode implantar no AWS Lambda. Você pode ver o completo projeto no GitHub .

Há muito mais coisas que os Jets podem ajudá-lo a realizar, incluindo responder a eventos , armazenamento de dados em bancos de dados e até mesmo execute seu aplicativo Rails existente . Verificação de saída estes artigos da documentação dos Jets para saber mais sobre o que você pode fazer com os Jets .

Originalmente publicado por PHIL NASH no twilio.com

==========================================================

Obrigado pela leitura: coração: Se você gostou deste post, compartilhe com todos os seus amigos de programação! Siga-me Facebook | Twitter

ag-grid datepicker

API REST Ruby on Rails: o guia completo

Como instalar Ruby On Rails no Windows

O curso completo de desenvolvedor Ruby on Rails

Aprenda Ruby on Rails do zero

Testando Ruby com RSpec: O Guia Completo

Crie um aplicativo de portfólio de moeda criptografada com Ruby on Rails

Desenvolvimento Web Ruby On Rails: aplicativo de lista de tarefas pendentes

Programação avançada de Ruby: 10 etapas para o domínio

Programador Ruby Completo

# ruby-on-rails

www.twilio.com

Ruby sem servidor no AWS Lambda com a estrutura Jets

Ruby sem servidor no AWS Lambda com a estrutura Jets - a estrutura Jets permite escrever aplicativos sem servidor no AWS Lambda com Ruby, assim como um aplicativo Rails. Construa seus primeiros jatos ...