Mengotomatiskan pencadangan untuk Amazon RDS untuk instans DB Amazon RDS for PostgreSQL dengan menggunakan AWS Batch - AWS Prescriptive Guidance

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

Mengotomatiskan pencadangan untuk Amazon RDS untuk instans DB Amazon RDS for PostgreSQL dengan menggunakan AWS Batch

Kirankumar Chandrashekar, Amazon Web Services

Ringkasan

Mencadangkan database PostgreSQL Anda adalah tugas penting dan biasanya dapat diselesaikan dengan utilitas pg_dump, yang menggunakan perintah COPY secara default untuk membuat skema dan dump data dari database PostgreSQL. Namun, proses ini dapat menjadi berulang jika Anda memerlukan backup reguler untuk beberapa database PostgreSQL. Jika database PostgreSQL Anda di-host di cloud, Anda juga dapat memanfaatkan fitur pencadangan otomatis yang disediakan oleh Amazon Relational Database Service (Amazon RDS) untuk PostgreSQL juga. Pola ini menjelaskan cara mengotomatiskan backup reguler untuk Amazon RDS untuk instans DB Amazon RDS for PostgreSQL menggunakan utilitas pg_dump.

Catatan: Instruksi mengasumsikan bahwa Anda menggunakan Amazon RDS. Namun, Anda juga dapat menggunakan pendekatan ini untuk database PostgreSQL yang di-host di luar Amazon RDS. Untuk mengambil cadangan, fungsi AWS Lambda harus dapat mengakses database Anda.

CloudWatch Acara Amazon Events berbasis waktu memulai fungsi Lambda yang mencari tag cadangan tertentu yang diterapkan ke metadata instans PostgreSQL DB di Amazon RDS. Jika instans PostgreSQL DB memiliki tag DBDump BKP:Automated = Active dan tag cadangan lain yang diperlukan, fungsi Lambda mengirimkan tugas individual untuk setiap backup database ke AWS Batch. 

AWS Batch memproses pekerjaan ini dan mengunggah data cadangan ke bucket Amazon Simple Storage Service (Amazon S3). Pola ini menggunakan Dockerfile dan file entrypoint.sh untuk membuat image container Docker yang digunakan untuk membuat backup dalam pekerjaan AWS Batch. Setelah proses pencadangan selesai, AWS Batch mencatat detail pencadangan ke tabel inventaris di Amazon DynamoDB. Sebagai perlindungan tambahan, CloudWatch peristiwa Acara memulai notifikasi Amazon Simple Notification Service (Amazon SNS) jika pekerjaan gagal di AWS Batch. 

Prasyarat dan batasan

Prasyarat

Arsitektur

Arsitektur untuk mencadangkan Amazon RDS untuk instans DB Amazon RDS for PostgreSQL dengan menggunakan utilitas pg_dump.

Tumpukan teknologi

  • CloudWatch Acara Amazon

  • Amazon DynamoDB

  • Amazon Elastic Container Registry (Amazon ECR)

  • Amazon RDS

  • Amazon SNS

  • Amazon S3

  • AWS Batch

  • AWS Key Management Service (AWS KMS)

  • AWS Lambda

  • AWS Secrets Manager

  • Docker

Alat

  • CloudWatch Acara Amazon — CloudWatch Acara menghadirkan aliran peristiwa sistem yang mendekati waktu nyata yang menjelaskan perubahan sumber daya AWS.

  • Amazon DynamoDB - DynamoDB adalah layanan database NoSQL yang dikelola sepenuhnya yang memberikan kinerja yang cepat dan dapat diprediksi dengan skalabilitas yang mulus.

  • Amazon ECR — Amazon Elastic Container Registry (Amazon ECR) adalah layanan registri image container AWS terkelola yang aman, terukur, dan andal.

  • Amazon RDS - Amazon Relational Database Service (Amazon RDS) adalah layanan web yang memudahkan pengaturan, pengoperasian, dan skala database relasional di AWS Cloud.

  • Amazon SNS - Amazon Simple Notification Service (Amazon SNS) adalah layanan terkelola yang menyediakan pengiriman pesan dari penerbit ke pelanggan.

  • Amazon S3 - Amazon Simple Storage Service (Amazon S3) Simple Storage Service adalah penyimpanan untuk internet.

  • AWS Batch — AWS Batch membantu Anda menjalankan beban kerja komputasi batch di AWS Cloud.

  • AWS KMS — AWS Key Management Service (AWS KMS) adalah layanan terkelola yang memudahkan Anda membuat dan mengontrol kunci enkripsi yang digunakan untuk mengenkripsi data Anda.

  • AWS Lambda — Lambda adalah layanan komputasi yang membantu Anda menjalankan kode tanpa menyediakan atau mengelola server.

  • AWS Secrets Manager — Secrets Manager membantu Anda mengganti kredensi hardcode dalam kode Anda, termasuk kata sandi, dengan panggilan API ke Secrets Manager untuk mengambil rahasia secara terprogram.

  • Docker — Docker membantu pengembang dengan mudah mengemas, mengirim, dan menjalankan aplikasi apa pun sebagai wadah yang ringan, portabel, dan mandiri.

Instans PostgreSQL DB Anda di Amazon RDS harus memiliki tag yang diterapkan ke metadatanya. Fungsi Lambda mencari tag untuk mengidentifikasi instance DB yang harus dicadangkan, dan tag berikut biasanya digunakan.

Tag

Deskripsi

BKP:Otomatis = Aktif DBDump

Mengidentifikasi instans Amazon RDS DB sebagai kandidat untuk backup.

bkp: = AutomatedBackupSecret <secret_name >

Mengidentifikasi rahasia Secrets Manager yang berisi kredensyal login Amazon RDS.

BKP: S3Bucket otomatis DBDump = <s3_bucket_name>

Mengidentifikasi bucket S3 untuk mengirim cadangan ke.

DBDumpBKP: Frekuensi Otomatis

DBDumpBKP: Waktu Otomatis

Identifikasi frekuensi dan waktu kapan database harus dicadangkan. 

bkp:pgdumpcommand = <pgdump_command>

Mengidentifikasi database yang backup perlu diambil.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat tabel di DynamoDB.

Masuk ke AWS Management Console, buka konsol Amazon DynamoDB, dan buat tabel. Untuk bantuan tentang ini dan cerita lainnya, lihat bagian Sumber daya terkait.

Administrator awan, Administrator basis data

Konfirmasikan bahwa tabel telah dibuat.

Jalankan perintah aws dynamodb describe-table --table-name <table-name> | grep TableStatus. Jika tabel ada, perintah akan mengembalikan "TableStatus": "ACTIVE", hasilnya.

Administrator awan, Administrator basis data
TugasDeskripsiKeterampilan yang dibutuhkan

Membuat sebuah topik SNS.

Buka konsol Amazon SNS, pilih Topik, dan buat topik SNS dengan namanya. JobFailedAlert Berlangganan alamat email aktif ke topik tersebut, dan periksa kotak masuk email Anda untuk mengonfirmasi email langganan SNS dari Pemberitahuan AWS.

Administrator awan

Buat aturan peristiwa pekerjaan yang gagal untuk AWS Batch.

Buka CloudWatch konsol Amazon, pilih Acara, lalu pilih Buat aturan. Pilih Tampilkan opsi lanjutan, dan pilih Edit. Untuk Membangun pola yang memilih peristiwa untuk diproses oleh target Anda, ganti teks yang ada dengan kode “Peristiwa pekerjaan gagal” dari bagian Informasi tambahan. Kode ini mendefinisikan aturan CloudWatch Peristiwa yang dimulai saat AWS Batch memiliki Failed peristiwa.

Administrator awan

Tambahkan target aturan acara.

Di Target, pilih Tambahkan target, dan pilih topik JobFailedAlert SNS. Konfigurasikan detail yang tersisa dan buat aturan Cloudwatch Events.

Administrator awan
TugasDeskripsiKeterampilan yang dibutuhkan

Buat repositori Amazon ECR.

Buka konsol Amazon ECR dan pilih Wilayah AWS tempat Anda ingin membuat repositori. Pilih Repositori, lalu pilih Buat repositori. Konfigurasikan repositori sesuai dengan kebutuhan Anda.

Administrator awan

Tulis Dockerfile.

Masuk ke Docker dan gunakan “Sample Dockerfile” dan “Contoh file entrypoint.sh” dari bagian Informasi tambahan untuk membuat Dockerfile.

DevOps insinyur

Buat image Docker dan dorong ke repositori Amazon ECR.

Bangun Dockerfile menjadi image Docker dan dorong ke repositori Amazon ECR. Untuk bantuan dengan cerita ini, lihat bagian Sumber daya terkait.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Buat definisi pekerjaan AWS Batch.

Buka konsol AWS Batch dan buat definisi pekerjaan yang menyertakan Uniform Resource Identifier (URI) repositori Amazon ECR sebagai properti. Image

Administrator awan

Konfigurasikan antrian pekerjaan AWS Batch.

Di konsol AWS Batch, pilih antrian Job, lalu pilih Buat antrean. Buat antrean pekerjaan yang akan menyimpan pekerjaan hingga AWS Batch menjalankannya pada sumber daya dalam lingkungan komputasi Anda. Penting: Pastikan Anda menulis logika AWS Batch untuk merekam detail pencadangan ke tabel inventaris DynamoDB.

Administrator awan
TugasDeskripsiKeterampilan yang dibutuhkan

Buat fungsi Lambda untuk mencari tag.

Buat fungsi Lambda yang mencari tag pada instans PostgreSQL DB Anda dan mengidentifikasi kandidat cadangan. Pastikan fungsi Lambda Anda dapat mengidentifikasi bkp:AutomatedDBDump = Active tag dan semua tag lain yang diperlukan. Penting: Fungsi Lambda juga harus dapat menambahkan pekerjaan ke antrean pekerjaan AWS Batch.

DevOps insinyur

Buat CloudWatch acara Acara berbasis waktu.

Buka CloudWatch konsol Amazon dan buat CloudWatch acara Acara yang menggunakan ekspresi cron untuk menjalankan fungsi Lambda Anda pada jadwal reguler. Penting: Semua acara terjadwal menggunakan zona waktu UTC.

Administrator awan
TugasDeskripsiKeterampilan yang dibutuhkan

Buat kunci Amazon KMS.

Buka konsol Amazon KMS dan buat kunci KMS yang dapat digunakan untuk mengenkripsi kredensyal Amazon RDS yang disimpan di AWS Secrets Manager.

Administrator awan

Buat rahasia AWS Secrets Manager.

Buka konsol AWS Secrets Manager dan simpan kredensyal database Amazon RDS for PostgreSQL Anda sebagai rahasia.

Administrator awan

Tambahkan tag yang diperlukan ke instance PostgreSQL DB.

penting

Buka konsol Amazon RDS dan tambahkan tag ke instans PostgreSQL DB yang ingin Anda cadangkan secara otomatis. Anda dapat menggunakan tag dari tabel di bagian Alat. Jika Anda memerlukan backup dari beberapa database PostgreSQL dalam instance Amazon RDS yang sama, maka gunakan sebagai nilai untuk tag. -d test:-d test1 bkp:pgdumpcommand testdan test1 merupakan nama database. Pastikan tidak ada spasi setelah usus besar (:).

Administrator awan

Verifikasi otomatisasi cadangan.

Untuk memverifikasi otomatisasi cadangan, Anda dapat menjalankan fungsi Lambda atau menunggu jadwal pencadangan dimulai. Setelah proses pencadangan selesai, periksa apakah tabel inventaris DynamoDB memiliki entri cadangan yang valid untuk instance PostgreSQL DB Anda. Jika cocok, maka proses otomatisasi cadangan berhasil.

Administrator awan

Sumber daya terkait

Buat tabel inventaris di DynamoDB

 

Membuat topik SNS untuk peristiwa pekerjaan yang gagal di AWS Batch

 

Buat image Docker dan dorong ke repositori Amazon ECR

 

Membuat komponen AWS Batch

 

Buat fungsi Lambda

 

Buat CloudWatch acara Acara

 

Uji otomatisasi cadangan

Informasi tambahan

Acara pekerjaan yang gagal:

{ "detail-type": [ "Batch Job State Change" ], "source": [ "aws.batch" ], "detail": { "status": [ "FAILED" ] } }

Contoh Dockerfile:

FROM alpine:latest RUN apk --update add py-pip postgresql-client jq bash && \ pip install awscli && \ rm -rf /var/cache/apk/* ADD entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"]

Contoh file entrypoint.sh:

#!/bin/bash set -e DATETIME=`date +"%Y-%m-%d_%H_%M"` FILENAME=RDS_PostGres_dump_${RDS_INSTANCE_NAME} FILE=${FILENAME}_${DATETIME} aws configure --profile new-profile set role_arn arn:aws:iam::${TargetAccountId}:role/${TargetAccountRoleName} aws configure --profile new-profile set credential_source EcsContainer echo "Central Account access provider IAM role is: " aws sts get-caller-identity echo "Target Customer Account access provider IAM role is: " aws sts get-caller-identity --profile new-profile securestring=$(aws secretsmanager get-secret-value --secret-id $SECRETID --output json --query 'SecretString' --region=$REGION --profile new-profile) if [[ ${securestring} ]]; then echo "successfully accessed secrets manager and got the credentials" export PGPASSWORD=$(echo $securestring | jq --raw-output | jq -r '.DB_PASSWORD') PGSQL_USER=$(echo $securestring | jq --raw-output | jq -r '.DB_USERNAME') echo "Executing pg_dump for the PostGres endpoint ${PGSQL_HOST}" # pg_dump -h $PGSQL_HOST -U $PGSQL_USER -n dms_sample | gzip -9 -c | aws s3 cp - --region=$REGION --profile new-profile s3://$BUCKET/$FILE # in="-n public:-n private" IFS=':' list=($EXECUTE_COMMAND); for command in "${list[@]}"; do echo $command; pg_dump -h $PGSQL_HOST -U $PGSQL_USER ${command} | gzip -9 -c | aws s3 cp - --region=$REGION --profile new-profile s3://${BUCKET}/${FILE}-${command}".sql.gz" echo $?; if [[ $? -ne 0 ]]; then echo "Error occurred in database backup process. Exiting now....." exit 1 else echo "Postgresql dump was successfully taken for the RDS endpoint ${PGSQL_HOST} and is uploaded to the following S3 location s3://${BUCKET}/${FILE}-${command}.sql.gz" #write the details into the inventory table in central account echo "Writing to DynamoDB inventory table" aws dynamodb put-item --table-name ${RDS_POSTGRES_DUMP_INVENTORY_TABLE} --region=$REGION --item '{ "accountId": { "S": "'"${TargetAccountId}"'" }, "dumpFileUrl": {"S": "'"s3://${BUCKET}/${FILE}-${command}.sql.gz"'" }, "DumpAvailableTime": {"S": "'"`date +"%Y-%m-%d::%H::%M::%S"` UTC"'"}}' echo $? if [[ $? -ne 0 ]]; then echo "Error occurred while putting item to DynamoDb Inventory Table. Exiting now....." exit 1 else echo "Successfully written to DynamoDb Inventory Table ${RDS_POSTGRES_DUMP_INVENTORY_TABLE}" fi fi done; else echo "Something went wrong {$?}" exit 1 fi exec "$@"