Integrarea și importanța Amazon ECR
Amazon Elastic Container Registry (ECR) se integrează perfect cu Amazon Elastic Kubernetes Service (EKS), Amazon Elastic Container Service (ECS) și AWS Lambda, optimizând fluxul de lucru de la dezvoltare la implementare. Această integrare fluidă accelerează procesele de lansare a aplicațiilor în medii de producție.
ECR oferă o arhitectură scalabilă și extrem de disponibilă pentru stocarea imaginilor, asigurând implementarea containerelor în mod fiabil. Gestionarea eficientă a depozitelor ECR necesită ștergerea regulată a imaginilor neetichetate și vechi, contribuind la menținerea unei igiene corespunzătoare și la reducerea costurilor de stocare.
În prezent, arhitectura de tip microservicii este predominantă. Un microserviciu este, în esență, un container care include tot codul și dependențele necesare pentru ca o aplicație să ruleze rapid și fiabil în orice mediu de calcul. Datorită portabilității, dimensiunilor reduse și flexibilității, containerele sunt din ce în ce mai utilizate pentru implementarea aplicațiilor moderne.
Containerele sunt create pe baza unor șabloane read-only numite imagini. Aceste imagini necesită un loc de stocare accesibil pentru ca mașinile autorizate să le poată prelua. Aici intervine conceptul de registru de containere.
În trecut, DockerHub era un instrument popular pentru stocarea imaginilor și artefactelor. Însă, utilizatorii serviciilor cloud AWS preferă de obicei AWS ECR, o alternativă solidă la DockerHub.
AWS ECR este un registru de containere complet gestionat, care oferă o performanță ridicată, permițând stocarea și implementarea imaginilor și artefactelor aplicațiilor, atât în depozite publice, cât și private.
Zilnic, numeroase aplicații găzduite pe AWS transferă milioane de imagini și artefacte în și din depozitele ECR specifice.
Acest articol va explora metodele prin care putem curăța depozitele ECR, eliminând imaginile vechi și nefolosite.
Necesitatea ștergerii imaginilor neetichetate și vechi
Obiectivul principal al curățării depozitelor ECR este menținerea unei igiene corespunzătoare în procesul de dezvoltare. În general, nu este necesar să păstrăm imagini mai vechi de zece implementări. Deși sunt posibile derulări, rareori este necesară o revenire la o versiune anterioară cu mai mult de cinci artefacte.
Astfel, imaginile sau artefactele mai vechi de cinci implementări devin inutile. Această regulă poate fi ajustată conform politicilor organizației, dar este recomandat să se mențină această practică pentru o gestionare eficientă.
Etichetarea este o practică standard în industrie, utilizată pentru a identifica cele mai recente imagini stabile. Însă, pe parcursul ciclului de dezvoltare software, imaginile sunt create rapid, iar etichetele sunt actualizate, lăsând imaginile vechi neetichetate și neutilizate.
În cazul imaginilor mari, păstrarea lor în depozitele ECR duce la creșterea costurilor de stocare. Prețul AWS ECR este de 0,10 USD per GB/lună pentru datele stocate în depozite private sau publice.
Acest cost poate părea redus inițial, însă acumularea imaginilor neutilizate generează costuri suplimentare. Prin urmare, este esențial să ștergem imaginile vechi și neetichetate, deoarece nu mai sunt necesare.
Ștergerea manuală a imaginilor AWS ECR
Metoda 1: Interfața grafică
Pasul 1: Accesați contul dvs. Amazon Web Services și navigați la depozitul pe care doriți să-l curățați.
Pasul 2: În depozit, veți observa eticheta care indică cea mai recentă versiune. Celelalte etichete pot fi considerate neetichetate. Pentru a șterge o imagine, selectați-o și faceți clic pe opțiunea de ștergere.
Pasul 3: Confirmați ștergerea imaginii.
Metoda 2: Interfața linie de comandă (CLI)
Pentru ștergerea imaginilor folosind CLI, este necesară configurarea cheilor de acces AWS IAM și acordarea permisiunilor necesare pentru accesarea depozitelor. În acest caz, configurarea a fost deja realizată. Pentru a configura AWS CLI, consultați ghidul de configurare AWS.
Pentru a verifica dacă AWS CLI este configurat corect, utilizați următoarea comandă:
aws sts get-caller-identity
După verificarea configurării, utilizați următoarea comandă pentru a șterge o imagine ECR neetichetată:
aws ecr batch-delete-image --repository-name test-ecr-policy --image-ids imageTag=custom-image-6
Această comandă va șterge imaginea cu eticheta `custom-image-6` din depozitul `test-ecr-policy`, similar cu acțiunea realizată în interfața grafică.
Metoda 3: Utilizarea scripturilor
Pentru această metodă, este necesară configurarea cheilor de acces AWS pe mașina pe care se rulează scriptul.
Iată un exemplu de script pentru ștergerea imaginilor neetichetate:
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)
Răspunsul va conține lista de ID-uri ale imaginilor șterse, precum și eventualele erori.
Ștergerea programată a imaginilor ECR
Inginerii DevOps și cei care gestionează AWS ECR știu cât de laborioasă poate fi ștergerea manuală a imaginilor. Utilizarea scripturilor și comenzilor facilitează procesul, dar ar fi ideală o soluție care să automatizeze ștergerea imaginilor, fără intervenție manuală.
AWS ECR oferă politica de ciclu de viață, care permite ștergerea automată a imaginilor la intervale de timp prestabilite. Vom analiza modul de configurare a acestei politici.
Metoda 1: Interfața grafică
Pasul 1: Accesați depozitul în care doriți să setați politica de ciclu de viață. În meniul din stânga, selectați opțiunea „Politica ciclului de viață”.
Pasul 2: Creați o nouă regulă pentru politica ciclului de viață.
Pasul 3: ECR permite ștergerea imaginilor în funcție de două condiții: vârsta imaginilor sau existența unei etichete specifice. Puteți stabili reguli pentru ștergerea imaginilor neetichetate, după un anumit număr de zile sau dacă numărul acestora depășește o anumită limită.
Alegeți condițiile corespunzătoare necesităților dumneavoastră și ajustați valorile în consecință. Salvați pentru a activa regula ciclului de viață.
Metoda 2: Interfața linie de comandă (CLI)
Pentru a configura politica de ciclu de viață prin CLI, utilizați comanda `put-lifecycle-policy`. Înainte de aceasta, creați un fișier JSON (`policy.json`, de exemplu), care va conține condițiile politicii.
Elementele esențiale ale politicii ciclului de viață sunt:
rulePriority (Tip: integer, Obligatoriu: da):
Ordinea de aplicare a regulilor, de la cea mai mică la cea mai mare prioritate. Regulile cu prioritate mai mică sunt evaluate mai întâi. Fiecare regulă trebuie să aibă o prioritate unică.
description (Tip: string, Obligatoriu: nu):
O descriere a scopului regulii din politica de ciclu de viață.
tagStatus (Tip: string, Obligatoriu: da):
Indică dacă regula se aplică imaginilor etichetate, neetichetate sau tuturor imaginilor. Pentru imaginile etichetate, este necesară specificarea `tagPrefixList`. Pentru imaginile neetichetate, `tagPrefixList` nu este necesară.
tagPrefixList (Tip: list[string], Obligatoriu: da, numai dacă tagStatus este "tagged"):
Lista de prefixe de etichete de imagini, separate prin virgulă. De exemplu, prefixul `prod` se va aplica imaginilor cu etichetele `prod`, `prod1`, `prod2`, etc. Pot fi specificate mai multe prefixe, dar doar imaginile care conțin toate etichetele specificate vor fi selectate.
countType (Tip: string, Obligatoriu: da):
Specifică `imageCountMoreThan` pentru a limita numărul imaginilor din depozit sau `sinceImagePushed` pentru a limita imaginile pe baza vârstei lor.
countUnit (Tip: string, Obligatoriu: da, numai dacă countType este "sinceImagePushed"):
Unitatea de timp utilizată pentru `sinceImagePushed`. Pot fi zile, ore, etc.
countNumber (Tip: integer, Obligatoriu: da):
Un număr întreg pozitiv. Dacă `countType` este `imageCountMoreThan`, specifică numărul maxim de imagini de păstrat. Dacă `countType` este `sinceImagePushed`, specifică vârsta maximă a imaginilor.
type (Tip: string, Obligatoriu: da):
Tipul acțiunii. Singura valoare acceptată este `expire`.
Exemplu de fișier `policy.json`:
{ "rules": [ { "rulePriority": 1, "description": "Expire images older than 10 days", "selection": { "tagStatus": "untagged", "countType": "sinceImagePushed", "countUnit": "days", "countNumber": 14 }, "action": { "type": "expire" } } ] }
Ajustați acest fișier JSON conform cerințelor. `sinceImagePushed` poate fi înlocuit cu `imageCountMoreThan`.
Comanda CLI pentru a aplica politica:
aws ecr put-lifecycle-policy --repository-name "test-ecr-polict" --lifecycle-policy-text "file://policy.json"
Metoda 3: Utilizarea scripturilor
Pentru a configura politica folosind scripturi, putem folosi biblioteca boto3. Fragmentul de cod de mai jos arată cum se face acest lucru, utilizând același fișier `policy.json`:
import boto3 client = boto3.client('ecr') response = client.put_lifecycle_policy( registryId='PODES12342', repositoryName="test-ecr-policy", lifecyclePolicyText="plicy.json" ) print(response)
Cum se aplică o singură politică în mai multe depozite ECR?
Adesea, este necesară aplicarea aceleiași politici în mai multe depozite. Această sarcină poate deveni repetitivă și plictisitoare dacă este efectuată manual.
Fragmentul de cod de mai jos demonstrează cum se poate aplica o politică în peste 100 de depozite, eficientizând procesul.
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)
Concluzie
Politica ciclului de viață ECR permite curățarea automată a imaginilor vechi în conformitate cu criteriile specificate. AWS pune la dispoziție documentație detaliată și exemple de politici.
De asemenea, puteți configura politici alternative pentru imaginile etichetate, utilizând diverse criterii, precum data încărcării imaginilor. Pentru a vă aprofunda cunoștințele despre AWS, vă recomandăm să explorați diverse terminologii și servicii.