Это мои заметки от развертывания приложения Rails Cowerplate в AWS Lambda (да, вы читаете это правильно), используя Lamby. По сути, это я прохожу через руководство быстрого начала. ( Вот моя производственная конечная точка -Не уверен, как долго это будет.)
Ссылки по теме:
- https://aws.amazon.com/lambda/
- https://lamby.custominktech.com
- https://lamby.custominktech.com/docs/quick_start
Следуйте за мной в Твиттере: https://twitter.com/heyjoshwood
Несколько вопросов без ответа у меня есть:
- Как насчет Lambda’s 250 МБ максимально размер функции ? Будет ли это работать с большим приложением Rails?
- А как насчет холодных начинаний? Даже приложение Boilerplate Rails занимает много времени на загрузку.
- Почему Docker так медленно на macOS 😭
Обновление: Кен Коллинз, создатель драгоценного камня Ламби, ответил на некоторые из моих вопросов на Reddit. Проверьте тему Анкет
- Создайте начальное приложение Rails:
brew install awscli jq brew tap aws/tap brew install aws-sam-cli asdf shell ruby 2.7.1 gem install rails -N rails new lamby_rails \ --skip-action-mailer --skip-action-mailbox --skip-action-text \ --skip-active-record --skip-active-storage --skip-puma \ --skip-action-cable --skip-spring --skip-listen --skip-turbolinks \ --skip-system-test --skip-bootsnap cd lamby_rails git add . git commit -m 'initial'
- Редактировать
App/Controllers/Application_controller.rb
:
class ApplicationController < ActionController::Base def index render html: "Hello Lamby
".html_safe end end
Редактировать config/routes.rb
:
Rails.application.routes.draw do root to: "application#index" end
- Сохранить прогресс:
git add -p git commit -m 'hello lamby'
- Установите драгоценные камни Lamby:
bundle add lamby aws-sdk-ssm
- Редактировать
Gemfile
:
- gem "lamby", "~> 2.0" + gem "lamby", "~> 2.0", require: false
- Завершить установку Ламби:
./bin/rake -r lamby lamby:install git add -p git status git add . git commit -m 'install lamby'
- Я установил свои учетные данные AWS здесь:
# ~/.aws/credentials [lamby_rails] aws_access_key_id = VALUE aws_secret_access_key = SECRET_VALUE
- И конфигурация региона здесь:
# ~/.aws/config [lamby_rails] output = json region = us-west-1
- Я установил свой aws_profile с помощью Direnv Анкет Редактировать
.envrc
:
export AWS_PROFILE=lamby_rails
затем беги:
direnv allow
- Настройка SSM W/Rails Master Key:
aws ssm put-parameter \ --name "/config/lamby_rails/env/RAILS_MASTER_KEY" \ --type "SecureString" \ --value $(cat config/master.key)
- Редактировать
app.rb
и добавить эту строку сразу послеТребуется 'lamby'
:
ENV['RAILS_MASTER_KEY'] = Lamby::SsmParameterStore.get!('/config/lamby_rails/env/RAILS_MASTER_KEY')
- Редактировать
Шаблон.yaml
CloudFormation/SAM -файл, добавив это вСвойства
раздел вашегоRailsfunction
. Это дополнение позволяет вашей политике времени выполнения Lambda читать конфигурации из хранилища параметров SSM ( см. FullTemplate.yml
):
Policies: - Version: "2012-10-17" Statement: - Effect: Allow Action: - ssm:GetParameter - ssm:GetParameters - ssm:GetParametersByPath - ssm:GetParameterHistory Resource: - !Sub arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/config/lamby_rails/*
- Сохранить прогресс:
git add -p git commit -m 'configure lamby'
- Редактировать
.envrc
(Измените имя ведра):
export CLOUDFORMATION_BUCKET=lamby-rails-josh export AWS_DEFAULT_REGION=us-west-1
Не забывай:
direnv allow
- Теперь беги:
aws s3 mb "s3://$CLOUDFORMATION_BUCKET" ./bin/deploy
- Это использует Docker для выпечки приложения Rails Lambda. Это может занять много времени на MacOS. Пойдите немного кофе или чая.:)
$ time ./bin/deploy Successfully created/updated stack - lambyrails-production-us-west-1 in None ./bin/deploy 17.45s user 9.86s system 5% cpu 9:04.13 total
(Это время сборки/развертывания на 8-ядерном MacBook Pro 🤔)
Оригинал: «https://dev.to/joshuap/deploy-a-new-rails-app-to-aws-lambda-using-lamby-3i32»