Otomatiskan CloudFront pembaruan saat titik akhir penyeimbang beban berubah dengan menggunakan Terraform - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Otomatiskan CloudFront pembaruan saat titik akhir penyeimbang beban berubah dengan menggunakan Terraform

Tamilselvan P, Mohan Annam, dan Naveen Suthar, Amazon Web Services

Ringkasan

Saat pengguna Amazon Elastic Kubernetes Service (Amazon EKS) menghapus dan menginstal ulang konfigurasi ingress mereka melalui bagan Helm, Application Load Balancer (ALB) baru akan dibuat. Ini menciptakan masalah karena Amazon CloudFront terus mereferensikan catatan DNS ALB lama. Akibatnya, layanan yang ditujukan ke titik akhir ini tidak akan dapat dijangkau. (Untuk detail selengkapnya tentang alur kerja bermasalah ini, lihat Informasi tambahan.)

Untuk mengatasi masalah ini, pola ini menjelaskan penggunaan AWS Lambda fungsi kustom yang dikembangkan dengan Python. Fungsi Lambda ini secara otomatis mendeteksi ketika ALB baru dibuat melalui aturan Amazon. EventBridge Dengan menggunakan AWS SDK untuk Python (Boto3), fungsi tersebut kemudian memperbarui CloudFront konfigurasi dengan alamat DNS ALB baru, memastikan bahwa lalu lintas diarahkan ke titik akhir yang benar.

Solusi otomatis ini mempertahankan kontinuitas layanan tanpa perutean atau latensi tambahan. Proses ini membantu memastikan bahwa CloudFront selalu mereferensikan titik akhir DNS ALB yang benar, bahkan ketika infrastruktur yang mendasarinya berubah.

Prasyarat dan batasan

Prasyarat

Batasan

Versi produk

  • Terraform versi 1.0.0 atau yang lebih baru

  • AWS Penyedia Terraform versi 4.20 atau yang lebih baru

Arsitektur

Diagram berikut menunjukkan alur kerja dan komponen arsitektur untuk pola ini.

Alur kerja untuk memperbarui CloudFront dengan alamat DNS ALB baru terdeteksi melalui aturan. EventBridge

Solusi ini melakukan langkah-langkah berikut:

  1. Pengontrol ingress Amazon EKS membuat Application Load Balancer (ALB) baru setiap kali ada Helm restart atau deployment.

  2. EventBridge mencari acara pembuatan ALB.

  3. Acara pembuatan ALB memicu fungsi Lambda.

  4. Fungsi Lambda telah digunakan berdasarkan python 3.9 dan menggunakan API boto3 untuk memanggil. Layanan AWS Fungsi Lambda memperbarui CloudFront entri dengan nama DNS penyeimbang beban terbaru, yang diterima dari peristiwa create load balancer.

Alat

Layanan AWS

  • Amazon CloudFront mempercepat distribusi konten web Anda dengan mengirimkannya melalui jaringan pusat data di seluruh dunia, yang menurunkan latensi dan meningkatkan kinerja.

  • Amazon Elastic Kubernetes Service (Amazon EKS) membantu Anda menjalankan AWS Kubernetes tanpa perlu menginstal atau memelihara control plane atau node Kubernetes Anda sendiri.

  • Amazon EventBridge adalah layanan bus acara tanpa server yang membantu Anda menghubungkan aplikasi Anda dengan data waktu nyata dari berbagai sumber. Misalnya, AWS Lambda fungsi, titik akhir pemanggilan HTTP menggunakan tujuan API, atau bus acara di tempat lain. Akun AWS

  • AWS Lambdaadalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.

  • AWS SDK untuk Python (Boto3)adalah kit pengembangan perangkat lunak yang membantu Anda mengintegrasikan aplikasi, perpustakaan, atau skrip Python Anda. Layanan AWS

Alat lainnya

  • Python adalah bahasa pemrograman komputer tujuan umum.

  • Terraform adalah alat infrastruktur sebagai kode (IAc) HashiCorp yang membantu Anda membuat dan mengelola sumber daya cloud dan lokal.

Repositori kode

Kode untuk pola ini tersedia di repositori GitHub aws-cloudfront-automation-terraform-samples.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Siapkan dan konfigurasikan Git CLI.

Untuk menginstal dan mengkonfigurasi antarmuka baris perintah Git (CLI) di workstation lokal Anda, ikuti instruksi Memulai — Menginstal Git dalam dokumentasi Git.

DevOps insinyur

Buat folder proyek dan tambahkan file.

  1. Pergi ke GitHub repositori pola, dan pilih tombol Kode.

  2. Pada dialog Clone, pilih tab HTTPS. Di Clone menggunakan URL web, salin URL yang ditampilkan.

  3. Buat folder di mesin lokal Anda. Beri nama dengan nama proyek Anda.

  4. Buka terminal di mesin lokal Anda, dan arahkan ke folder ini.

  5. Untuk mengkloning repositori git pola ini, jalankan perintah berikut: git clone https://github.com/aws-samples/aws-cloudfront-automation-terraform-samples

  6. Setelah repositori telah dikloning, gunakan perintah berikut untuk pergi ke direktori kloning: cd <directory name>/cloudfront-update

    Buka proyek ini di Integrated Development Environment (IDE) pilihan Anda.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Menyebarkan solusinya.

Untuk menyebarkan sumber daya di target Akun AWS, gunakan langkah-langkah berikut:

  1. Pergi ke folder cloudfront-update.

  2. Perbarui terraform.tfvars file dengan filecloudfront_distribution_id.

  3. Untuk mengatur AWS profil Anda, jalankan perintah berikut: Wilayah AWS

    export AWS_REGION={{ REGION }}
  4. Untuk menginisialisasi Terraform, jalankan perintah berikut:

    terraform init
  5. Untuk memvalidasi Terraform, jalankan perintah berikut:

    terraform validate
  6. Untuk membuat rencana eksekusi Terraform, jalankan perintah berikut:

    terraform plan
  7. Untuk menerapkan tindakan dariterraform plan, jalankan perintah berikut:

    terraform apply
DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Validasi penerapan.

  1. Masuk ke AWS Management Console dan buka CloudFront konsol Amazon di https://console.aws.amazon.com/cloudfront/v4/home.

  2. Di panel navigasi kiri, pilih Distribusi dan kemudian buka distribusi. CloudFront

  3. Pada tab Origins, verifikasi bahwa nama asal dan pemetaan asal memiliki catatan DNS ALB yang diperbarui.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Bersihkan infrastruktur.

Untuk membersihkan infrastruktur yang Anda buat sebelumnya, gunakan langkah-langkah berikut:

  1. Jalankan perintah berikut: terraform destroy

  2. Untuk mengkonfirmasi perintah hancurkan, masukkanyes.

DevOps insinyur

Pemecahan Masalah

IsuSolusi

Kesalahan memvalidasi kredensi penyedia

Saat Anda menjalankan Terraform apply atau destroy perintah dari mesin lokal Anda, Anda mungkin mengalami kesalahan yang mirip dengan berikut ini:

Error: configuring Terraform AWS Provider: error validating provider credentials: error calling sts:GetCallerIdentity: operation error STS: GetCallerIdentity, https response error StatusCode: 403, RequestID: 123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: The security token included in the request is invalid.

Kesalahan ini disebabkan oleh kedaluwarsa token keamanan untuk kredensil yang digunakan dalam konfigurasi mesin lokal Anda.

Untuk mengatasi kesalahan, lihat Mengatur dan melihat pengaturan konfigurasi dalam dokumentasi AWS Command Line Interface (AWS CLI).

Sumber daya terkait

AWS sumber daya

Dokumentasi Terraform

Informasi tambahan

Alur kerja bermasalah

Alur kerja yang menghasilkan entri out-of-date ALB DNS di. CloudFront

Diagram menunjukkan alur kerja berikut:

  1. Saat pengguna mengakses aplikasi, panggilan masuk ke CloudFront.

  2. CloudFront merutekan panggilan ke Application Load Balancer (ALB) masing-masing.

  3. ALB mencakup alamat IP target yang merupakan alamat IP pod aplikasi. Dari sana, ALB memberikan hasil yang diharapkan kepada pengguna.

Namun, alur kerja ini menunjukkan masalah. Penerapan aplikasi terjadi melalui bagan Helm. Setiap kali ada penerapan atau jika seseorang memulai ulang Helm, ingress masing-masing juga dibuat ulang. Akibatnya, pengontrol penyeimbang beban eksternal menciptakan kembali ALB. Juga, selama setiap pembuatan ulang, ALB dibuat ulang dengan nama DNS yang berbeda. Karena itu, CloudFront akan memiliki entri basi di pengaturan asal. Karena entri basi ini, aplikasi tidak akan dapat dijangkau oleh pengguna. Masalah ini mengakibatkan downtime bagi pengguna.

Solusi alternatif

Solusi lain yang mungkin adalah membuat DNS eksternal untuk ALB dan kemudian mengarahkannya ke titik akhir zona host pribadi Amazon Route 53 di. CloudFront Namun, pendekatan ini menambahkan lompatan lain dalam alur aplikasi, yang dapat menyebabkan latensi aplikasi. Solusi fungsi Lambda pola ini tidak mengganggu aliran arus.