Proyek di AWS

Buat Aplikasi Web Modern

Menerapkan aplikasi web, menghubungkan ke database, dan menganalisis perilaku pengguna.

Modul 2: Meng-hosting Aplikasi Anda di Server Web

Di modul ini Anda akan membuat layanan mikro yang di-hosting dengan AWS Fargate.  

Ikhtisar

Di modul ini, Anda akan membuat layanan mikro yang di-hosting dengan AWS Fargate sehingga situs web Mythical Mysfits Anda dapat terintegrasi dengan ujung belakang aplikasi.

AWS Fargate adalah opsi penerapan dalam Amazon Elastic Container Service (ECS) yang memungkinkan Anda untuk menerapkan kontainer tanpa harus mengelola klaster atau server apa pun. Untuk ujung belakang Mythical Mysfits, kita akan menggunakan Python dan membuat aplikasi Flask di kontainer Docker di belakang Network Load Balancer. Aplikasi-aplikasi ini akan membentuk ujung belakang untuk situs web ujung depan.

Mengapa Kita Memilih Fargate?

Kita memilih Fargate di sini karena ini merupakan pilihan tepat untuk membangun proses yang sudah berjalan lama seperti ujung belakang layanan mikro untuk platform web dan seluler dan PaaS. Dengan Fargate, Anda mendapatkan kendali atas wadah dan fleksibilitas untuk memilih kapan mereka berjalan tanpa khawatir tentang penyediaan atau penskalaan server. Ini menawarkan kontrol penuh atas jaringan, keamanan, dan layanan untuk komunikasi layanan dan secara asli terintegrasi dengan layanan AWS untuk keamanan, jaringan, kontrol akses, perkakas pengembang, pemantauan, dan penebangan.

Selain Fargate, pelanggan juga memiliki pilihan untuk menggunakan AWS Lambda untuk kebutuhan komputasi mereka. Sementara Lambda menawarkan manfaat tanpa server yang sama seperti Fargate, Lambda sangat bagus untuk aplikasi berbasis data yang perlu merespons secara real-time terhadap perubahan data, perubahan status sistem, atau tindakan oleh pengguna. Kami akan membahas Lambda secara lebih terperinci di Modul 5 saat kami menggunakannya untuk menganalisis perilaku pelanggan di situs.

Instruksi Implementasi

Ikuti instruksi langkah demi langkah di bawah ini untuk membuat layanan AWS Fargate Anda. Karena ini adalah modul besar, kami membaginya menjadi 3 submodul. Dalam modul 2a, Anda akan mengatur infrastruktur inti dalam persiapan untuk penerapan layanan Anda. Dalam modul 2b, Anda akan menerapkan layanan Anda menggunakan AWS Fargate. Terakhir, dalam modul 2c Anda akan mengatur penyebaran otomatis menerapkan Layanan Kode AWS.

Modul 2A: Pengaturan Infrastruktur Inti

Sebelum kita dapat membuat layanan, kita perlu menciptakan lingkungan infrastruktur inti yang akan digunakan layanan, termasuk infrastruktur jaringan di Amazon VPC, dan AWS Identity and Access Management Roles yang akan menentukan izin yang akan dimiliki ECS dan wadah kami pada atas AWS.

Kita akan menggunakan AWS CloudFormation untuk menyelesaikannya. AWS CloudFormation adalah layanan yang secara terprogram dapat menyediakan sumber daya AWS yang Anda nyatakan dalam file JSON atau YAML yang disebut CloudFormation Templates, memungkinkan praktik terbaik infrastruktur sebagai kode.  

  • Kami telah menyediakan templat CloudFormation untuk membuat semua sumber daya Jaringan dan Keamanan yang diperlukan di /module-2/cfn/core.yml. Templat ini akan membuat sumber daya berikut:

    • VPC Amazon - lingkungan jaringan yang berisi empat subnet (dua publik dan dua pribadi) dalam ruang IP pribadi 10.0.0.0/16, serta semua konfigurasi Tabel Rute yang diperlukan. Subnet untuk jaringan ini dibuat di Zona AWS Availability Zones (AZ) untuk memungkinkan ketersediaan tinggi di beberapa fasilitas fisik di Wilayah AWS. Pelajari lebih lanjut tentang bagaimana AZ dapat membantu Anda mencapai ketersediaan tinggi.
    • Two NAT Gateways (satu untuk setiap subnet publik) - memungkinkan kontainer yang pada akhirnya akan kami terapkan ke subnet pribadi kami untuk berkomunikasi ke Internet untuk mengunduh paket yang diperlukan, dll.
    • Titik akhir VPC DynamoDB - ujung belakang layanan mikro kami akhirnya akan berintegrasi dengan Amazon DynamoDB untuk kegigihan (sebagai bagian modul 3).
    • Grup Keamanan - Memungkinkan kontainer Docker Anda untuk menerima lalu lintas di port 8080 dari Internet melalui Network Load Balancer.
    • Peran IAM - Identity and Access Management Roles dibuat. Ini akan digunakan sepanjang lokakarya untuk memberikan layanan AWS atau sumber daya yang Anda buat akses ke layanan AWS lainnya seperti DynamoDB, S3, dan banyak lagi.

    Untuk membuat sumber daya ini, jalankan perintah berikut di terminal Cloud9 (akan memakan waktu ~ 10 menit untuk membuat tumpukan):

    aws cloudformation create-stack --stack-name MythicalMysfitsCoreStack --capabilities CAPABILITY_NAMED_IAM --template-body file://~/environment/aws-modern-application-workshop/module-2/cfn/core.yml

    Anda dapat memeriksa status pembuatan tumpukan Anda melalui Konsol AWS atau dengan menjalankan perintah:

    aws cloudformation describe-stacks --stack-name MythicalMysfitsCoreStack

    Jalankan perintah jelaskan tumpukan, sampai Anda melihat status "StackStatus": "CREATE_COMPLETE"

    jelaskan tumpukan

    (klik untuk zoom)

    Ketika Anda mendapatkan respons ini, CloudFormation telah menyelesaikan penyediaan semua sumber daya jaringan dan keamanan inti yang diuraikan di atas dan Anda dapat melanjutkan. Tunggu sampai tumpukan di atas menampilkan CREATE_COMPLETE sebelum melanjutkan.

    Anda akan menggunakan nilai dari output dari perintah ini sepanjang lokakarya. Anda dapat menjalankan perintah berikut untuk langsung menampilkan perintah jelas-tumpukan di atas ke file baru di IDE Anda yang akan disimpan sebagai cloudformation-core-output.json:

    aws cloudformation describe-stacks --stack-name MythicalMysfitsCoreStack > ~/environment/cloudformation-core-output.json

Modul 2B: Menerapkan Layanan Dengan AWS Fargate

Selanjutnya, Anda akan membuat gambar wadah Docker yang berisi semua kode dan konfigurasi yang diperlukan untuk menjalankan ujung belakang Mythical Mysfits sebagai layanan mikro API yang dibuat dengan Flask. Kami akan membuat gambar kontainer Docker di dalam Cloud9 dan kemudian mendorongnya ke Amazon Elastic Container Registry, di mana akan tersedia untuk menarik ketika kami membuat layanan kami menggunakan Fargate.

Diagram Arsitektur

browser untuk penyeimbang muatan ke Fargate
  • T: Membuat Docker Image

    Semua kode yang diperlukan untuk menjalankan ujung belakang layanan kami disimpan dalam /module-2/app/ directory dari repositori yang telah Anda kloning ke IDE Cloud9 Anda. Jika Anda ingin meninjau kode Python yang menggunakan Flask untuk membuat API layanan, lihat file /module-2/app/service/mythicalMysfitsService.py.

    Docker sudah terinstal di IDE Cloud9 yang telah Anda buat, jadi untuk membangun citra Docker secara lokal, yang perlu kita lakukan adalah menjalankan dua perintah berikut di terminal Cloud9:  

    Pertama ubah direktori ke ~/environment/module-2/app

    cd ~/environment/aws-modern-application-workshop/module-2/app

    Anda bisa mendapatkan ID akun Anda dan wilayah default dari output CloudFormation **jelaskan-tumpukan

    Ganti REPLACE_ME_ACCOUNT_ID dengan ID akun Anda dan REPLACE_ME_REGION dengan wilayah default Anda di perintah berikut untuk membangun gambar docker menggunakan file Dockerfile, yang berisi instruksi Docker. Perintah ini menandai gambar Docker, menggunakan opsi -t, dengan format tag tertentu sehingga gambar tersebut nantinya dapat didorong ke layanan Amazon Elastic Container Registry.

    Setelah Anda memiliki ID Akun, Anda siap untuk membuat gambar docker:

    docker build . -t REPLACE_ME_AWS_ACCOUNT_ID.dkr.ecr.REPLACE_ME_REGION.amazonaws.com/mythicalmysfits/service:latest

    Anda akan melihat unduhan docker dan instal semua paket dependensi yang diperlukan yang dibutuhkan aplikasi kami, dan menampilkan tag untuk gambar yang dibuat. Salin tag gambar untuk referensi nanti. Di bawah ini tag contoh yang ditampilkan adalah: 111111111111.dkr.ecr.us-east-1.amazonaws.com/mythicalmysfits/service:latest

    Successfully built 8bxxxxxxxxab
    Successfully tagged 111111111111.dkr.ecr.us-east-1.amazonaws.com/mythicalmysfits/service:latest
    B. Menguji Layanan Secara Lokal

    Mari kita uji gambar kita secara lokal di dalam Cloud9 guna memastikan segalanya beroperasi seperti yang diharapkan. Salin tag gambar yang dihasilkan dari perintah sebelumnya dan jalankan perintah berikut untuk menerapkan kontainer “secara lokal” (yang sebenarnya Cloud9 IDE Anda berada di dalam AWS!):

    docker run -p 8080:8080 REPLACE_ME_WITH_DOCKER_IMAGE_TAG

    Hasilnya, Anda akan melihat Docker melaporkan bahwa kontainer Anda berfungsi dan berjalan secara lokal:

     * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)

    Untuk menguji layanan dengan permintaan lokal, kami akan membuka browser web bawaan di dalam Cloud9 IDE yang dapat digunakan untuk melakukan pratinjau aplikasi yang berjalan pada instans IDE.

    Untuk membuka browser web pratinjau, pilih Pratinjau > Pratinjau Aplikasi Berjalan di bilah menu Cloud9:

    preview-menu

     

    Proses ini akan membuka panel lainnya di IDE sehingga browser web tersedia. Tambah /mysfits ke ujung URI di bilah alamat browser pratinjau dan tekan ENTER:

    address-bar

    Jika berhasil, Anda akan melihat respons dari layanan yang mengembalikan dokumen JSON yang disimpan di `/aws-modern-application-workshop/module-2/app/service/mysfits-response.json`

    Ketika selesai menguji layanan, Anda dapat menghentikannya dengan menekan CTRL-c pada PC atau Mac.

    C: Dorong Gambar Docker ke Amazon ECR

    Dengan pengujian layanan kami yang berhasil secara lokal, kami siap membuat repositori gambar kontainer di Amazon Elastic Container Registry (Amazon ECR) dan mendorong gambar kami ke dalamnya. Untuk membuat registri, jalankan perintah berikut, ini membuat repositori baru dalam registri AWS ECR default yang dibuat untuk akun Anda.

    aws ecr create-repository --repository-name mythicalmysfits/service

    Respons terhadap perintah ini akan berisi metadata tambahan tentang repositori yang dibuat. Untuk mendorong gambar kontainer ke dalam repositori baru kami, kami harus mendapatkan kredensial autentikasi untuk klien Docker kami ke repositori.

    Jalankan perintah berikut, yang akan mengembalikan perintah login guna mengambil kredensial untuk klien Docker kami, kemudian secara otomatis menjalankannya (termasuk perintah lengkap termasuk $ di bawah). 'Login Berhasil' akan dilaporkan jika perintah berhasil.

    $(aws ecr get-login --no-include-email)

    Berikutnya, dorong gambar yang Anda buat ke repositori ECR menggunakan tag yang disalin dari atas. Menggunakan perintah ini, Docker akan mendorong gambar Anda dan semua gambar bergantung pada Amazon ECR:

    docker push REPLACE_ME_WITH_DOCKER_IMAGE_TAG

    Jalankan perintah berikut untuk melihat gambar Docker tersimpan yang baru didorong ke dalam repositori ECR:

    aws ecr describe-images --repository-name mythicalmysfits/service
  • A: Buat Klaster AWS Fargate

    Kini, tersedia gambar di ECR yang bisa kita terapkan ke layanan yang di-hosting pada Amazon ECS menggunakan AWS Fargate. Layanan yang sama dengan yang Anda uji secara lokal melalui terminal di Cloud9 sebagai bagian dari modul terakhir sekarang akan digunakan di cloud dan tersedia secara publik di belakang Network Load Balancer.

    Pertama, kita akan membuat klaster di Amazon Elastic Container Service (ECS). Langkah ini mewakili klaster “layanan” yang kontainer layanannya akan diterapkan. Server sedang dalam "kuotasi" karena Anda akan menggunakan AWS Fargate. Fargate memungkinkan Anda untuk menentukan bahwa kontainer Anda diterapkan ke klaster tanpa harus benar-benar menyediakan atau mengelola server sendiri.

    Untuk membuat klaster baru di ECS, jalankan perintah berikut:

    aws ecs create-cluster --cluster-name MythicalMysfits-Cluster
    B: Buat Grup AWS CloudWatch Logs

    Berikutnya, kami akan membuat grup log baru di AWS CloudWatch Logs. AWS CloudWatch Logs adalah layanan untuk pengumpulan dan analisis layanan. Log yang dihasilkan kontainer Anda secara otomatis akan didorong ke AWS CloudWatch logs sebagai bagian dari grup khusus ini. Ini sangat penting ketika menggunakan AWS Fargate karena Anda tidak akan memiliki akses ke infrastruktur server tempat kontainer Anda berjalan.

    Untuk membuat grup log baru di CloudWatch log, jalankan perintah berikut:

    aws logs create-log-group --log-group-name mythicalmysfits-logs
    C: Daftarkan Definisi Tugas ECS

    Sekarang kita memiliki klaster yang dibuat dan grup log yang ditentukan untuk tujuan log kontainer kita akan didorong, kita siap untuk mendaftarkan definisi tugas ECS. Tugas dalam ECS adalah serangkaian gambar kontainer yang harus dijadwalkan bersama. Definisi tugas menyatakan bahwa kumpulan kontainer dan sumber daya dan konfigurasi yang diperlukan oleh kontainer tersebut. Anda akan menggunakan AWS CLI untuk membuat definisi tugas baru untuk cara gambar kontainer baru Anda dijadwalkan ke klaster ECS yang baru saja kita buat.

    File JSON telah disediakan yang akan berfungsi sebagai input ke perintah CLI.

    Buka ~/environment/aws-modern-application-workshop/module-2/aws-cli/task-definition.json di IDE.

    Ganti nilai yang ditunjukkan dengan nilai yang sesuai dari sumber daya yang Anda buat.

    Nilai-nilai ini akan ditarik dari respons CloudFormation yang Anda salin sebelumnya serta tag gambar docker yang Anda dorong sebelumnya ke ECR, misalnya: REPLACE_ME_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/mythicalmysfits/service:latest

    Setelah Anda mengganti nilai tersebut dalam task-defintion.json dan menyimpannya. Jalankan perintah berikut untuk mendaftarkan definisi tugas baru di ECS:

    aws ecs register-task-definition --cli-input-json file://~/environment/aws-modern-application-workshop/module-2/aws-cli/task-definition.json
  • A. Buat Network Load Balancer

    Dengan definisi tugas baru yang terdaftar, kami siap menyediakan infrastruktur yang dibutuhkan dalam tumpukan layanan kami. Daripada secara langsung mengekspos layanan kami ke Internet, kami akan menyediakan Network Load Balancer (NLB) untuk menduduki tingkat depan layanan kami. Ini akan memungkinkan kode situs web ujung depan kami untuk berkomunikasi dengan satu nama DNS sementara layanan ujung belakang kami akan bebas untuk melakukan scale-in dan scale-out secara elastis berdasarkan permintaan atau jika terjadi kegagalan dan kontainer baru perlu disediakan.

    Untuk penyediaan NLB baru, jalankan perintah CLI berikut di terminal Cloud9 (ambil subnetIds dari output CloudFormation yang Anda simpan):

    aws elbv2 create-load-balancer --name mysfits-nlb --scheme internet-facing --type network --subnets REPLACE_ME_PUBLIC_SUBNET_ONE REPLACE_ME_PUBLIC_SUBNET_TWO > ~/environment/nlb-output.json

    Ketika perintah ini berhasil diselesaikan, file baru akan dibuat di IDE Anda yang disebut nlb-output.json. Anda akan menggunakan DNSName, VpcId, dan LoadBalancerArn di langkah-langkah kemudian.

    B. Buat Grup Target Penyeimbang Muatan

    Berikutnya, gunakan CLI untuk membuat grup target NLB. Grup target memungkinkan sumber daya AWS untuk mendaftarkan diri sebagai target permintaan yang diterima penyeimbang muatan untuk diteruskan. Kontainer layanan kami akan secara otomatis mendaftar ke target ini sehingga kontainer tersebut dapat menerima lalu lintas dari NLB ketika disediakan. Perintah ini mencakup satu nilai yang perlu diganti, vpc-id Anda yang dapat ditemukan sebagai nilai dalam output MythicalMysfitsCoreStack yang disimpan sebelumnya yang dikembalikan oleh CloudFormation.

    aws elbv2 create-target-group --name MythicalMysfits-TargetGroup --port 8080 --protocol TCP --target-type ip --vpc-id REPLACE_ME_VPC_ID --health-check-interval-seconds 10 --health-check-path / --health-check-protocol HTTP --healthy-threshold-count 3 --unhealthy-threshold-count 3 > ~/environment/target-group-output.json

    Ketika perintah ini selesai, outputnya akan disimpan ke target-group-output.json di IDE Anda. Anda akan mereferensikan nilai TargetGroupArn di langkah berikutnya.

    C. Buat Listener Penyeimbang Muatan

    Berikutnya, gunakan CLI untuk membuat listener penyeimbang muatan untuk NLB. Hal ini menginformasikan penyeimbang muatan bahwa untuk permintaan yang diterima pada port tertentu, permintaan harus diteruskan ke target yang telah terdaftar ke grup target di atas. Pastikan untuk mengganti dua nilai yang ditunjukkan dengan ARN yang sesuai dari TargetGroup dan NLB yang Anda simpan dari langkah sebelumnya:

    aws elbv2 create-listener --default-actions TargetGroupArn=REPLACE_ME_NLB_TARGET_GROUP_ARN,Type=forward --load-balancer-arn REPLACE_ME_NLB_ARN --port 80 --protocol TCP
  • A: Buat Peran Tertaut Layanan Untuk ECS

    Jika Anda telah menggunakan ECS sebelumnya, Anda dapat melewati langkah ini dan melanjutkan ke langkah berikutnya. Jika Anda belum pernah menggunakan ECS sebelumnya, kami perlu membuat **peran tertaut layanan** di IAM yang memberikan izin layanan ECS sendiri untuk membuat permintaan API ECS dalam akun Anda. Langkah ini diperlukan karena ketika Anda membuat layanan di ECS, layanan akan memanggil API dalam akun Anda untuk melakukan tindakan seperti menarik gambar Docker, membuat tugas baru, dll.

    Tanpa membuat peran ini, layanan ECS tidak akan diberikan izin untuk melakukan tindakan yang diperlukan. Untuk membuat peran, jalankan perintah berikut di terminal:  

    aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com

    Jika hal di atas mengembalikan kesalahan tentang peran yang sudah ada, Anda dapat mengabaikannya, karena itu akan menunjukkan bahwa peran tersebut telah dibuat secara otomatis di akun Anda sebelumnya.

    B: Buat Layanan

    Dengan NLB yang dibuat dan dikonfigurasi, dan layanan ECS yang diberikan izin yang sesuai, kami siap untuk membuat **layanan** ECS yang sebenarnya dengan kontainer kami yang akan berjalan dan mendaftarkan diri ke penyeimbang muatan untuk menerima lalu lintas. Kami telah menyertakan file JSON untuk input CLI yang terletak di: `~/environment/aws-modern-application-workshop/module-2/aws-cli/service-definition.json`. File ini mencakup semua detail konfigurasi untuk layanan yang akan dibuat, termasuk yang menunjukkan bahwa layanan ini harus diluncurkan dengan **AWS Fargate** - yang berarti Anda tidak perlu menyediakan server apa pun di dalam klaster yang ditargetkan. Wadah yang dijadwalkan sebagai bagian dari tugas yang digunakan dalam layanan ini akan berjalan di atas sebuah klaster yang sepenuhnya dikelola oleh AWS.

    Buka ~/environment/aws-modern-application-workshop/module-2/aws-cli/service-definition.json di IDE dan ganti nilai REPLACE_ME yang ditunjukkan. Simpan, lalu jalankan perintah berikut untuk membuat layanan:

    aws ecs create-service --cli-input-json file://~/environment/aws-modern-application-workshop/module-2/aws-cli/service-definition.json
    B. Menguji Layanan

    Salin nama DNS yang Anda simpan saat membuat NLB dan kirim permintaan ke sana menggunakan browser pratinjau di Cloud9 (atau dengan browser web apa pun, karena saat ini layanan kami tersedia di Internet). Coba mengirimkan permintaan ke sumber daya mysfits:

    http://mysfits-nlb-123456789-abc123456.elb.us-east-1.amazonaws.com/mysfits

    Respons yang menunjukkan respons JSON yang sama dengan yang kita terima sebelumnya ketika menguji wadah Docker secara lokal di Cloud9 berarti Flask API Anda sudah aktif dan berjalan di AWS Fargate.

    Catatan: Network Load Balancer ini hanya mendukung permintaan HTTP (http://) karena tidak ada sertifikat SSL/TLS yang diinstal di sana. Untuk tutorial ini, pastikan untuk mengirimkan permintaan menggunakan http:// saja, https:// permintaan tidak akan berfungsi dengan baik.

  • A: Ganti Titik akhir API

    Selanjutnya, kami perlu mengintegrasikan situs web kami dengan ujung belakang API baru Anda, bukan menggunakan data kode keras yang sebelumnya kami unggah ke S3. Anda harus memperbarui file berikut untuk menggunakan URL NLB yang sama untuk panggilan API (jangan sertakan jalur /mysfits): /module-2/web/index.html

    Buka file di Cloud9 dan ganti area yang disorot di bawah antara tanda kutip dengan URL NLB:

    before-replace

    Setelah menempel, garis harus terlihat seperti di bawah ini:

    after-replace
    B: Unggah Ke S3

    Untuk mengunggah file ini ke situs web yang di-hosting S3 Anda, gunakan lagi nama bucket yang dibuat selama Modul 1, dan jalankan perintah berikut:

    aws s3 cp ~/environment/aws-modern-application-workshop/module-2/web/index.html s3://INSERT-YOUR-BUCKET-NAME/index.html

    Buka situs web Anda menggunakan URL yang sama dengan yang digunakan di akhir Modul 1 untuk melihat situs web Mythical Mysfits baru Anda, yang mengambil data JSON dari Flask API yang berjalan di dalam kontainer Docker yang digunakan untuk AWS Fargate!

Modul 2C: Mengotomatiskan Penyebaran menggunakan Layanan Kode AWS

Sekarang setelah Anda menjalankan dan menjalankan layanan, Anda mungkin memikirkan perubahan kode yang ingin Anda lakukan pada layanan Flask Anda. Ini akan menjadi hambatan bagi kecepatan pengembangan Anda jika Anda harus melalui semua langkah yang sama di atas setiap kali Anda ingin menggunakan fitur baru untuk layanan Anda. Di situlah Integrasi Berkelanjutan dan Pengiriman Berkelanjutan atau CI/CD masuk!

Dalam modul ini, Anda akan membuat tumpukan CI/CD yang dikelola penuh yang secara otomatis akan memberikan semua perubahan kode yang Anda buat ke basis kode Anda ke layanan yang Anda buat selama modul terakhir.

Diagram Arsitektur

membangun arsitektur situs web dinamis - cloud9, alat kode, fargate
  • A: Membuat Bucket S3 Untuk Artefak Jalur Pipa

    Kita perlu membuat bucket S3 lagi yang akan digunakan untuk menyimpan artefak sementara yang dibuat di tengah pelaksanaan jalur pipa CI/CD. Pilih nama bucket yang baru untuk artefak-artefak ini dan buat satu menggunakan perintah CLI berikut:

    aws s3 mb s3://REPLACE_ME_CHOOSE_ARTIFACTS_BUCKET_NAME

    Berikutnya, bucket ini memerlukan kebijakan bucket untuk menetapkan izin untuk data yang disimpan di dalamnya. Namun tidak seperti bucket situs web kami yang mengizinkan akses ke setiap orang, jalur pipa CI/CD kami harus memiliki akses ke bucket ini. Kami telah menyediakan file JSON yang dibutuhkan untuk kebijakan ini pada ~/environment/aws-modern-application-workshop/module-2/aws-cli/artifacts-bucket-policy.json.

    Buka file ini, dan di dalamnya Anda perlu mengganti beberapa string untuk menyertakan ARN yang dibuat sebagai bagian dari MythicalMysfitsCoreStack sebelumnya, serta nama bucket yang baru Anda pilih untuk artefak CI/CD Anda.

    Setelah Anda memodifikasi dan menyimpan file ini, laksanakan perintah berikut untuk memberi akses ke bucket ini ke jalur pipa CI/CD Anda:

    aws s3api put-bucket-policy --bucket REPLACE_ME_ARTIFACTS_BUCKET_NAME --policy file://~/environment/aws-modern-application-workshop/module-2/aws-cli/artifacts-bucket-policy.json
    B: Membuat Repositori CodeCommit

    Anda membutuhkan tempat untuk mendorong dan menyimpan kode Anda berada. Buat repositori **AWS CodeCommit** menggunakan CLI untuk tujuan ini:

    aws codecommit create-repository --repository-name MythicalMysfitsService-Repository
    C: Membuat Proyek CodeBuild

    Dengan repositori untuk menyimpan kode kami, dan ember S3 yang akan digunakan untuk artefak CI/CD kami, mari kita tambahkan ke tumpukan CI/CD dengan cara untuk membangun layanan terjadi. Ini akan diselesaikan dengan membuat AWS CodeBuild Project. Setiap kali eksekusi bangunan dipicu, AWS CodeBuild akan secara otomatis menyediakan server pembangunan untuk konfigurasi kami dan menjalankan langkah-langkah yang diperlukan untuk membuat gambar Docker dan mendorong versi baru ke repositori ECR yang kami buat (dan kemudian menurunkan server ketika pembangunan selesai).

    Langkah-langkah untuk pembangunan kami (yang mengemas kode Python kami dan membangun/mendorong kontainer Docker) termasuk dalam file ~/environment/aws-modern-application-workshop/module-2/app/buildspec.yml. File buildspec.yml adalah apa yang Anda buat untuk menginstruksikan CodeBuild langkah-langkah apa yang diperlukan untuk melaksanakan pembangunan dalam proyek CodeBuild.

    Untuk membuat proyek CodeBuild, file input CLI lain harus diperbarui dengan parameter khusus untuk sumber daya Anda. Filenya terletak di ~/environment/aws-modern-application-workshop/module-2/aws-cli/code-build-project.json. Demikian pula, ganti nilai dalam file ini seperti yang telah Anda lakukan sebelumnya dari MythicalMysfitsCoreStackOutput. Setelah disimpan, laksanakan yang berikut dengan CLI untuk membuat proyek:

    aws codebuild create-project --cli-input-json file://~/environment/aws-modern-application-workshop/module-2/aws-cli/code-build-project.json
    D: Membuat Jalur Pipa CodePipeline

    Terakhir, kita membutuhkan cara untuk secara terus menerus mengintegrasikan repositori CodeCommit kami dengan proyek CodeBuild kami sehingga build akan terjadi secara otomatis setiap kali perubahan kode didorong ke repositori. Kemudian, kami membutuhkan cara untuk terus mengirimkan artefak yang baru dibangun tersebut ke layanan kami di ECS. AWS CodePipeline adalah layanan yang menempelkan tindakan-tindakan ini bersama-sama dalam sebuah pipa yang akan Anda buat selanjutnya.

    Jalur pipa Anda di CodePipeline akan melakukan apa yang saya jelaskan di atas. Setiap kali perubahan kode didorong ke repositori CodeCommit Anda, CodePipeline akan mengirimkan kode terbaru ke proyek AWS CodeBuild Anda sehingga akan terjadi pembangunan. Ketika berhasil dibangun oleh CodeBuild, CodePipeline akan melakukan penyebaran ke ECS menggunakan gambar wadah terbaru yang didorong oleh eksekusi CodeBuild ke ECR.

    Semua langkah-langkah ini didefinisikan dalam file JSON asalkan Anda akan menggunakan sebagai input ke AWS CLI untuk membuat pipa. File ini terletak di ~/environment/aws-modern-application-workshop/module-2/aws-cli/code-pipeline.json, buka dan ganti atribut yang diperlukan di dalamnya, dan simpan file.

    Setelah disimpan, buat jalur pipa di CodePipeline dengan perintah berikut:

    aws codepipeline create-pipeline --cli-input-json file://~/environment/aws-modern-application-workshop/module-2/aws-cli/code-pipeline.json
    E: Mengaktifkan Akses Diautomasi ke Repositori Gambar ECR

    Kami memiliki satu langkah terakhir sebelum jalur pipa CI/CD kami dapat menjalankan ujung ke ujung dengan sukses. Dengan jalur pipa CI/CD di tempat, Anda tidak akan secara manual mendorong gambar kontainer ke ECR lagi. CodeBuild akan mendorong gambar baru sekarang.

    Kita perlu memberi izin CodeBuild untuk melakukan tindakan pada repositori gambar Anda dengan kebijakan repositori ECR*. Dokumen kebijakan perlu diperbarui dengan ARN spesifik untuk peran CodeBuild yang dibuat oleh MythicalMysfitsCoreStack, dan dokumen kebijakan terletak di ~/environment/aws-modern-application-workshop/module-2/aws-cli/ecr-policy.json.

    Perbarui dan simpan file ini lalu jalankan perintah berikut untuk membuat kebijakan:

    aws ecr set-repository-policy --repository-name mythicalmysfits/service --policy-text file://~/environment/aws-modern-application-workshop/module-2/aws-cli/ecr-policy.json

    Ketika itu telah berhasil dibuat, Anda memiliki jalur pipa CI/CD ujung-ke-ujung yang berfungsi untuk mengirimkan perubahan kode secara otomatis ke layanan Anda di ECS.

  • A: Menggunakan Git dengan AWS CodeCommit

    Untuk menguji jalur pipa baru, kita perlu mengonfigurasi git di dalam Cloud9 IDE Anda dan mengintegrasikannya dengan repositori CodeCommit Anda.

    AWS CodeCommit menyediakan bantuan kredensial untuk git yang akan kita gunakan untuk mempermudah integrasi.

    Jalankan perintah berikut secara berurutan di terminal untuk mengonfigurasi git untuk digunakan dengan AWS CodeCommit (tidak ada yang akan melaporkan respons jika berhasil):

    git config --global user.name "REPLACE_ME_WITH_YOUR_NAME"
    git config --global user.email REPLACE_ME_WITH_YOUR_EMAIL@example.com
    git config --global credential.helper '!aws codecommit credential-helper $@'
    git config --global credential.UseHttpPath true

    Selanjutnya, ubah direktori di IDE Anda ke direktori lingkungan menggunakan terminal:

    cd ~/environment/

    Sekarang, kita siap untuk mengkloning repositori kita menggunakan perintah terminal berikut:

    git clone https://git-codecommit.REPLACE_REGION.amazonaws.com/v1/repos/MythicalMysfitsService-Repository

    Ini akan memberi tahu kami bahwa repositori kami kosong! Mari memperbaikinya dengan menyalin file aplikasi ke dalam direktori repositori kita menggunakan perintah berikut:

    cp -r ~/environment/aws-modern-application-workshop/module-2/app/* ~/environment/MythicalMysfitsService-Repository/
    B: Mendorong Perubahan Kode

    Sekarang kode layanan lengkap yang kami gunakan untuk membuat layanan Fargate kami di Modul 2 disimpan di repositori lokal yang baru saja kami kloning dari AWS CodeCommit. Mari kita lakukan perubahan pada layanan Flask sebelum melakukan perubahan kita, untuk menunjukkan bahwa jalur pipa CI/CD yang kita buat berfungsi. Di Cloud9, buka file yang disimpan di ~/environment/MythicalMysfitsService-Repository/service/mysfits-response.json dan ubah umur salah satu mysfits ke nilai lainnya dan simpan file.

    Setelah menyimpan file, ubah direktori ke direktori repositori baru:

    cd ~/environment/MythicalMysfitsService-Repository/

    Kemudian, jalankan perintah git berikut untuk mendorong perubahan kode Anda.

    git add .
    git commit -m "I changed the age of one of the mysfits."
    git push

    Setelah perubahan dimasukkan ke dalam repositori, Anda dapat membuka layanan CodePipeline di AWS Console untuk melihat perubahan Anda saat mereka maju melalui jalur pipa CI/CD. Setelah melakukan perubahan kode, diperlukan waktu sekitar 5 hingga 10 menit agar perubahan diterapkan ke layanan langsung Anda yang berjalan di Fargate.

    Selama ini, AWS CodePipeline akan mengatur memicu eksekusi pipa ketika perubahan telah diperiksa ke dalam repositori CodeCommit Anda, memicu proyek CodeBuild Anda untuk memulai bangunan baru, dan mengambil gambar docker yang didorong ke ECR oleh CodeBuild dan melakukan tindakan Layanan Pembaruan ECS otomatis untuk menguras koneksi kontainer lama yang berjalan di layanan Anda dan menggantinya dengan gambar yang baru dibangun. Segarkan situs web Mythical Mysfits Anda di browser untuk melihat perubahan telah berlaku.

    Anda dapat melihat kemajuan perubahan kode Anda melalui konsol CodePipeline di sini (tidak diperlukan tindakan apa pun, saksikan saja otomatisasi beraksi!): AWS CodePipeline

    Ini menyimpulkan Modul 2.

Berikutnya, simpan data mysfit.