Secara otomatis mengarsipkan item ke Amazon S3 menggunakan DynamoDB TTL - AWS Prescriptive Guidance

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

Secara otomatis mengarsipkan item ke Amazon S3 menggunakan DynamoDB TTL

Tabby Ward, Amazon Web Services

Ringkasan

Pola ini menyediakan langkah-langkah untuk menghapus data lama dari tabel Amazon DynamoDB dan mengarsipkannya ke bucket Amazon Simple Storage Service (Amazon S3) di Amazon Web Services (AWS) tanpa harus mengelola armada server. 

Pola ini menggunakan Amazon DynamoDB Time to Live (TTL) untuk secara otomatis menghapus item lama dan Amazon DynamoDB Streams untuk menangkap item kedaluwarsa TTL. Kemudian menghubungkan DynamoDB Streams ke AWS Lambda, yang menjalankan kode tanpa menyediakan atau mengelola server apa pun. 

Saat item baru ditambahkan ke aliran DynamoDB, fungsi Lambda dimulai dan menulis data ke aliran pengiriman Amazon Data Firehose. Firehose menyediakan solusi sederhana dan terkelola sepenuhnya untuk memuat data sebagai arsip ke Amazon S3.

DynamoDB sering digunakan untuk menyimpan data time series, seperti data klik-aliran halaman web atau data Internet of Things (IoT) dari sensor dan perangkat yang terhubung. Daripada menghapus item yang jarang diakses, banyak pelanggan ingin mengarsipkannya untuk tujuan audit. TTL menyederhanakan pengarsipan ini dengan secara otomatis menghapus item berdasarkan atribut timestamp. 

Item yang dihapus oleh TTL dapat diidentifikasi di DynamoDB Streams, yang menangkap urutan modifikasi tingkat item yang diurutkan waktu dan menyimpan urutan dalam log hingga 24 jam. Data ini dapat dikonsumsi oleh fungsi Lambda dan diarsipkan dalam bucket Amazon S3 untuk mengurangi biaya penyimpanan. Untuk mengurangi biaya lebih lanjut, aturan siklus hidup Amazon S3 dapat dibuat untuk mentransisikan data secara otomatis (segera setelah dibuat) ke kelas penyimpanan dengan biaya terendah, seperti Pengambilan Instan S3 Glacier atau Pengambilan Fleksibel Gletser S3, atau Amazon S3 Glacier Deep Archive untuk penyimpanan jangka panjang.

Prasyarat dan batasan

Prasyarat

Arsitektur

Tumpukan teknologi

  • Amazon DynamoDB

  • Amazon DynamoDB Streams

  • Amazon Data Firehose

  • AWS Lambda

  • Amazon S3

Proses empat langkah dari DynamoDB ke bucket S3.
  1. Item dihapus oleh TTL.

  2. Pemicu aliran DynamoDB memanggil fungsi prosesor aliran Lambda.

  3. Fungsi Lambda menempatkan catatan dalam aliran pengiriman Firehose dalam format batch.

  4. Catatan data diarsipkan dalam bucket S3.

Alat

  • AWS CLI — AWS Command Line Interface (AWS CLI) Command Line Interface (AWS CLI) adalah alat terpadu untuk mengelola layanan AWS Anda.

  • Amazon DynamoDB - Amazon DynamoDB adalah database nilai kunci dan dokumen yang memberikan kinerja milidetik satu digit pada skala apa pun.

  • Amazon DynamoDB Time to Live (TTL) - Amazon DynamoDB TTL membantu Anda menentukan stempel waktu per item untuk menentukan kapan item tidak lagi diperlukan.

  • Amazon DynamoDB Streams - Amazon DynamoDB Streams menangkap urutan modifikasi tingkat item yang diurutkan waktu di tabel DynamoDB apa pun dan menyimpan informasi ini dalam log hingga 24 jam.

  • Amazon Data Firehose — Amazon Data Firehose adalah cara termudah untuk memuat data streaming secara andal ke dalam data lake, penyimpanan data, dan layanan analitik.

  • AWS Lambda — AWS Lambda menjalankan kode tanpa perlu menyediakan atau mengelola server. Anda hanya membayar untuk waktu komputasi yang Anda konsumsi.

  • Amazon S3 — Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek yang menawarkan skalabilitas, ketersediaan data, keamanan, dan kinerja terdepan di industri.

Kode

Kode untuk pola ini tersedia di item GitHub Arsip ke S3 menggunakan repositori DynamoDB TTL.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat tabel DynamoDB.

Gunakan AWS CLI untuk membuat tabel di DynamoDB yang disebut. Reservation Pilih unit kapasitas baca acak (RCU) dan unit kapasitas tulis (WCU), dan berikan tabel Anda dua atribut: ReservationID dan. ReservationDate 

aws dynamodb create-table \ --table-name Reservation \ --attribute-definitions AttributeName=ReservationID,AttributeType=S AttributeName=ReservationDate,AttributeType=N \ --key-schema AttributeName=ReservationID,KeyType=HASH AttributeName=ReservationDate,KeyType=RANGE \ --provisioned-throughput ReadCapacityUnits=100,WriteCapacityUnits=100

ReservationDateadalah stempel waktu epoch yang akan digunakan untuk menyalakan TTL.

Arsitek cloud, Pengembang aplikasi

Nyalakan DynamoDB TTL.

Gunakan AWS CLI untuk mengaktifkan DynamoDB TTL untuk atribut. ReservationDate

aws dynamodb update-time-to-live \ --table-name Reservation\ --time-to-live-specification Enabled=true,AttributeName=ReservationDate
Arsitek cloud, Pengembang aplikasi

Nyalakan aliran DynamoDB.

Gunakan AWS CLI untuk mengaktifkan aliran DynamoDB untuk Reservation tabel dengan menggunakan jenis aliran. NEW_AND_OLD_IMAGES 

aws dynamodb update-table \ --table-name Reservation \ --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES

Aliran ini akan berisi catatan untuk item baru, item yang diperbarui, item yang dihapus, dan item yang dihapus oleh TTL. Catatan untuk item yang dihapus oleh TTL berisi atribut metadata tambahan untuk membedakannya dari item yang dihapus secara manual. userIdentityBidang untuk penghapusan TTL menunjukkan bahwa layanan DynamoDB melakukan tindakan penghapusan. 

Dalam pola ini, hanya item yang dihapus oleh TTL yang diarsipkan, tetapi Anda hanya dapat mengarsipkan catatan di mana eventName ada REMOVE dan userIdentity berisi principalId sama dengan. dynamodb.amazonaws.com

Arsitek cloud, Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Buat ember S3.

Gunakan AWS CLI untuk membuat bucket S3 tujuan di Wilayah AWS Anda, ganti us-east-1 dengan Region dan amzn-s3- demo-destination-bucket dengan nama bucket Anda. 

aws s3api create-bucket \ --bucket amzn-s3-demo-destination-bucket \ --region us-east-1

Pastikan nama bucket S3 Anda unik secara global, karena namespace dibagikan oleh semua akun AWS.

Arsitek cloud, Pengembang aplikasi

Buat kebijakan siklus hidup 30 hari untuk bucket S3.

  1. Masuk ke AWS Management Console dan buka konsol Amazon S3. 

  2. Pilih bucket S3 yang berisi data dari Firehose. 

  3. Di bucket S3, pilih tab Manajemen, dan pilih Tambahkan aturan siklus hidup

  4. Masukkan nama aturan Anda di kotak dialog Aturan Siklus Hidup, dan konfigurasikan aturan siklus hidup 30 hari untuk bucket Anda.

Arsitek cloud, Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Buat dan konfigurasikan aliran pengiriman Firehose.

Unduh dan edit contoh CreateFireHoseToS3.py kode dari GitHub repositori. 

Kode ini ditulis dengan Python dan menunjukkan cara membuat aliran pengiriman Firehose dan peran AWS Identity and Access Management (IAM). Peran IAM akan memiliki kebijakan yang dapat digunakan oleh Firehose untuk menulis ke bucket S3 tujuan.

Untuk menjalankan skrip, gunakan argumen perintah dan baris perintah berikut.

Argumen 1=<Your_S3_bucket_ARN>, yang merupakan Amazon Resource Name (ARN) untuk bucket yang Anda buat sebelumnya

Argumen 2= Nama Firehose Anda (Pilot ini firehose_to_s3_stream menggunakan.)

Argumen 3= Nama peran IAM Anda (Pilot ini menggunakanfirehose_to_s3.)

python CreateFireHoseToS3.py <Your_S3_Bucket_ARN> firehose_to_s3_stream firehose_to_s3

Jika peran IAM yang ditentukan tidak ada, skrip akan membuat peran asumsi dengan kebijakan hubungan tepercaya, serta kebijakan yang memberikan izin Amazon S3 yang memadai. Untuk contoh kebijakan ini, lihat bagian Informasi tambahan.

Arsitek cloud, Pengembang aplikasi

Verifikasi aliran pengiriman Firehose.

Jelaskan aliran pengiriman Firehose dengan menggunakan AWS CLI untuk memverifikasi bahwa aliran pengiriman berhasil dibuat.

aws firehose describe-delivery-stream --delivery-stream-name firehose_to_s3_stream
Arsitek cloud, Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Buat kebijakan kepercayaan untuk fungsi Lambda.

Buat file kebijakan kepercayaan dengan informasi berikut.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Ini memberi izin fungsi Anda untuk mengakses sumber daya AWS.

Arsitek cloud, Pengembang aplikasi

Buat peran eksekusi untuk fungsi Lambda.

Untuk membuat peran eksekusi, jalankan kode berikut.

aws iam create-role --role-name lambda-ex --assume-role-policy-document file://TrustPolicy.json
Arsitek cloud, Pengembang aplikasi

Tambahkan izin ke peran.

Untuk menambahkan izin ke peran, gunakan attach-policy-to-role perintah.

aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaDynamoDBExecutionRole aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/AmazonKinesisFirehoseFullAccess aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/IAMFullAccess
Arsitek cloud, Pengembang aplikasi

Buat fungsi Lambda.

Kompres LambdaStreamProcessor.py file dari repositori kode dengan menjalankan perintah berikut.

zip function.zip LambdaStreamProcessor.py

Saat Anda membuat fungsi Lambda, Anda akan memerlukan peran eksekusi Lambda ARN. Untuk mendapatkan ARN, jalankan kode berikut.

aws iam get-role \ --role-name lambda-ex

Untuk membuat fungsi Lambda, jalankan kode berikut.

# Review the environment variables and replace them with your values. aws lambda create-function --function-name LambdaStreamProcessor \ --zip-file fileb://function.zip --handler LambdaStreamProcessor.handler --runtime python3.8 \ --role {Your Lamda Execution Role ARN}\ --environment Variables="{firehose_name=firehose_to_s3_stream,bucket_arn = <Your_S3_bucket_ARN>,iam_role_name = firehose_to_s3, batch_size=400}"
Arsitek cloud, Pengembang aplikasi

Konfigurasikan pemicu fungsi Lambda.

Gunakan AWS CLI untuk mengonfigurasi pemicu (DynamoDB Streams), yang memanggil fungsi Lambda. Ukuran batch 400 adalah untuk menghindari masalah konkurensi Lambda.

aws lambda create-event-source-mapping --function-name LambdaStreamProcessor \ --batch-size 400 --starting-position LATEST \ --event-source-arn <Your Latest Stream ARN From DynamoDB Console>
Arsitek cloud, Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Tambahkan item dengan cap waktu kedaluwarsa ke tabel Reservasi.

Untuk menguji fungsionalitas, tambahkan item dengan stempel waktu epoch kedaluwarsa ke tabel. Reservation TTL akan secara otomatis menghapus item berdasarkan stempel waktu. 

Fungsi Lambda dimulai pada aktivitas DynamoDB Stream, dan memfilter acara untuk mengidentifikasi aktivitas atau item yang dihapus. REMOVE Kemudian menempatkan catatan dalam aliran pengiriman Firehose dalam format batch.

Aliran pengiriman Firehose mentransfer item ke bucket S3 tujuan dengan awalan. firehosetos3example/year=current year/month=current month/ day=current day/hour=current hour/

penting

Untuk mengoptimalkan pengambilan data, konfigurasikan Amazon S3 dengan ErrorOutputPrefix dan Prefix yang dirinci di bagian Informasi tambahan.

Arsitek awan
TugasDeskripsiKeterampilan yang dibutuhkan

Hapus semua sumber daya.

Hapus semua sumber daya untuk memastikan bahwa Anda tidak dikenakan biaya untuk layanan apa pun yang tidak Anda gunakan.  

Arsitek cloud, Pengembang aplikasi

Sumber daya terkait

Informasi tambahan

Membuat dan mengonfigurasi aliran pengiriman Firehose — Contoh kebijakan

Dokumen contoh kebijakan hubungan tepercaya Firehose

firehose_assume_role = { 'Version': '2012-10-17', 'Statement': [ { 'Sid': '', 'Effect': 'Allow', 'Principal': { 'Service': 'firehose.amazonaws.com' }, 'Action': 'sts:AssumeRole' } ] }

Contoh kebijakan izin S3

s3_access = { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject" ], "Resource": [ "{your s3_bucket ARN}/*", "{Your s3 bucket ARN}" ] } ] }

Uji fungsionalitas - konfigurasi Amazon S3

Konfigurasi Amazon S3 dengan yang berikut ini Prefix dan ErrorOutputPrefix dipilih untuk mengoptimalkan pengambilan data. 

prefix

firehosetos3example/year=! {timestamp: yyyy}/month=! {timestamp:MM}/day=! {timestamp:dd}/hour=!{timestamp:HH}/

Firehose pertama kali membuat folder dasar yang disebut firehosetos3example langsung di bawah bucket S3. Kemudian mengevaluasi ekspresi!{timestamp:yyyy},,!{timestamp:MM}, dan !{timestamp:HH} ke tahun!{timestamp:dd}, bulan, hari, dan jam menggunakan DateTimeFormatterformat Java.

Misalnya, perkiraan timestamp kedatangan 1604683577 dalam waktu zaman Unix mengevaluasi,,, dan. year=2020 month=11 day=06 hour=05 Oleh karena itu, lokasi di Amazon S3, tempat catatan data dikirimkan, dievaluasi. firehosetos3example/year=2020/month=11/day=06/hour=05/

ErrorOutputPrefix

firehosetos3erroroutputbase/!{firehose:random-string}/!{firehose:error-output-type}/!{timestamp:yyyy/MM/dd}/

ErrorOutputPrefixHasilnya dalam folder dasar yang dipanggil firehosetos3erroroutputbase langsung di bawah bucket S3. Ekspresi !{firehose:random-string} mengevaluasi ke string acak 11 karakter seperti. ztWxkdg3Thg Lokasi untuk objek Amazon S3 tempat catatan gagal dikirimkan dapat dievaluasi. firehosetos3erroroutputbase/ztWxkdg3Thg/processing-failed/2020/11/06/