Sajikan konten statis dalam bucket Amazon S3 melalui VPC dengan menggunakan Amazon CloudFront - AWS Prescriptive Guidance

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

Sajikan konten statis dalam bucket Amazon S3 melalui VPC dengan menggunakan Amazon CloudFront

Malaikat Emmanuel Hernandez Cebrian, Amazon Web Services

Ringkasan

Saat Anda menayangkan konten statis yang di-host di Amazon Web Services (AWS), pendekatan yang disarankan adalah menggunakan bucket Amazon Simple Storage Service (S3) Amazon Simple Storage Service (S3) sebagai asal dan menggunakan Amazon CloudFront untuk mendistribusikan konten. Solusi ini memiliki dua manfaat utama: kenyamanan caching konten statis di lokasi tepi, dan kemampuan untuk menentukan daftar kontrol akses web (web ACLs) untuk CloudFront distribusi, yang membantu Anda mengamankan permintaan ke konten dengan konfigurasi minimal dan overhead administratif.

Namun, ada batasan arsitektur umum untuk standar, pendekatan yang direkomendasikan. Di beberapa lingkungan, Anda ingin peralatan firewall virtual digunakan di cloud pribadi virtual (VPC) untuk memeriksa semua konten, termasuk konten statis. Pendekatan standar tidak merutekan lalu lintas melalui VPC untuk diperiksa. Pola ini memberikan solusi arsitektur alternatif. Anda masih menggunakan CloudFront distribusi untuk menyajikan konten statis dalam bucket S3, tetapi lalu lintas dirutekan melalui VPC dengan menggunakan Application Load Balancer. Fungsi AWS Lambda kemudian mengambil dan mengembalikan konten dari bucket S3.

Prasyarat dan batasan

Prasyarat

  • Akun AWS aktif.

  • Konten situs web statis yang dihosting di bucket S3.

Batasan

  • Sumber daya dalam pola ini harus dalam satu Wilayah AWS, tetapi dapat disediakan di akun AWS yang berbeda.

  • Batas berlaku untuk ukuran permintaan dan respons maksimum yang dapat diterima dan dikirim oleh fungsi Lambda. Untuk informasi selengkapnya, lihat Batas dalam fungsi Lambda sebagai target (dokumentasi Elastic Load Balancing).

  • Penting untuk menemukan keseimbangan yang baik antara kinerja, skalabilitas, keamanan, dan efektivitas biaya saat menggunakan pendekatan ini. Meskipun skalabilitas Lambda tinggi, jika jumlah pemanggilan Lambda bersamaan melebihi kuota maksimum, beberapa permintaan dibatasi. Untuk informasi selengkapnya, lihat Kuota Lambda (dokumentasi Lambda). Anda juga perlu mempertimbangkan harga saat menggunakan Lambda. Untuk meminimalkan pemanggilan Lambda, pastikan Anda menentukan cache untuk distribusi dengan benar. CloudFront Untuk informasi selengkapnya, lihat Mengoptimalkan caching dan ketersediaan (CloudFront dokumentasi).

Arsitektur

Tumpukan teknologi target

  • CloudFront

  • Amazon Virtual Private Cloud (Amazon VPC)

  • Penyeimbang Beban Aplikasi

  • Lambda

  • Amazon S3

Arsitektur target

Gambar berikut menunjukkan arsitektur yang disarankan saat Anda perlu menggunakan CloudFront untuk menyajikan konten statis dari bucket S3 melalui VPC.

Arus lalu lintas melalui Application Load Balancers di VPC ke fungsi Lambda.
  1. Klien meminta URL CloudFront distribusi untuk mendapatkan file situs web tertentu di bucket S3.

  2. CloudFront mengirimkan permintaan ke AWS WAF. AWS WAF memfilter permintaan dengan menggunakan web yang ACLs diterapkan pada distribusi. CloudFront Jika permintaan ditentukan valid, aliran berlanjut. Jika permintaan ditentukan tidak valid, klien menerima kesalahan 403.

  3. CloudFront memeriksa cache internalnya. Jika ada kunci yang valid yang cocok dengan permintaan yang masuk, nilai terkait dikirim kembali ke klien sebagai respons. Jika tidak, aliran terus berlanjut.

  4. CloudFront meneruskan permintaan ke URL Application Load Balancer yang ditentukan.

  5. Application Load Balancer memiliki pendengar yang terkait dengan grup target berdasarkan fungsi Lambda. Application Load Balancer memanggil fungsi Lambda.

  6. Fungsi Lambda terhubung ke bucket S3, melakukan GetObject operasi di atasnya, dan mengembalikan konten sebagai respons.

Otomatisasi dan skala

Untuk mengotomatiskan penyebaran konten statis menggunakan pendekatan ini, buat CI/CD pipeline untuk memperbarui bucket Amazon S3 yang meng-host situs web.

Fungsi Lambda menskalakan secara otomatis untuk menangani permintaan bersamaan, dalam kuota dan batasan layanan. Untuk informasi selengkapnya, lihat Penskalaan fungsi Lambda dan kuota Lambda (dokumentasi Lambda). Untuk layanan dan fitur AWS lainnya, seperti CloudFront dan Application Load Balancer, AWS menskalakan ini secara otomatis.

Alat

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

  • Elastic Load Balancing (ELB) mendistribusikan lalu lintas aplikasi atau jaringan yang masuk ke beberapa target. Dalam pola ini, Anda menggunakan Application Load Balancer yang disediakan melalui Elastic Load Balancing untuk mengarahkan lalu lintas ke fungsi Lambda.

  • AWS Lambda adalah 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.

  • Amazon Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.

  • Amazon Virtual Private Cloud (Amazon VPC) membantu Anda meluncurkan sumber daya AWS ke jaringan virtual yang telah Anda tentukan. Jaringan virtual ini menyerupai jaringan tradisional yang akan Anda operasikan di pusat data Anda sendiri, dengan manfaat menggunakan infrastruktur AWS yang dapat diskalakan.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat sebuah VPC.

Buat VPC untuk hosting sumber daya yang digunakan dalam pola ini, seperti Application Load Balancer dan fungsi Lambda.  Untuk petunjuk, lihat Membuat VPC (dokumentasi Amazon VPC).

Arsitek awan

Buat AWS WAF web ACL.

Buat AWS WAF web ACL. Kemudian dalam pola ini, Anda menerapkan ACL web ini ke CloudFront distribusi. Untuk petunjuk, lihat Membuat ACL web (dokumentasi AWS WAF).

Arsitek awan

Buat fungsi Lambda.

Buat fungsi Lambda yang menyajikan konten statis yang dihosting di bucket S3 sebagai situs web. Gunakan kode yang disediakan di bagian Informasi tambahan dari pola ini. Sesuaikan kode untuk mengidentifikasi bucket S3 target Anda.

AWS Umum

Unggah fungsi Lambda.

Masukkan perintah berikut untuk mengunggah kode fungsi Lambda ke arsip file.zip di Lambda.

aws lambda update-function-code \ --function-name \ --zip-file fileb://lambda-alb-s3-website.zip
AWS Umum

Buat Application Load Balancer.

Buat Application Load Balancer yang menghadap ke internet yang menunjuk ke fungsi Lambda. Untuk petunjuk, lihat Membuat grup target untuk fungsi Lambda (dokumentasi Elastic Load Balancing). Untuk konfigurasi ketersediaan tinggi, buat Application Load Balancer dan pasang ke subnet pribadi di Availability Zone yang berbeda.

Arsitek awan

Buat CloudFront distribusi.

Buat CloudFront distribusi yang menunjuk ke Application Load Balancer yang Anda buat.

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

  2. Pilih Buat Distribusi.

  3. Di halaman pertama Buat Wizard Distribusi, di Web bagian, pilih Memulai.

  4. Tentukan pengaturan untuk distribusi Anda. Untuk informasi selengkapnya, lihat Nilai yang Anda tentukan saat membuat atau memperbarui distribusi. Perhatikan hal berikut:

    1. Atur Application Load Balancer sebagai asal.

    2. Dalam pengaturan Distribusi, pilih web ACLs yang ada yang ingin Anda terapkan melalui AWS WAF. Untuk informasi selengkapnya, lihat AWS WAF web ACL.

  5. Simpan perubahan Anda.

  6. Setelah CloudFront membuat distribusi Anda, nilai kolom Status untuk distribusi Anda berubah dari InProgressDeployed. Jika Anda memilih untuk mengaktifkan distribusi, maka akan siap untuk memproses permintaan setelah status beralih ke Diterapkan.

Arsitek awan

Sumber daya terkait

Dokumentasi AWS

Situs web layanan AWS

Informasi tambahan

Kode

Berikut contoh fungsi Lambda ditulis dalam Node.js. Fungsi Lambda ini bertindak sebagai server web yang melakukan GetObject operasi ke bucket S3 yang berisi sumber daya situs web.

/** * This is an AWS Lambda function created for demonstration purposes. * It retrieves static assets from a defined Amazon S3 bucket. * To make the content available through a URL, use an Application Load Balancer with a Lambda integration. * * Set the S3_BUCKET environment variable in the Lambda function definition. */ var AWS = require('aws-sdk'); exports.handler = function(event, context, callback) { var bucket = process.env.S3_BUCKET; var key = event.path.replace('/', ''); if (key == '') { key = 'index.html'; } // Fetch from S3 var s3 = new AWS.S3(); return s3.getObject({Bucket: bucket, Key: key}, function(err, data) { if (err) { return err; } var isBase64Encoded = false; var encoding = 'utf8'; if (data.ContentType.indexOf('image/') > -1) { isBase64Encoded = true; encoding = 'base64' } var resp = { statusCode: 200, headers: { 'Content-Type': data.ContentType, }, body: new Buffer(data.Body).toString(encoding), isBase64Encoded: isBase64Encoded }; callback(null, resp); } ); };