Di modul ini, Anda akan menggunakan Amazon Elastic Container Service (Amazon EC2) untuk memberi contoh klaster terkelola instans komputasi EC2 dan menerapkan gambar Anda sebagai kontainer yang berjalan di klaster. Mulai Membangun

ikhtisar arsitektur

a. Klien
Klien membuat permintaan melalui port 80 ke load balancer.

b. Penyeimbang Muatan
Load balancer mendistribusikan permintaan ke seluruh port yang tersedia.

c. Grup Target
Instans terdaftar di grup target aplikasi.

d. Port Kontainer
Tiap kontainer menjalankan proses aplikasi tunggal yang mengikat induk klaster node.js ke port 80 di dalam ruang namanya.

e. Monolit node.js yang Dikemas
Induk klaster node.js bertanggung jawab mendistribusikan lalu lintas ke para pekerja di dalam aplikasi monolitik. Arsitektur ini dikemas, tetapi masih tetap monolitik karena tiap kontainer memiliki semua fitur yang sama dari sisa kontainer.

Amazon Elastic Container Service (ECS) adalah layanan pengelolaan kontainer dengan kinerja tinggi dan sangat mudah diskalakan yang mendukung kontainer Docker dan memungkinkan Anda menjalankan aplikasi dan mengelola klaster instans Amazon EC2 dengan mudah. Dengan panggilan API sederhana, Anda dapat meluncurkan dan menghentikan aplikasi yang didukung Docker, menanyakan status lengkap klaster Anda, dan mengakses banyak fitur yang tak asing lagi seperti grup keamanan, Elastic Load Balancing, volume EBS, dan peran IAM.

Anda dapat menggunakan Amazon ECS untuk menjadwalkan penempatan kontainer ke seluruh klaster Anda berdasarkan kebutuhan sumber daya dan persyaratan ketersediaan. Anda juga dapat mengintegrasikan pengatur jadwal Anda atau pengatur jadwal pihak ketiga untuk memenuhi persyaratan khusus bisnis dan aplikasi.

Tidak ada biaya tambahan untuk Amazon ECS. Anda membayar sumber daya AWS (misalnya instans EC2 atau volume EBS) yang Anda buat untuk menyimpan dan menjalankan aplikasi.


Ikuti petunjuk langkah demi langkah di bawah untuk menerapkan aplikasi node.js menggunakan Amazon ECS. Pilih setiap nomor langkah untuk membentangkan bagian.

break-the-monolith
  • Langkah 1. Meluncurkan Klaster ECS menggunakan AWS CloudFormation

    Buat klaster Amazon ECS yang diterapkan di balik Application Load Balancer.

    1. Navigasi ke konsol AWS CloudFormation.
    2. Pilih Create stack.
    3. Pilih Upload a template file dan pilih file ecs.yml dari proyek GitHub di amazon-ecs-nodejs-microservice/2-containerized/infrastructure/ecs.yml lalu pilih Next.
    4. Untuk nama stack, masukkan BreakTheMonolith-Demo. Pastikan parameter lainnya memiliki nilai berikut:
      1. Kapasitas yang Diinginkan = 2
      2. TipeInstans = t2.micro
      3. UkuranMaks. = 2
    5. Pilih Berikutnya.
    6. Pada halaman Configure stack options, pertahankan opsi default dan gulir ke bawah lalu pilihNext.
    7. Pada halaman Ulas BreakTheMonolith-Demo gulir ke bagian bawah halaman, setujui pernyataan Capabilities dengan memilih kotak centang, dan pilih Create stack.

    Stack Anda akan terlihat dengan status CREATE_IN_PROGRESS. Anda dapat memilih tombol refresh di bagian kanan atas layar untuk memeriksa kemajuan. Proses ini biasanya memerlukan waktu kurang dari 5 menit.

    buat stack

    ⚐ CATATAN: Sebagai pilihan, Anda dapat menggunakan AWS Command Line Interface (AWS CLI) untuk menerapkan stack AWS CloudFormation. Jalankan kode berikut di terminal dari folder amazon-ecs-nodejs-microservices/3-microservices dan ganti [region] dengan Wilayah AWS Anda.

    $ aws cloudformation deploy \
       --template-file infrastructure/ecs.yml \
       --region [region] \
       --stack-name BreakTheMonolith-Demo \
       --capabilities CAPABILITY_NAMED_IAM
  • Langkah 2. Memastikan Klaster Anda Berjalan

    Amazon ECS Memverifikasi Klaster
    • Plih klaster BreakTheMonolith-Demo, lalu pilih tab Task untuk memverifikasi bahwa tidak ada tugas yang berjalan.
    Tugas Klaster Amazon ECS
    • Pilih tab ECS Instances untuk memverifikasi ada dua instans Amazon EC2 yang dibuat oleh templat AWS CloudFormation.
      ⚐ Catatan: Jika Anda menerima pesan bahwa agen ECS telah usang, pilih Learn more untuk mendapatkan petunjuk untuk memperbarui agen ECS.
    Instans Amazon ECS
  • Langkah 3. Menulis Definisi Tugas

    Definisi tugas menentukan cara Amazon ECS menerapkan kontainer aplikasi ke seluruh klaster.

    • Dari menu navigasi kiri Amazon ECS, pilih Task Definitions.
    • Pilih Create new Task Definition.
    • Pada halaman Select launch type compatibility, pilih opsi EC2 lalu pilih Next step.
    • Pada halaman Configure task and container definitions, lakukan hal berikut ini:
      • Di kolom Task Definition Name, masukkan api.
      • Gulir ke bawah ke Container Definitions dan pilih Add container.
      • Di jendela Add container:
        • Parameter yang tidak didefinisikan bisa dikosongkan atau dengan dengan pengaturan default.
        • Di kolom Container name, masukkan api.
        • Di kolom Image, masukkan [account-ID].dkr.ecr.[region].amazonaws.com/api:v1
          Ganti [account-ID] dan [region] dengan informasi spesifik Anda. Pastikan tag v1 cocok dengan nilai yang Anda gunakan di Modul 1 untuk menandai dan mendorong gambar. Ini adalah URL gambar repositori ECR Anda yang dibuat di modul sebelumnya.
        • Di kolom Memory Limits, pastikan Hard limit dipilih dan masukkan 256 sebagai nilainya.
        • Pada Port mappings, Port host = 0 dan Port kontainer = 3000.
        • Gulir ke ENVIRONMENT, unit CPU = 256.
    • Pilih Tambahkan.
      Anda akan kembali ke halaman Configure task and container definitions.
    • Gulir ke bagian bawah halaman dan pilih Create.

    Definisi Tugas Anda akan tertera di konsol.

    definisi tugas
  • Langkah 4. Mengonfigurasi Application Load Balancer: Grup Target

    Application Load Balancer (ALB) memungkinkan layanan Anda menerima lalu lintas masuk. ALB secara otomatis merutekan lalu lintas ke instans kontainer yang berjalan di klaster Anda dan menggunakannya sebagai grup target.

    Periksa Nama VPC Anda: Jika ini bukan pertama kalinya Anda menggunakan akun AWS ini, Anda mungkin memiliki beberapa VPC. Sebaiknya konfigurasikan Grup Target Anda dengan VPC yang benar.

    • Navigasikan ke bagian Penyeimbang Muatan di Konsol EC2.
    • Cari Load Balancer dengan nama demo.
    • Pilih kotak centang di samping demo untuk melihat perincian Load Balancer.
    • Di tab Description, cari atribut VPC (dalam format ini: vpc-xxxxxxxxxxxxxxxxx).
      ⚐ Catatan: Atribut VPC akan diperlukan saat Anda mengonfigurasi grup target ALB.
    atribut vpc

    Konfigurasi Grup Target ALB

    • Navigasikan ke Target Group section of the EC2 Console.
    • Pilih Create target group.
    • Konfigurasi parameter Grup Target berikut (untuk parameter yang tidak tertera di bawah ini, pertahankan nilai default):
      • Untuk Target group name, masukkan api.
      • Untuk Protocol, pilih HTTP.
      • Untuk Port, masukkan 80.
      • Untuk VPC, pilih nilai yang cocok dengan nilai yang berasal dari deskripsi Load Balancer. Kemungkinan besar ini BUKAN VPC default Anda.
      • Akses Advanced health check settings dan edit parameter berikut seperlunya: 
        • Untuk Healthy threshold, masukkan 2.
        • Untuk Unhealthy threshold, masukkan 2.
        • Untuk Timeout, masukkan 5.
        • Untuk Interval, masukkan 6.
    • Pilih Buat.
    buat grup target
  • Langkah 5. Mengonfigurasi Application Load Balancer: Listener

    Pemeriksaan listener ALB untuk permintaan koneksi masuk ke ALB Anda.

    Tambahkan Listener ke ALB

    • Navigasikan ke bagian Penyeimbang Muatan di Konsol EC2.
    • Pilih kotak centang di samping demo untuk melihat perincian Load Balancer.
    • Pilih tab Listeners.
    • Pilih Add listener dan edit parameter berikut seperlunya:
      • Untuk Protocol:port, pilih HTTP dan masukkan 80.
      • Untuk Default action(s), pilih Forward to dan di kolom Target group, masukkan api.
    • Pilih Simpan.
    listener ke ALB
  • Langkah 6. Menerapkan Monolit sebagai Layanan

    Menerapkan monolit sebagai layanan ke dalam klaster.

    • Navigasikan ke Amazon ECS console dan pilih Cluster dari bilah menu kiri.
    • Pilih klaster BreakTheMonolith-Demo, pilih tab Services lalu pilih Create.
    • Pada halaman Configure service, edit parameter berikut (dan pertahankan nilai default untuk parameter yang tidak tertera di bawah ini): 
      • Untuk Launch type, pilih EC2.
      • Untuk Service name, masukkan api
      • Untuk Number of tasks, masukkan 1.
      • Pilih Langkah berikutnya.
    • Pada halaman Configure network, bagian Load balancing, pilih Application Load Balancer.
      Parameter tambahan akan muncul: Service IAM role dan Load balancer name.
      • Untuk Service IAM role, pilih BreakTheMonolith-Demo-ECSServiceRole.
      • Untuk Load balancer name, pastikan demo dipilih.
    • Di bagian Container to load balance, pilih Add to load balancer.
      Informasi tambahan dengan label api:3000 ditampilkan.
    • Di bagian api:3000, lakukan tindakan berikut:
      • Untuk kolom Production listener port, pilih 80:HTTP.
      • Untuk Target group name, pilih grup Anda: api.
      • Pilih Langkah berikutnya.
    • Pada halaman Set Auto Scaling, pertahankan pengaturan default dan pilih Next step.
    • Pada halaman Review, ulas pengaturan lalu pilih Create Service.
    • Setelah layanan dibuat, pilih View Service.
    API Layanan Amazon ECS

    Bagus! Sekarang layanan Anda sudah berjalan. Kontainer mungkin perlu waktu satu menit untuk terdaftar sebagai sehat dan mulai menerima lalu lintas.

  • Langkah 7. Uji Monolit Anda

    Validasikan penerapan Anda dengan memeriksa apakah layanan tersebut tersedia dari internet dan ping layanan tersebut.

    Untuk Menemukan URL Layanan Anda:

    • Navigasikan ke bagian Penyeimbang Muatan Konsol EC2.
    • Pilih demo load balancer Anda.
    • Di tab Description, salin nama DNS dan rekatkan ke tab atau jendela browser yang baru.
    • Anda tentu akan melihat pesan Ready to receive requests.


    Lihat Tiap Bagian Layanan:
    Aplikasi node.js merutekan lalu lintas ke tiap pekerja berdasarkan URL. Untuk melihat pekerja, cukup tambahkan nama pekerja api/[worker-name] di akhir Nama DNS sebagai berikut:

    • http://[DNS name]/api/users
    • http://[DNS name]/api/threads
    • http://[DNS name]/api/posts

    Anda juga dapat menambahkan nomor catatan di akhir URL untuk menggali ke catatan khusus. Misalnya: http://[DNS name]/api/posts/1 atau http://[DNS name]/api/users/2

    demo pengguna