Kami memiliki windows server di AWS dan tugasnya adalah mengonfigurasi cadangan. Anda dapat menggunakan snapshot, tetapi kemudian akan ada masalah dengan integritas data. Saya juga ingin menyimpan snapshot mingguan dan bulanan, tetapi siklus hidup dalam snapshot tidak menawarkan ini. Layanan AWS Backup yang baru juga belum tahu cara melakukan snapshot lengkap, atau saya belum menemukan caranya. Yah, saya ingin semua ini bekerja sebanyak mungkin tanpa partisipasi saya.
Untuk mencapai tugas yang kita butuhkan
- Windows Server 2008 R2 atau yang lebih baru menjalankan AWS
- SSM Agent versi 2.2.58.0 atau lebih baru
- AWS Tools untuk Windows PowerShell 3.3.48.0 atau lebih baru
- Manajer Sistem AWS
- Saya
- SNS
- Lambda
Pertama, kita perlu peran untuk server. Peran tersebut harus mengaktifkan AWS SSM dan pembuatan snapshot EBS.
Buka IAM → Kebijakan → Buat kebijakan.
Buka tab JSON dan masukkan
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*::snapshot/*" }, { "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:CreateSnapshot" ], "Resource": "*" } ] }
Kami menekan Ulasan kebijakan di Nama kami menulis sesuatu seperti VssSnapshotPolicy. Simpan
Sekarang buat peran.
IAM → Peran → Buat Peran
Pilih Layanan AWS → EC2 dan pergi ke Izin.
Di sini kami menambahkan AmazonSSMManagedInstanceCore untuk SMM dan kebijakan kami yang kami buat sebelumnya VssSnapshotPolicy. Jika diinginkan, tetapkan tag untuk peran kami dan beri nama, ucapkan VssSnapshotRole.
Lalu kami pergi dan menetapkan peran ini ke server yang diinginkan.
Semuanya ssm sekarang dapat "mengelola" server ini.
Sekarang kita perlu meletakkan AWSVssComponents di server. Untuk melakukan ini, pilih Jalankan perintah dan klik Jalankan perintah, cari AWS-ConfigureAWSPackage.
Pada parameter Command, pilih Install, Name - AwsVssComponents, versi terbaru.
Di Target, kami memilih sistem yang akan kami buat cadangannya.
Klik LARI.
Setelah selesai, kita dapat membuat cadangan dari konsol SSM.
Pilih Jalankan perintah, cari AWSEC2-CreateVssSnapshot. Kami memasang server kami di Target. Pilih opsi sebagai Kecualikan Volume Booting, Salin Saja, dan Tidak Ada Penulis.
Klik LARI. Kami harus membuat snapshot.
Untuk pemberitahuan cadangan, buat Topik SNS. Dan berlanggananlah. Saya menggunakan notifikasi email.
Kami membuat kebijakan yang memungkinkan pengiriman pesan pada gilirannya
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:aws:sns:ap-northeast-1:Account ID:Topic Name" } ] }
Dan buat peran dengan kebijakan ini.
Untuk mengotomatiskan proses, kami akan menggunakan jendela pemeliharaan SSM.
Klik Buat jendela pemeliharaan. Isi Nama, isi Jadwal untuk apa pun yang Anda suka.
Kami masuk ke jendela pemeliharaan yang dibuat dan menambahkan tugas perintah Daftarkan RUN. Isi parameter. Dalam Tag saya menulis jenis cadangan (TAG Key = SnapshotType, Value =). Saya memiliki tiga kemungkinan parameter: Hari, Minggu, Bulan, dan sesuai tiga jendela pemeliharaan. Tetapkan Aktifkan pemberitahuan SNS dan tunjukkan peran kami untuk sns dan topik.
Semua foto sekarang akan dibuat sesuai jadwal.
Dan setelah beberapa saat kita akan memiliki terlalu banyak foto - foto-foto itu perlu dibersihkan. Untuk melakukan ini, kami akan menggunakan layanan AWS lain - Lambda.
Pertama, buat peran yang bisa membaca dan menghapus foto.
Untuk melakukan ini, kami membuat kebijakan di IAM
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "logs:DeleteSubscriptionFilter", "ec2:DeleteSnapshot", "ec2:DescribeSnapshots", "logs:DeleteLogStream", "logs:CreateExportTask", "logs:DeleteResourcePolicy", "logs:CreateLogStream", "logs:DeleteMetricFilter", "logs:TagLogGroup", "logs:CancelExportTask", "ec2:DescribeVolumes", "logs:DeleteRetentionPolicy", "logs:DeleteLogDelivery", "logs:AssociateKmsKey", "logs:PutDestination", "logs:DisassociateKmsKey", "logs:UntagLogGroup", "logs:DeleteLogGroup", "logs:PutDestinationPolicy", "ec2:DescribeSnapshotAttribute", "logs:DeleteDestination", "logs:PutLogEvents", "logs:CreateLogGroup", "logs:PutMetricFilter", "logs:CreateLogDelivery", "logs:PutResourcePolicy", "logs:UpdateLogDelivery", "logs:PutSubscriptionFilter", "logs:PutRetentionPolicy" ], "Resource": "*" } ] }
Dan kami menggantungkan kebijakan ini pada peran baru.
Pergi ke lambda dan buat fungsi python baru.
import datetime import sys import boto3 def get_volume_snapshots(client, volume_id, SnapshotType): args = { "Filters": [ { "Name": "volume-id", "Values": [volume_id] }, { "Name": "status", "Values": ["completed"] }, { "Name": "tag-key", "Values": ["SnapshotType"]}, { "Name": "tag-value", "Values": [SnapshotType]}, ], "OwnerIds": ["self"] } snapshots = [] while True: resp = client.describe_snapshots(**args) snapshots += resp.get("Snapshots", []) if "NextToken" in resp: args["NextToken"] = resp["NextToken"] else: break return snapshots def delete_snapshot(client, snapshot_id): wait_period = 5 retries = 5 while True: try: client.delete_snapshot(SnapshotId=snapshot_id) return True except Exception as ex:
Kami menggunakan peran yang dibuat di atas. Sebagai pemicu, kami menggunakan Acara CloudWatch.
fungsi ini melewati semua volume, mencari semua volume snapshot yang dilengkapi dengan tag SnapshotType dan menghapus semua snapshot yang lebih banyak retensi snapshot. Saya memiliki snapshot 5 harian, 3 mingguan, dan 2 bulanan terakhir.