Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

เมื่อเขียนแอปพลิเคชัน ประเด็นสำคัญประการหนึ่งที่คุณต้องคำนึงถึงคือวิธีการแชร์แอปพลิเคชันกับคนทั่วโลก

วิธีการทั่วไปอย่างหนึ่งคือการเปิดตัว Heroku ตั้งค่าได้ง่ายและมีการจัดการเต็มรูปแบบ แต่ก็เป็นเรื่องปกติที่ทีมจะดร็อป Heroku ในภายหลัง เมื่อปริมาณการใช้งานเพิ่มขึ้น Heroku ก็มีราคาแพงและไม่ยืดหยุ่น

จะเกิดอะไรขึ้นถ้าเป็นไปได้ที่จะปรับใช้แอปพลิเคชันใหม่ด้วยความง่ายดายเหมือน Heroku โดยไม่สูญเสียความยืดหยุ่นและประหยัดค่าใช้จ่ายที่คุณได้รับจากแพลตฟอร์มเอนกประสงค์เช่น AWS เป็นไปได้โดยใช้ Elastic Beanstalk ซึ่งเป็นบริการจาก AWS

ในบทความนี้ ฉันจะแนะนำคุณเกี่ยวกับการตั้งค่าแอปพลิเคชัน Rails 6 และใช้งานบน AWS โดยใช้ Elasticbeanstalk เป็นฐานการคำนวณและ RDS (บริการฐานข้อมูลเชิงสัมพันธ์) โดยเฉพาะอย่างยิ่ง บริการ Postgres - เป็นที่เก็บข้อมูล

P>

ในตอนท้ายของบทช่วยสอนนี้ คุณควรจะทำสิ่งต่อไปนี้ได้:

  1. ตั้งค่าแอป Rails 6 ด้วยเส้นทางสองสามเส้นทางและเรียกใช้ในเครื่อง
  2. สร้างบัญชี AWS
  3. ตั้งค่าและปรับใช้แอปกับ Elasticbeanstalk โดยใช้ทรัพยากรแบบฟรีเทียร์

มาดำน้ำกันเถอะ

Elasticbeanstalk และ RDS คืออะไร

เพื่อให้เข้าใจชัดเจนว่า Elasticbeanstalk คืออะไรและแก้ปัญหาได้ อันดับแรก เรามาพูดถึงข้อเสนอ EC2 ของ Amazon

EC2 ย่อมาจาก Elastic Compute Cloud 2 บริการนี้อนุญาตให้คุณจัดเตรียม VPC ซึ่งโดยพื้นฐานแล้วเป็นเพียงคอมพิวเตอร์ ใช้งานระบบปฏิบัติการใดก็ได้ที่คุณเลือก (เช่น Ubuntu) แอปของคุณจะอยู่ภายในคอมพิวเตอร์เครื่องนี้และเข้าถึงทรัพยากรต่างๆ เช่น ระบบไฟล์และ RAM เพื่อส่งมอบงาน ในท้ายที่สุด แอปของคุณจะทำงานคล้ายกับที่ทำงานบนเครื่องในพื้นที่ของคุณ เฉพาะในเครื่องที่เป็นของ Amazon และเข้าถึงได้ทางอินเทอร์เน็ตโดยใช้โครงสร้างพื้นฐานของ Amazon

ตอนนี้ ลองนึกภาพผู้ใช้ชื่อ Alice ที่ได้จัดเตรียมอินสแตนซ์บน EC2 อลิซจะต้องทำสิ่งต่อไปนี้:

  • ตั้งกลุ่มความปลอดภัยเพื่ออนุญาตคำขอไปยังแอปของเธอ
  • ตั้งค่าตัวโหลดบาลานซ์
  • SSH ในอินสแตนซ์ ตั้งค่าแอปและข้อมูลลับของสภาพแวดล้อม และอื่นๆ

แม้ว่าวิธีนี้จะช่วยให้คุณควบคุมเครื่องได้อย่างเต็มที่ รวมถึงการทำงานและการทำงานอย่างไร ในบางครั้ง คุณต้องการมุ่งเน้นที่แอป ไม่ใช่โครงสร้างพื้นฐาน นี่คือที่มาของ Elasticbeanstalk

Elasticbeanstalk มี CLI ที่ช่วยให้ทำทั้งหมดนี้ได้ง่ายขึ้นและจะทำให้การทำงานส่วนใหญ่เป็นแบบอัตโนมัติ เช่น การสร้างกลุ่มความปลอดภัยและโหลดบาลานเซอร์ ในขณะที่โครงสร้างพื้นฐานพื้นฐานยังคงเป็น EC2 เลเยอร์ของสิ่งที่เป็นนามธรรมจะถูกเพิ่มเข้าไปด้านบนด้วยแดชบอร์ดภาพที่ช่วยให้คุณตั้งค่าตัวแปรสภาพแวดล้อม ฐานข้อมูล และการปรับขนาดอัตโนมัติ ตลอดจนรับบันทึกและดำเนินการฟังก์ชันอื่นๆ ใน ด้วยวิธีง่ายๆ

รางคืออะไร

สามารถใช้เครื่องมือหลายอย่างเพื่อทำให้เว็บแอปพลิเคชันทำงาน โดยปกติ ไลบรารีหรือเฟรมเวิร์กที่คุณใช้นั้นส่วนใหญ่จะกำหนดโดยภาษาที่มันถูกตั้งโปรแกรมไว้

หากภาษาที่คุณเลือกคือ Ruby เฟรมเวิร์กยอดนิยมที่คุณสามารถเลือกใช้ได้คือ Rails (เรียกอย่างเป็นทางการว่า Ruby on Rails) Rails ถูกสร้างขึ้นที่ Basecamp ในปี 2003 และในช่วงหลายปีที่ผ่านมาได้พัฒนาเป็นเฟรมเวิร์กที่มีคุณสมบัติครบถ้วนและสมบูรณ์มาก ซึ่งรวมถึงเกือบทุกอย่างที่คุณคิดเพื่อสร้างเว็บแอปที่ทันสมัย

บางสิ่งที่คุณสามารถสร้างด้วยรางได้นั้นรวมถึงบางสิ่งที่เรียบง่ายอย่างบล็อกส่วนตัวไปจนถึงบางสิ่งที่ซับซ้อนอย่าง Airbnb และ Github ฉันแน่ใจว่าคุณคุ้นเคยกับสองบริษัทนี้ และใช่ พวกเขาทำงานบน Rails!

แม้ว่าบทความนี้จะใช้ตัวอย่างของการปรับใช้แอป Rails กับ AWS แต่แนวคิดหลักส่วนใหญ่ยังคงเหมือนเดิมโดยไม่คำนึงถึงภาษาและเฟรมเวิร์กที่ใช้ เช่น Python/Django หรือ PHP/Laravel

การติดตั้งราง

โปรดทราบว่าคำสั่งที่แสดงไว้จะทำงานบนระบบที่ใช้ UNIX/Linux ได้ทันที หากคุณใช้ Windows ให้พิจารณาใช้ระบบย่อย Windows สำหรับ Linux และ/หรือ Microsoft Windows Terminal

สำหรับผู้เริ่มต้น ให้ตรวจสอบเวอร์ชัน Ruby ของคุณ:

ruby -v

อะไรก็ได้ 2.5.0 และข้างต้นเป็นสิ่งที่ดีที่จะไป ถ้าไม่ไปที่นี่เพื่อรับเวอร์ชันล่าสุด ฉันติดตั้งเวอร์ชัน 2.6.5 แล้ว

หากทุกอย่างลงตัวกับการติดตั้ง Ruby ของคุณ ให้ติดตั้ง Rails เลย

gem install rails

เมื่อคำสั่งนั้นทำงาน ให้ยืนยันเวอร์ชัน Rails ของคุณ:

rails --version

หากคุณเห็นสิ่งใดที่สูงกว่า 6.0.0 แสดงว่าคุณพร้อมที่จะอ่านบทแนะนำที่เหลือ

การตั้งค่า Postgres

เราจะใช้ Postgres DB เป็นที่เก็บข้อมูลสำหรับบทช่วยสอนนี้ นี่คือคำแนะนำที่ดีในการติดตั้งบนทุกแพลตฟอร์ม

การเพิ่มและเรียกใช้โค้ดของเรา

เราจะสร้าง API อย่างง่ายเพื่อเก็บข้อมูลภาพยนตร์ เช่น ชื่อ ปีที่ออกฉาย และประเภท API จะมีจุดปลาย 2 จุดเท่านั้น คือ GET &POST เพื่อวัตถุประสงค์ในการสาธิต

สร้างแอป Rails API ใหม่ด้วยคำสั่งต่อไปนี้:

rails new movie-api --api --database=postgresql

เมื่อคำสั่งดังกล่าวทำงานสำเร็จ อย่าลืมเปลี่ยนไดเร็กทอรีเป็นโฟลเดอร์โครงการที่สร้างขึ้นก่อนที่จะรันคำสั่งถัดไป

จากนั้น เราสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อสร้างโมเดลของเรา:

rails generate model Movie name:string year:integer genre:string

ตอนนี้มาตั้งค่าฐานข้อมูลและเรียกใช้การย้ายข้อมูล:

rails db:setup
rails db:migrate

หากสองคำสั่งนี้สำเร็จ คุณควรจะเห็นการโยกย้ายใหม่ใน db/migrate โฟลเดอร์ที่มีรหัสคล้ายกับต่อไปนี้:

class CreateMovies < ActiveRecord::Migration[6.0]
  def change
    create_table :movies do |t|
      t.string :name
      t.integer :year
      t.string :genre

      t.timestamps
    end
  end
end

จากนั้นเราจะดำเนินการต่อและเพิ่มรหัสตรรกะตัวควบคุมสำหรับปลายทาง API ของเรา:

rails g controller api/Movies

จากนั้น เพิ่มโค้ดต่อไปนี้ลงในไฟล์ app/controllers/movies_controller.rb :

class Api::MoviesController < ApplicationController
    # GET /movies
    def show
        @movies = Movie.all
        render json: @movies
    end

    # POST /movies
    def create
        @movie = Movie.new(movie_params)

        if @movie.save
            render json: @movie
        else
            render error: {error: 'Failed to add movie record'}, status: 400
        end
    end

    private

    def movie_params
        params.require(:movie).permit(:name, :year, :genre)
    end
end

มากำหนดเส้นทางกัน รหัสนี้จะเข้าไปที่ config/routes.rb.

Rails.application.routes.draw do
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
  namespace :api do
    resource :movies
  end
end

ณ จุดนี้ คุณสามารถทำการตรวจสุขภาพโดยใช้rails routes คำสั่งตรวจสอบว่าทุกอย่างทำงานอย่างถูกต้อง คุณควรเห็นผลลัพธ์ที่มีบางสิ่งที่คล้ายกับต่อไปนี้:เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

ก่อนเรียกใช้เซิร์ฟเวอร์ของเรา มาเพิ่มข้อมูลเมล็ดพันธุ์ใน db/seeds.rb :

# This file should contain all the record creation needed to seed the database with its default values.
# The data can then be loaded with the Rails db:seed command (or created alongside the database with db:setup).
movies = Movie.create([
    { name: 'Star Wars', year: 1977, genre: 'SCI-FI'}, 
    { name: 'Lord of the Rings', year: 2001, genre: 'Fantasy' }
])

เรียกใช้คำสั่งต่อไปนี้เพื่อเพิ่มข้อมูลลงในฐานข้อมูล:

rails db:seed

ตอนนี้คุณสามารถเรียกใช้ API ด้วยคำสั่งต่อไปนี้:

rails s

หากคุณไปที่ https://127.0.0.1:3000/api/movies, คุณควรเห็นข้อมูลเมล็ดพันธุ์ของเรา:

[
    {
        "id": 1,
        "name": "Star Wars",
        "year": 1977,
        "genre": "SCI-FI",
        "created_at": "2020-01-01T10:04:56.100Z",
        "updated_at": "2020-01-01T10:04:56.100Z"
    },
    {
        "id": 2,
        "name": "Lord of the Rings",
        "year": 2001,
        "genre": "Fantasy",
        "created_at": "2020-01-01T10:04:56.108Z",
        "updated_at": "2020-01-01T10:04:56.108Z"
    }
]

การสร้างบัญชี AWS ของคุณ

สำหรับผู้เริ่มต้น ไปที่เว็บไซต์นี้ หากคุณยังไม่มีบัญชี หรือคุณยังไม่ได้ลงชื่อเข้าใช้จากเบราว์เซอร์ คุณควรเห็นหน้าคล้ายกับสิ่งนี้:

เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

ไปข้างหน้าและคลิกสีส้ม Create an AWS Account ปุ่มที่มุมบนขวา (หรือถ้าคุณมีบัญชี ให้ลงชื่อเข้าใช้คอนโซลของคุณ) เมื่อคุณกรอกแบบฟอร์มลงทะเบียนแล้ว (อย่าลืมเลือก Account Type เป็น Personal เมื่อกรอกที่อยู่ของคุณ) คุณจะถูกทิ้งลงในคอนโซล อย่าลืมยืนยันที่อยู่อีเมลของคุณ!

อย่ากังวลหากสิ่งต่างๆ ดูล้นหลาม UI นั้นค่อนข้างง่ายในการนำทางเมื่อคุณรู้ว่าคุณต้องการไปที่ไหน

ตั้งค่าผู้ใช้ IAM

สิ่งต่อไปที่เราต้องทำคือตั้งค่าผู้ใช้ IAM ซึ่งจะทำให้เราเข้าถึงคีย์ API ที่เราสามารถใช้กับ SSH และเข้าถึงทรัพยากรของเราจากภายนอก AWS ได้

ยังเป็นความคิดที่ดีที่จะมีผู้ใช้ IAM แยกต่างหากที่มีสิทธิ์เข้าถึงเฉพาะทรัพยากรที่ผู้ใช้ต้องการ แทนที่จะใช้ข้อมูลรับรองของผู้ดูแลระบบเริ่มต้นเพื่อความปลอดภัย

ในโฮมเพจ ค้นหา IAM และไปที่โฮมเพจ IAM เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

ในหน้าแรกของ IAM ใต้ IAM Resources, คลิกที่ Users: 0. เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

หลังจากนั้น คลิก Add User. คุณสามารถกรอกชื่อผู้ใช้ที่คุณต้องการ แล้วเลือกช่องทำเครื่องหมายสำหรับ Programmatic access. เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

ในหน้าจอถัดไป ให้เลือก Attach existing policies directly แล้วใช้ช่องค้นหาเพื่อค้นหา AdministratorAccess. เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

ในหน้าถัดไป ให้เพิ่มแท็กชื่อเพื่อให้คุณสามารถระบุผู้ใช้ของคุณได้ในภายหลังจากรายการข้อมูลประจำตัว IAM:เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

สุดท้าย ในหน้ารีวิว ให้คลิกที่ Create User.

ในหน้าถัดไป ดาวน์โหลดไฟล์ CSV โดยใช้ข้อมูลประจำตัวของคุณ เราต้องการมันในช่วงสุดท้าย

เมื่อคุณมีไฟล์ชื่อ credentials.csv, คุณสามารถเปิดในแอพสเปรดชีตหรือตัวแก้ไขเพื่อดูค่าในนั้น เราสนใจ Access key ID และ Secret accesss key.

สิ่งสุดท้ายที่คุณต้องทำคือไปที่โฟลเดอร์ HOME และสร้างโฟลเดอร์ชื่อ .aws . ภายในโฟลเดอร์นี้ ให้วางไฟล์ชื่อ config. สังเกตว่าชื่อโฟลเดอร์ขึ้นต้นด้วย . และไฟล์ไม่มีนามสกุล เส้นทางแบบเต็มควรมีลักษณะดังนี้ /Users/your-user/.aws/config.

หากคุณไม่สามารถสร้าง .aws โฟลเดอร์และ config ไฟล์ คุณสามารถข้ามไปได้เลย สิ่งสำคัญคือต้องมีไฟล์ CSV ที่มีข้อมูลประจำตัวอยู่ในมือเพื่อใช้ในภายหลัง

วางสิ่งต่อไปนี้ลงใน config ไฟล์:

[profile eb-cli]
region = us-east-1
aws_access_key_id = your-aws-access-key-id
aws_secret_access_key = your-aws-secret-access-key

คุณสามารถค้นหาภูมิภาค AWS ของคุณได้ที่มุมบนขวาของหน้าบัญชี AWS เมื่อคุณลงชื่อเข้าใช้

สร้างฐานข้อมูล RDS

ตอนนี้เราจะดำเนินการต่อและสร้าง Postgres DB ซึ่งแอปของเราจะสื่อสาร เช่นเดียวกับ IAM คุณสามารถใช้ช่องค้นหาในหน้าแรกเพื่อค้นหา RDS และไปที่ช่องนั้นได้

ในหน้าแรกของ RDS ให้คลิกที่ Create database. เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

ในหน้าถัดไป ให้เลือก Standard Create; จากนั้นภายใต้ Engine Options, เลือก PostgreSQL. เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

ขณะที่คุณเลื่อนต่อไป ให้เลือก Free tier ภายใต้ Templates และภายใต้ Settings, ให้ DB instance identifier เป็น movie-api. คุณสามารถฝาก Master username เป็น postgres, แต่ไปข้างหน้าและเพิ่มรหัสผ่าน เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

ข้ามส่วน DB instance size, Storage, และ Availability & durability. ภายใต้ Connectivity, เลือก Additional connectivity configuration และตั้งค่า Publicly accessible ถึง Yes และ VPC Security group เพื่อ Create new. เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS .

ดำเนินการต่อและข้าม Database authentication. ภายใต้ Additional configuration, อย่าลืมเพิ่ม Initial database name; movie_api_db จะทำ. เมื่อตั้งค่าแล้ว ให้ข้ามส่วนอื่นๆ แล้วคลิก Create database. ที่ด้านล่างของหน้า

สุดท้าย กลับไปที่แดชบอร์ด RDS คลิกที่กลุ่มเริ่มต้นภายใต้ VPC Security group ในคอลัมน์ขวา:เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

ที่ด้านล่างของหน้าถัดไป ให้เลือก Inbound และแก้ไขกฎให้มีลักษณะดังนี้:เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

นอกจากนี้ ตรวจสอบให้แน่ใจว่า Outbound กฎมีลักษณะดังนี้:เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

สร้างแอป Elasticbeanstalk

ไปที่โฮมเพจที่ยืดหยุ่นได้และคลิก Create New Application. เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

กรอกแบบฟอร์มใบสมัครใหม่ตามความจำเป็น เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

จากนั้นคุณจะเห็นหน้าที่มีข้อความ No environments currently exist for this application. Create one now. คลิกที่ Create one now.

จากนั้นเลือก Web server environment. เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

ในส่วนถัดไป ให้เปลี่ยน Environment name ถึง production-env. ออกจาก Domain ว่างเปล่า. จากนั้น ภายใต้ Base Configuration, เลือก Preconfigured platform แล้วเลือก Ruby จากเมนูแบบเลื่อนลง สามารถฝาก Application code ใน Sample application; จากนั้นคลิก Create environment. การดำเนินการนี้จะใช้เวลาสักครู่ ดังนั้นโปรดอดทนรอ เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

เมื่อเสร็จแล้ว คุณควรเห็นหน้าที่มีลักษณะดังนี้:เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

ค้นหา URL ที่ให้ไว้หลัง ID สภาพแวดล้อม คลิกเพื่อดูแอป Ruby เริ่มต้นบน elasticbeanstalk เร็วๆ นี้ API ของคุณจะทำงานบน URL เดียวกัน

ทำให้แอปของคุณพร้อมสำหรับการปรับใช้

เพื่อให้แอปพร้อมสำหรับการใช้งาน เราต้องกำหนดค่าเว็บเซิร์ฟเวอร์ของเราก่อน

เนื่องจาก Rails มาพร้อมกับ Puma ซึ่งเป็นเว็บเซิร์ฟเวอร์ที่พร้อมใช้งานจริงและเป็นเซิร์ฟเวอร์เริ่มต้น คุณจึงสามารถแก้ไขไฟล์ปรับแต่งได้โดยตรงที่ config/puma.rb.

แก้ไขไฟล์ของคุณให้มีลักษณะดังนี้:

max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count }
threads min_threads_count, max_threads_count

# Specifies the `port` that Puma will listen on to receive requests; default is 3000.
#
port        ENV.fetch("PORT") { 3000 }

# Specifies the `environment` that Puma will run in.
#
environment ENV.fetch("RAILS_ENV") { "development" }

# Specifies the `pidfile` that Puma will use.
pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }

# Specifies the number of `workers` to boot in clustered mode.
# Workers are forked web server processes. If using threads and workers together,
# the concurrency of the application would be max `threads` * `workers.`
# Workers do not work on JRuby or Windows (both of which do not support
# processes).
#
workers ENV.fetch("WEB_CONCURRENCY") { 2 } # <------ uncomment this line

# Use the `preload_app!` method when specifying a `workers` number.
# This directive tells Puma to first boot the application and load code
# before forking the application. This takes advantage of Copy On Write
# process behavior so workers use less memory.
#
preload_app! # <------ uncomment this line

# Allow Puma to be restarted by the `Rails restart` command.
plugin :tmp_restart

แก้ไขด้านล่างของ config/database.yml โดยการแสดงความคิดเห็น production . ที่มีอยู่ config และใช้สิ่งนี้แทน:

production:
  url: <%= ENV['DATABASE_URL'] %>

สุดท้าย ไปที่คอนโซล Elasticbeanstalk ของคุณบน AWS เลือก production-env สภาพแวดล้อม จากนั้นไปที่ Configuration.

ในหน้าจอภาพรวมการกำหนดค่า ให้คลิกที่ Modify สำหรับ Software ส่วน:

เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS .

ถัดไป เพิ่ม DATABASE_URL และ RAILS_ENV จากนั้นคลิกที่ 'Apply':

เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

โปรดทราบว่า DB URL ของคุณสร้างขึ้นโดยใช้ Endpoint คุณรับทราบก่อนหน้านี้จากแดชบอร์ด RDS อยู่ในรูปแบบ postgresql://postgres:YOURPASSWORD@ENDPOINT:5432/movie_api_db . หากคุณจำรหัสผ่านที่เลือกไม่ได้ คุณสามารถเปลี่ยนได้ใน Modify ของแดชบอร์ด RDS ของฐานข้อมูลของคุณ

การปรับใช้ด้วยตนเอง

ง่ายเหมือนการสร้างไฟล์ zip ของแอปจากบรรทัดคำสั่ง แล้วอัปโหลดบนคอนโซล Elasticbeanstalk ของคุณ

ก่อนอื่น cd ลงในโฟลเดอร์โครงการ ในการสร้างไฟล์ zip คุณสามารถเรียกใช้คำสั่งต่อไปนี้:

zip -r deploy_1.zip .

deploy_1.zip จะเป็นชื่อของโฟลเดอร์ zip ที่สร้างขึ้น และจะปรากฏในไดเร็กทอรีโครงการของคุณพร้อมกับไฟล์อื่นๆ เสร็จแล้ว? ยอดเยี่ยม. สู่ AWS

จากแดชบอร์ดของ Elasticbeanstalk ให้คลิกที่ Upload and Deploy :

เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

คุณสามารถเปลี่ยนป้ายกำกับเวอร์ชันเป็นสิ่งที่มีความหมายมากขึ้น:

เหตุใดและอย่างไรจึงจะโฮสต์แอป Rails 6 ของคุณด้วย AWS ElasticBeanstalk และ RDS

เมื่อ Elasticbeanstalk อัปเดตสภาพแวดล้อมเสร็จแล้ว คุณสามารถเยี่ยมชม URL สภาพแวดล้อมของคุณเพื่อดู API ของคุณทำงาน! คุณสามารถใช้บริการฟรีเช่นนี้ เพื่อส่งคำขอบางส่วนและเติมฐานข้อมูลของคุณบน AWS

การทำให้ใช้งานได้ด้วย EB CLI

Elasticbeanstalk CLI ทำให้สิ่งที่คุณต้องทำด้วยตนเองเกือบทั้งหมดจนถึงจุดนี้ทำได้ง่ายมากด้วยคำสั่งเพียงไม่กี่คำสั่ง ฉันจะแสดงวิธีตั้งค่าและใช้งานในโครงการปัจจุบันของเรา ทั้งหมดนี้ขึ้นอยู่กับการตั้งค่าผู้ใช้ IAM ของคุณอย่างถูกต้อง ดังนั้นตรวจสอบให้แน่ใจว่าทุกอย่างจากขั้นตอนนั้นใช้ได้ หรือคุณมี CSV พร้อมข้อมูลรับรองของคุณพร้อม

สำหรับคอมพิวเตอร์ส่วนใหญ่ คุณควรติดตั้ง Python ไว้แล้ว การติดตั้งจึงทำได้ง่ายดังนี้:

pip install awsebcli --user

บน MacOS คุณยังสามารถใช้:

brew install awsebcli

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับการติดตั้งได้ที่นี่

เมื่อการติดตั้งเสร็จสิ้น cd ไปยังโฟลเดอร์โครงการของคุณและเรียกใช้ eb init.

ทำตามคำแนะนำตามสภาพแวดล้อม AWS ของคุณ เลือกภูมิภาคโดยป้อนการเลือกหมายเลขที่ถูกต้อง:

Select a default region
1) us-east-1 : US East (N. Virginia)
2) us-west-1 : US West (N. California)
3) us-west-2 : US West (Oregon)
4) eu-west-1 : EU (Ireland)
5) eu-central-1 : EU (Frankfurt)
6) ap-south-1 : Asia Pacific (Mumbai)
7) ap-southeast-1 : Asia Pacific (Singapore)
8) ap-southeast-2 : Asia Pacific (Sydney)
9) ap-northeast-1 : Asia Pacific (Tokyo)
10) ap-northeast-2 : Asia Pacific (Seoul)
11) sa-east-1 : South America (Sao Paulo)
12) cn-north-1 : China (Beijing)
13) cn-northwest-1 : China (Ningxia)
14) us-east-2 : US East (Ohio)
15) ca-central-1 : Canada (Central)
16) eu-west-2 : EU (London)
17) eu-west-3 : EU (Paris)

สำหรับส่วนเวอร์ชัน Ruby ให้เลือกเวอร์ชันที่เกี่ยวข้องโดยใช้ Puma:

1) Ruby 2.6 (Passenger Standalone)
2) Ruby 2.6 (Puma)
3) Ruby 2.5 (Passenger Standalone)
4) Ruby 2.5 (Puma)
5) Ruby 2.4 (Passenger Standalone)
6) Ruby 2.4 (Puma)
7) Ruby 2.3 (Passenger Standalone)
8) Ruby 2.3 (Puma)
9) Ruby 2.2 (Passenger Standalone)
10) Ruby 2.2 (Puma)
11) Ruby 2.1 (Passenger Standalone)
12) Ruby 2.1 (Puma)
13) Ruby 2.0 (Passenger Standalone)
14) Ruby 2.0 (Puma)
15) Ruby 1.9.3

ฉันเลือก 2.

ทำตามข้อความแจ้งที่เหลือและเลือก 'ไม่' เพื่อใช้ CodeCommit และ 'ไม่' เพื่อตั้งค่า SSH

หากคุณไม่ได้ตั้งค่าการกำหนดค่า AWS CLI จะแจ้งให้คุณใส่คีย์ AWS เพิ่มได้ตามต้องการ

เมื่อดำเนินการเสร็จแล้ว CLI จะออกจากการทำงาน จากนั้นคุณสามารถเรียกใช้คำสั่งต่างๆ เช่น eb status, เพื่อตรวจสอบสถานะของแอปที่เราปรับใช้

Environment details for: production-env
  Application name: movie-api
  Region: us-east-2
  Deployed Version: Deploy 2-2
  Environment ID: e-mab3kjy6pp
  Platform: arn:aws:elasticbeanstalk:us-east-2::platform/Puma with Ruby 2.6 running on 64bit Amazon Linux/2.11.1
  Tier: WebServer-Standard-1.0
  CNAME: production-env.qnbznvpp2t.us-east-2.elasticbeanstalk.com
  Updated: 2020-01-22 23:37:17.183000+00:00
  Status: Ready
  Health: Green

ในการปรับใช้เวอร์ชันใหม่ เพียงเรียกใช้ eb deploy.

และนั่นแหล่ะ! คุณสามารถอ่านเพิ่มเติมเกี่ยวกับคำสั่ง CLI อื่นๆ ที่คุณสามารถลองใช้ได้ที่นี่

สรุป

ในบทช่วยสอนนี้ เราได้เรียนรู้วิธีตั้งค่า Rails API อย่างง่าย วิธีตั้งค่าทรัพยากร AWS เช่น Elasticbeanstalk และ RDS และวิธีปรับใช้แอปเพื่อใช้งาน

เรายังครอบคลุมถึงวิธีใช้ Elasticbeanstalk CLI ในการปรับใช้แอประบบคลาวด์ของเราโดยอัตโนมัติ ตอนนี้คุณได้เรียนรู้วิธีเปลี่ยนจากแอปที่ใช้งานได้บนเครื่องในพื้นที่ของคุณไปยังแอปที่ใช้งานได้ซึ่งแชร์กับคนทั้งโลกบน AWS