Bagaimana Cara Menghapus Gambar AWS ECR Tanpa Tanda dan Gambar Lama?
Diterbitkan: 2022-09-07Amazon ECR terintegrasi dengan Amazon Elastic Kubernetes Service (Amazon EKS), Amazon Elastic Container Service (Amazon ECS), dan AWS Lambda, menyederhanakan pengembangan Anda ke alur kerja produksi.
Amazon ECR menghosting gambar dalam arsitektur yang sangat skalabel dan tersedia, memungkinkan Anda menerapkan container secara andal untuk aplikasi Anda. Sangat penting untuk menghapus gambar yang tidak ditandai dan gambar lama untuk menjaga kebersihan.
Saat ini, aplikasi berjalan sebagai layanan mikro. Istilah layanan mikro tidak lain adalah wadah yang mengemas semua kode dan dependensinya sehingga aplikasi dapat berjalan dengan cepat dan andal di lingkungan komputasi apa pun. Karena portabilitasnya, ukurannya yang kecil, dan kenyamanannya, kontainer menjadi metode pilihan untuk pengiriman aplikasi modern.
Container didesain dari template read-only yang disebut image. Gambar-gambar ini perlu disimpan di suatu tempat sehingga dapat diambil oleh mesin mana pun yang berwenang untuk menggunakannya.
Di situlah registri kontainer masuk. Belum lama ini, orang-orang menggunakan DockerHub untuk menyimpan gambar dan artefak ini. Namun, jika Anda menggunakan layanan cloud AWS, saya yakin Anda sudah menggunakan AWS ECR, yang merupakan alternatif dari DockerHub.
AWS ECR adalah registri kontainer terkelola sepenuhnya yang menyediakan hosting berkinerja tinggi, memungkinkan Anda untuk menerapkan gambar dan artefak aplikasi dalam bentuk repositori publik dan pribadi.
Setiap hari, beberapa aplikasi yang dihosting AWS mendorong dan menarik jutaan gambar/artefak aplikasi ke/keluar dari repositori ECR tertentu.
Dalam artikel ini, kita akan membahas cara menghapus AWS ECR lama dan usang serta menjaga repositori ECR tetap bersih.
Kebutuhan: Hapus Gambar Tanpa Tanda dan Gambar Lama Sekarang!
Alasan utama untuk membersihkan repositori ECR adalah kebersihan pengembangan. Setiap saat, tidak ada yang ingin menyimpan gambar yang lebih tua dari sepuluh penerapan di ECR mereka. Itu juga karena rollback sering terjadi di industri, tetapi rollback yang mengembalikan perubahan dari 5 artefak sebelumnya jarang terjadi.
Dalam istilah yang lebih sederhana, gambar/artefak apa pun yang berusia lebih dari lima penerapan tidak berguna. Ini dapat berubah pada laporan strategi organisasi Anda, tetapi kami tidak akan merekomendasikannya sebagai praktik terbaik.
Di seluruh industri, penandaan digunakan untuk menentukan gambar terbaru atau lima gambar terakhir yang paling stabil. Sebagai bagian dari siklus hidup pengembangan perangkat lunak, gambar dihasilkan dengan cepat, dan tag ini diganti dengan gambar baru, meninggalkan gambar lama tanpa tanda dan tidak berguna.
Dalam situasi seperti ini, di mana gambar/artefak berukuran besar, itu juga akan menambah biaya penyimpanan pada ECR. Harga AWS ECR adalah “$0,10 per GB / bulan untuk data yang disimpan di repositori pribadi atau publik”.
Harga ini mungkin terlihat kecil bagi Anda, tetapi seperti yang mereka katakan, tetesan air membentuk lautan. Semua gambar ini, jika disimpan untuk waktu yang lebih lama, akan menambah tagihan yang lebih tinggi ke faktur AWS Anda.
Sarannya adalah untuk menghapus gambar lama dan tanpa tanda ini dari repositori ECR Anda karena Anda tidak membutuhkannya! Sederhana! Mengapa menyimpannya dan membayarnya?
Menghapus Gambar AWS ECR Secara Manual
Metode 1: Cara GUI!
Langkah 1: Masuk ke akun Amazon Web Services dan buka repositori yang ingin Anda hapus.

Langkah 2: Di sini, Anda dapat melihat bahwa repositori memiliki tag terbaru untuk menentukan versi yang paling stabil. Tag lain yang Anda lihat dapat disebut tidak ditandai. Untuk menghapus, kita hanya perlu memilih gambar dan klik hapus.

Langkah 3 : Konfirmasi untuk Menghapus

Metode 2: Cara CLI!
Untuk menghapus gambar menggunakan CLI, Anda memerlukan semua kunci akses AWS IAM yang dikonfigurasi pada mesin Anda dan izin IAM yang diperlukan untuk memberi Anda akses ke repositori.
Dalam hal ini, kami telah mengonfigurasinya. Anda dapat melakukannya dari panduan dasar-dasar konfigurasi AWS jika Anda belum melakukannya.
Jika tidak yakin bahwa Anda telah mengonfigurasi AWS CLI di mesin Anda, gunakan perintah berikut untuk memverifikasi.
aws sts get-caller-identity
Sekarang setelah kami mengonfirmasi bahwa kami dapat menggunakan AWS CLI, Anda dapat menggunakan perintah berikut untuk menghapus gambar ECR yang tidak ditandai.
aws ecr batch-delete-image --repository-name test-ecr-policy --image-ids imageTag=custom-image-6

Di sini kita melakukan sesuatu yang mirip dengan apa yang kita lakukan di GUI. Kami akan menghapus gambar yang ditandai sebagai custom-image-6 yang berada di repositori test-ecr-policy.
Metode 3: Cara Pembuatan Skrip!
Prasyarat untuk metode ini adalah memiliki kunci AWS Access yang dikonfigurasi di mesin yang Anda jalankan.
Skrip untuk menghapus gambar yang tidak ditandai.
import boto3 client = boto3.client('ecr') response = client.list_images(repositoryName='test-ecr-policy') untaggedImageList = [image for image in response['imageIds'] if image['imageTag'] == 'custom-build-4'] response2 = client.batch_delete_image(repositoryName='aws-test-ecrpolicy', imageIds=untaggedImageList) print(response2)
Responsnya akan memberi Anda daftar ID gambar yang dihapus, bersama dengan kegagalan jika ada.
Metode Penjadwalan untuk Menghapus Gambar ECR
Jika Anda seorang insinyur DevOps atau secara teratur mengelola AWS ECR, Anda pasti sudah tahu betapa sulitnya menghapus gambar-gambar ini secara manual.
Menjalankan skrip/perintah memang membuat segalanya lebih mudah, tetapi kami yakin Anda menginginkan sesuatu yang secara otomatis menghapus gambar-gambar ini sendiri tanpa Anda harus mengkhawatirkannya.
Kabar Baik, AWS ECR menawarkan Kebijakan Siklus Hidup untuk gambar Anda, yang dapat Anda atur untuk menghapus gambar ini secara tepat waktu atau terjadwal. Mari kita lihat bagaimana melakukannya.
Metode 1: Cara GUI!
Langkah 1: Buka repositori tempat Anda ingin mengatur kebijakan Siklus Hidup. Di panel kiri, Anda dapat melihat Kebijakan Siklus Hidup. Anda dapat mengkliknya untuk memulai.

Langkah 2: Anda dapat mengkliknya dan membuat aturan pertama Anda.


Langkah 3: ECR memungkinkan Anda untuk menghapus gambar dengan dua syarat, satu adalah jika gambar Anda berumur hari tertentu atau jika mereka ditandai/tidak ditandai, dan Anda ingin mempertahankannya hanya untuk, katakanlah, X jumlah hari.
Mari kita lihat bagaimana hal itu dilakukan. Sekarang Anda dapat mengatur apakah Anda ingin menghapus gambar yang tidak diberi tag jika gambar tersebut berumur satu hari atau lebih lama atau jika jumlah gambar dari gambar yang tidak diberi tag melebihi satu.
Pilih sesuai dengan kasus penggunaan Anda. Jangan lupa; Anda dapat meningkatkan angka-angka ini ke nomor pilihan Anda. Simpan untuk memicu Aturan Siklus Hidup.

Metode 2: Cara CLI!
Perintah AWS ECR CLI untuk menyetel kebijakan siklus hidup adalah put-lifecycle-policy.
Mari kita lihat bagaimana melakukannya. Untuk ini, Anda harus membuat file JSON yang mencantumkan ketentuan kebijakan. Anda dapat menamainya policy.json atau nama apa pun pilihan Anda.
Namun sebelum itu, mari kita lihat elemen kebijakan siklus hidup.
rulePriority (Type: integer, Required: yes):
Urutan aturan yang lebih rendah ke yang lebih tinggi. Aturan kebijakan siklus hidup dengan prioritas satu diterapkan terlebih dahulu, kemudian 2, dst. Aturan kebijakan siklus hidup masing-masing harus memiliki nilai aturan yang unik.
Aturan kebijakan tidak memerlukan nilai berurutan. Aturan yang diberi tag apa pun harus memiliki Prioritas aturan tertinggi dan ditinjau terakhir.
description (Type: string, Required: no):
Menjelaskan untuk apa aturan dalam kebijakan siklus hidup.
tagStatus (Type: string, Required: yes):
Ini memeriksa apakah aturan kebijakan siklus hidup yang ditambahkan menentukan tag gambar. Tagged, untagged, atau apapun OK. Jika tidak ada yang ditentukan, semua gambar dievaluasi. Tagged membutuhkan nilai tagPrefixList. Untagged membutuhkan menghilangkan tagPrefixList.
tagPrefixList (Type: list[string], Required: yes, only if tagStatus is set to tagged):
Jika "tagStatus" adalah "diberi tag", kebijakan siklus hidup Anda memerlukan daftar awalan tag gambar yang dipisahkan koma.
Menggunakan prod awalan tag, Anda dapat menentukan semua gambar yang ditandai prod, prod1, prod2, dll. Beberapa tag hanya memilih gambar dengan semua tag.
countType (Type: string, Required: yes):
Tentukan countNumber jika countType adalah imageCountMoreThan untuk membatasi jumlah gambar dalam repositori Anda.
Tentukan countUnit dan countNumber jika countType adalah SinceImagePushed untuk membatasi gambar repositori.
countUnit (Type: string, Required: yes, only if countType is set to sinceImagePushed):
Hanya tentukan unit hitungan saat countType adalah SinceImagePushed; jika tidak, terjadi kesalahan.
countNumber (Type: integer, Required: yes):
Hanya bilangan bulat positif (0 bukan nilai yang diterima). Jika countType adalah imageCountMoreThan, nilainya adalah jumlah maksimum foto yang harus disimpan. Menggunakan SinceImagePushed sebagai countType menentukan usia gambar maksimum.
type (Type: string, Required: yes):
Pilih jenis tindakan. Nilai yang dapat digunakan adalah "kedaluwarsa."
Ini "policy.json" saya.
{ "rules": [ { "rulePriority": 1, "description": "Expire images older than 10 days", "selection": { "tagStatus": "untagged", "countType": "sinceImagePushed", "countUnit": "days", "countNumber": 14 }, "action": { "type": "expire" } } ] }
Sesuai dengan kebutuhan organisasi Anda. "sinceImagePushed" dapat diganti dengan "imageCountMoreThan".
Perintah CLI untuk menyetel kebijakan ini adalah:
aws ecr put-lifecycle-policy --repository-name "test-ecr-polict" --lifecycle-policy-text "file://policy.json"
Metode 3: Cara Pembuatan Skrip!
Kami akan menggunakan perintah boto3 untuk mencapai ini. Kita dapat menggunakan "policy.json" yang sama untuk menyiapkannya. Di bawah ini adalah cuplikan kode yang digunakan.
import boto3 client = boto3.client('ecr') response = client.put_lifecycle_policy( registryId='PODES12342', repositoryName='test-ecr-policy', lifecyclePolicyText='plicy.json' ) print(response)
Bagaimana Menerapkan Kebijakan Tunggal Di Beberapa Repositori ECR?
Seringkali, ada pertanyaan tentang bagaimana menerapkan kebijakan yang sama di beberapa repositori.
Ini adalah tugas yang berulang dan membosankan untuk menetapkan kebijakan secara manual.
Berikut adalah cuplikan kode yang dapat digunakan dalam sistem produksi untuk menerapkan kebijakan di lebih dari 100 repositori.
from boto3 import Session,client from os import getenv AWS_ACCESS_KEY_ID = getenv("ACCESSKEY") AWS_SECRET_ACCESS_KEY = getenv("SECRETKEY") session = Session( aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY ) client = client('ecr') response = client.describe_repositories() repositories = response['repositories'] globalLifecyclePolicy = 'put your policy here'' for repo in repositories: repoName = repo['repositoryName'] client.put_lifecycle_policy( repositoryName = repoName,lifecyclePolicyText = globalLifecyclePolicy)
Kesimpulan
Kami dapat dengan mudah membuat kebijakan siklus hidup ECR dan menghancurkan gambar lama sesuai dengan parameter yang ditentukan. AWS menyediakan dokumentasi ekstensif serta contoh kebijakan siklus hidup.
Anda juga dapat bereksperimen dengan kebijakan alternatif untuk gambar yang diberi tag, seperti mencocokkan kriteria dengan tanggal gambar diunggah.
Anda juga dapat menjelajahi beberapa Terminologi Kunci AWS yang memajukan Pembelajaran AWS Anda.