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
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
Akun AWS aktif.
Lingkungan komputasi terkelola atau tidak terkelola yang ada. Untuk informasi selengkapnya, lihat Lingkungan komputasi terkelola dan tidak terkelola dalam dokumentasi AWS Batch.
AWS Command Line Interface (CLI) versi 2 image Docker, diinstal dan dikonfigurasi.
Amazon RDS yang ada untuk instans DB Amazon RDS for PostgreSQL.
Bucket S3 yang ada.
Docker
, diinstal dan dikonfigurasi di Linux, macOS, atau Windows. Keakraban dengan pengkodean di Lambda.
Arsitektur

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
| Tugas | Deskripsi | Keterampilan 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 | Administrator awan, Administrator basis data |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Membuat sebuah topik SNS. | Buka konsol Amazon SNS, pilih Topik, dan buat topik SNS dengan namanya. | 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 | Administrator awan |
Tambahkan target aturan acara. | Di Target, pilih Tambahkan target, dan pilih topik | Administrator awan |
| Tugas | Deskripsi | Keterampilan 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 |
| Tugas | Deskripsi | Keterampilan 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. | 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 |
| Tugas | Deskripsi | Keterampilan 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 | 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 |
| Tugas | Deskripsi | Keterampilan 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. | pentingBuka 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. | 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 "$@"