Menyebarkan API dengan AWS Elastic Beanstalk



Pada akhir Januari, kami mengadakan kursus intensif online "Backend PHP Developer" . Kali ini, topik pelajaran terbuka adalah pembuatan bot Telegram untuk memesan kopi di sebuah institusi dan membayar online . Webinar itu ternyata sangat kaya, jadi ia merentang selama dua hari: "Hari 1" dan "Hari 2" . Kami menyampaikan kepada Anda versi teks dari hari pertama intensif online. Itu tentang memperkenalkan AWS Elastic Beanstalk dan menyebarkan API dengannya.

Dosen - Michael Kamorin , Pengembang Backend Senior di Skyeng.


Komputasi awan


Menggunakan cloud computing secara umum dan AWS secara khusus memberi kita keuntungan sebagai berikut:

  1. Akses jaringan yang nyaman sesuai permintaan. Kami dapat terhubung kapan saja 365 hari setahun 24/7.
  2. Dana umum sumber daya komputasi yang dapat dikonfigurasi. Cloud computing memungkinkan kita untuk menggunakan dana umum tertentu dari sumber daya komputasi, yang jauh lebih besar dari sumber daya satu mesin, jika dibandingkan dengan server pribadi.
  3. Ketentuan dan rilis yang cepat. Kami bisa mendapatkan sumber daya tambahan dalam waktu singkat jika perlu. Dan segera lepaskan sumber daya ini segera setelah tidak diperlukan.
  4. Biaya operasi terendah. Tergantung pada tingkat abstraksi, diperlukan tingkat investasi keuangan yang berbeda, tetapi biasanya minimal.

Masalah apa yang kita pecahkan:

  1. Katering mandiri. Ketika kami berkomunikasi dengan penyedia reguler dari server VPS yang sama, kami menulis surat, meminta untuk mengalokasikan sumber daya yang diperlukan, dll. Sebagai tanggapan, kami menawarkan tarif dan opsi konfigurasi. Kami memilih, membayar, dan banyak lagi. Dalam AWS, semuanya jauh lebih sederhana: kartu terpasang langsung, kami memilih lingkungan sendiri dan memulai semuanya dengan mempertimbangkan kebutuhan kami. Ini adalah layanan mandiri yang lengkap, yang sangat nyaman.
  2. Hosting Secara alami, untuk mengeksekusi kode kami pada mesin jarak jauh, kami mendapatkan hosting yang diperlukan. Pada prinsipnya, cloud tidak hanya menyelesaikan masalah ini.
  3. Kumpulan sumber daya yang dapat dikonfigurasi. Bot Telegram tertentu, tentu saja, tidak akan membutuhkan banyak sumber daya, tetapi kebetulan kita berbicara tentang tugas bisnis yang lebih kompleks atau pertumbuhan proyek.
  4. Elastisitas. Apa yang dimaksud di sini? Ketika kita memiliki musim yang jelas (bahkan dalam satu hari), ketika kita mengetahui waktu mulainya waktu utama dan beban puncak, kita dapat menghemat. Jelas bahwa jika kita menggunakan sumber daya komputasi yang mencakup beban puncak 24/7, kita akan membayar lebih. Elastisitas memungkinkan kami meningkatkan sumber daya komputasi sesaat sebelum jam tayang utama dan merilisnya segera setelah selesai. Dengan demikian, kami secara signifikan mengurangi biaya servis infrastruktur kami.
  5. Terukur. Kami melihat jumlah panggilan ke fungsi kami (dalam hal, misalnya, AWS Lambda), kami melihat sumber daya (berapa banyak mesin virtual yang bekerja, berapa bebannya), yaitu, kami memiliki pemantauan yang cukup canggih dan akurat.

Tingkat abstraksi

Mari kita bicara sedikit tentang tingkat abstraksi:

  1. Di On-Premises tradisional , kami menyediakan segalanya mulai dari pembelian perangkat keras hingga konfigurasi aplikasi yang kami luncurkan.
  2. IaaS memberi kita beberapa perangkat keras dan hypervisor. Selanjutnya kita dapat secara independen memilih dan menginstal OS yang diperlukan, lingkungan, kita dapat melakukan penskalaan, dll.
  3. CaaS . Kontainer sebagai Tingkat Layanan baru-baru ini menonjol dengan perkembangan kontainerisasi pada umumnya dan buruh pelabuhan pada khususnya. Dalam kasus CaaS, kami tidak diharuskan untuk mengkonfigurasi sistem operasi - kami sudah disediakan dari serangkaian sistem operasi pra-konfigurasi tertentu.
  4. PaaS . Tingkat abstraksi yang cukup lama, yang muncul jauh sebelum CaaS menonjol. Pada level ini, kami juga disediakan lingkungan runtime, yang pada kenyataannya, ini adalah hosting klasik. Misalkan kita disediakan beberapa versi PHP untuk dipilih dengan satu set ekstensi. Pada level PHP ini, kita dapat melakukan apa saja: memasang balancers, menulis kode kita sendiri, dll.
  5. FaaS . Salah satu contohnya adalah AWS Lambda yang sama. Dalam hal ini, penskalaan sudah disediakan oleh penyedia cloud yang menyediakan fungsionalitas, dan kami tidak memiliki masalah ketika aplikasi mulai tumbuh. AWS Lambda yang sama dapat mendukung ribuan instance tanpa persyaratan apa pun untuk kami konfigurasi (cukup bayar).
  6. SaaS . Dalam hal ini, kami hanya memiliki akses ke opsi konfigurasi yang dimasukkan oleh programmer ke perangkat lunak yang kami gunakan.



Agar tidak berdasar, kami memberikan contoh pada tingkat abstraksi:

  • IaaS - Amazon Elastic Compute Cloud (EC2) - kami akan bekerja dengannya hari ini;
  • CaaS - Amazon Elastic Container Service (ECS);
  • PaaS - Google App Engine;
  • FaaS - AWS Lambda;
  • SaaS - Gmail.

Berbagi sumber daya

Bagaimana awan umumnya digunakan? Ada beberapa skenario:

  1. Cloud pribadi. Semua infrastruktur terletak di pusat data dan milik perusahaan (milik dalam arti bahwa tidak seorang pun kecuali kita yang dapat mengerjakan sumber daya ini).
  2. Cloud publik. Semua infrastruktur ada di cloud. Kami hanya tahu bahwa kami memiliki layanan tingkat yang dipilih, yang disediakan untuk kami. Kami tidak tahu bagaimana mengaturnya di tingkat bawah. Kami tidak sepenuhnya memiliki data kami, jika hanya karena jika kami ingin data kami dihapus, kami tidak memiliki jaminan bahwa ini akan terjadi. Selain itu, jika penyedia diretas, kemungkinan hilangnya informasi rahasia sangat tinggi. Ya, risiko ini ada dengan cloud pribadi, tetapi di sana kita berbicara tentang peretasan target sumber daya Anda, dan di sini Anda bisa mendapatkan di bawah distribusi, seperti yang mereka katakan, secara kebetulan dan untuk perusahaan.
  3. Cloud hybrid. Ada beberapa opsi yang mungkin:

  • dalam mode normal, infrastrukturnya sendiri digunakan, cloud terhubung pada beban puncak;
  • diasingkan dari perhitungan perangkat lunak kami dibawa ke cloud;
  • dalam mode normal, cloud digunakan, dalam situasi darurat, peralihan ke infrastruktur Anda terjadi.

Aws


Berbicara tentang AWS, pertama-tama kami menyebutkan beberapa komponen yang akan kami butuhkan dan akan digunakan di bawah tenda.

AWS IAM

IAM (Identity and Access Management) adalah hal pertama yang harus Anda hadapi ketika mendaftar. IAM memungkinkan Anda untuk mengkonfigurasi hak akses akun, mengelola peran, grup, dan pengguna.

Amazon menyarankan agar kita mengikuti praktik Terbaik, meskipun kita harus sedikit melanggarnya selama pelajaran. Ini adalah praktik berikut:

  • untuk setiap orang fisik - pengguna yang terpisah;
  • untuk setiap aplikasi - peran yang terpisah;
  • akses yang akan dikeluarkan tidak dilakukan, kami tidak meraba-raba, kami tidak menggunakan kode;
  • tidak pernah menggunakan akun root selain dari pengaturan awal. Jika Anda secara tidak sengaja menyalakan kata sandi di suatu tempat, seseorang dapat membeli mesin virtual dari akun root Anda. Dan bahkan jika Anda mengatur semua peringatan yang diperlukan, Anda bisa mendapatkan seribu setengah dolar dengan sangat cepat.

AWS EC2

EC2 - Elastic Compute Cloud (IaaS) - layanan web yang memberi kami kemampuan untuk menggunakan mesin virtual. EC2 menyediakan:

  • manajemen daya komputasi yang akan kami gunakan (saat Anda mendaftar akun gratis, akses diberikan hanya pada satu jenis instance);
  • Suite Amazon Machine Image (AMI) - gambar mesin virtual dengan aplikasi, perpustakaan, dll.;

Juga, biasanya untuk bekerja dengan EC2 Anda harus menggunakan Amazon S3 (Layanan Penyimpanan Sederhana) - penyimpanan file.

Perlu dicatat di sini bahwa kami tidak akan menyentuh EC2 secara langsung, karena di sana Anda perlu mengkonfigurasi semuanya sendiri, mulai dari lingkungan dan diakhiri dengan pengaturan akses jaringan. Namun demikian, harus dipahami bahwa di bawah kap EC2 selalu ada.

AWS Elastic Beanstalk

Elastic Beanstalk - layanan orkestrasi (PaaS atau CaaS, tergantung pada apa yang akan Anda atur). Jika containerisasi bekerja dengan wadah itu sendiri dan isinya, maka orkestrasi bekerja dengan wadah, katakanlah, pada tingkat meta. Orkestrasi sebenarnya adalah suatu mekanisme yang memungkinkan kita untuk memulai wadah / mesin virtual baik dengan API atau melalui konsol.

Beanstalk menambahkan pada lapisan OS lingkungan untuk bahasa pemrograman tertentu, server web, kontainerisasi, satu set perpustakaan, ekstensi, dll.

Kami akan menggunakan PHP 7.3 dengan server web Apache (nginx tidak disediakan, ini tidak baik atau buruk, tetapi hanya fakta yang perlu diingat). Karena kita tidak akan mengatur ini semua, kita, pada prinsipnya, tidak peduli.

Instalasi dan pengaturan


Baiklah, mari kita lanjutkan berlatih. Tahap pertama adalah pendaftaran dan pengaturan hak akses:

  1. daftar di amazon.com . Kami mengambil akun gratis dengan set mobil minimum;
  2. masuk. Karena Elastic Beanstalk menawarkan wilayah Oregon secara default, pilih Oregon di Konsol Manajemen AWS:
  3. buka layanan IAM melalui konsol (tulis iam di bilah pencarian):
  4. di sana kita melihat dasbor tempat kita melakukan tindakan tertentu

  5. Untuk bekerja dengan Elastic Beanstalk, kami membuat dan mengonfigurasi pengguna baru (hanya akses terprogram):


  6. tambahkan grup dengan hak AWSElasticBeanstalkFullAccess:
  7. unduh detail akses dan simpan di suatu tempat di tempat yang aman. Jika Anda kehilangan file, pengguna harus membuatnya kembali.




Jadi, kami memiliki pengguna, dan kami akan terus bekerja dengan pengguna ini. Pada tahap ini, semuanya.

EB CLI

Sekarang Anda perlu menginstal konsol ElasticBeanstalk itu sendiri. Ini adalah proses yang cukup panjang, berikut ini ikhtisar singkat tentang apa yang perlu dilakukan:

  1. Kami mengkloning repositori https://github.com/aws/aws-elastic-beanstalk-cli-setup .
  2. Kami dengan cermat membaca readme dan melakukan tindakan yang diperlukan untuk OS Anda (masalah potensial juga dijelaskan dalam readme).
  3. Setelah instalasi, jangan lupa untuk mengekspor variabel dengan path.
  4. Periksa apakah semuanya berfungsi, eb –version .



Inisialisasi Pohon Kacang Elastis

Sekarang kita perlu menginisialisasi Elastic Beanstalk di proyek kita. Untuk melakukan ini:

  • membongkar arsip dengan kode sumber ;
  • jalankan pemasangan komposer;
  • jalankan eb init;
  • pilih wilayah (defaultnya adalah Oregon) dan tentukan detail akses dari file yang diunduh;
  • tentukan nama aplikasi, bahasa pemrograman PHP dan versi 7.3.

Harap dicatat bahwa kami tidak akan menggunakan akses CodeCommit dan ssh .

Setelah inisialisasi, folder .elasticbeanstalk muncul di aplikasi, di dalamnya akan ada file konfigurasi.



Membuat dan Menjalankan Mesin Virtual EC2

Sekarang Anda perlu membuat dan menjalankan instance EC2 melalui Beanstalk. Untuk melakukan ini:

  • jalankan eb create ;
  • tentukan nama lingkungan, DNS CNAME , pilih load balancer (aplikasi) ;
  • menolak Spot Armada (elastisitas di bawah beban);
  • periksa status status eb / kesehatan eb ;
  • mencoba membuka situs eb terbuka .

Anehnya, tetapi kita menghadapi kesalahan 403. Apa yang salah? Karena aplikasi kita ada di Laravel, titik masuknya terletak di direktori /public , dan EB mengharapkan titik masuk di direktori root secara default.



Perbaikan konfigurasi

Langkah selanjutnya adalah memperbaiki konfigurasi:

  • pergi ke konsol di Elastic Beanstalk;
  • pilih aplikasi kita dan pergi ke Konfigurasi;
  • di bagian Perangkat Lunak, klik tombol Ubah;
  • instal Dokumen root di / publik;
  • klik Terapkan;
  • Kami memeriksa kinerja ( /api/v1/goods ).

Pengaturan pemeriksaan kesehatan

Sebenarnya, masih mengkonfigurasi cek kesehatan . Untuk melakukan ini:

  • pergi ke konsol di Elastic Beanstalk;
  • pilih aplikasi kita dan pergi ke Konfigurasi;
  • di bagian Load Balancer, klik tombol Modify;
  • di bagian Proses, pilih default dan pilih tindakan Edit;
  • tentukan Path / api / v1 / barang dan kode HTTP 200 di bagian Pemeriksaan Kesehatan;
  • klik Simpan dan Terapkan.

Kami selanjutnya membahas pemantauan dan hari pertama intensif online berakhir. Jika Anda tertarik dengan topik ini, lebih baik untuk meninjau pelajaran sepenuhnya dan ulangi semua langkah untuk guru. Selain itu, disarankan juga memperhatikan kelanjutan. Ingatlah bahwa hasil dari intensif online 2-hari adalah pembuatan bot Telegram untuk memesan kopi di institusi dan membayar online:

Source: https://habr.com/ru/post/id485910/


All Articles