Hvordan sletter man AWS ECR umærkede og ældre billeder?

Amazon ECR er integreret med Amazon Elastic Kubernetes Service (Amazon EKS), Amazon Elastic Container Service (Amazon ECS) og AWS Lambda, hvilket forenkler din udvikling til produktionsworkflow.

Amazon ECR hoster billederne i en yderst skalerbar og tilgængelig arkitektur, så du kan implementere containere pålideligt til dine applikationer. Det er vigtigt at slette umærkede og gamle billeder for at opretholde hygiejnen.

I dag kører applikationer som mikroservice. Udtrykket mikrotjeneste er intet andet end en beholder, der pakker al koden og dens afhængigheder, så applikationen kan køre hurtigt og pålideligt i ethvert computermiljø. På grund af deres bærbarhed, lille størrelse og bekvemmelighed er containere ved at blive en foretrukne metode til forsendelse af moderne applikationer.

Containere er designet ud fra en skrivebeskyttet skabelon kaldet et billede. Disse billeder skal opbevares et sted, så de kan hentes af enhver maskine, der er autoriseret til at bruge dem.

Det er her et containerregister kommer ind. For ikke længe siden brugte folk DockerHub til at gemme disse billeder og artefakter. Men hvis du bruger AWS cloud-tjenester, er jeg sikker på, at du allerede bruger AWS ECR, som er et alternativ til DockerHub.

AWS ECR er et fuldt administreret containerregister, der giver højtydende hosting, så du kan implementere applikationsbilleder og artefakter i form af offentlige og private depoter.

Hver dag skubber og trækker flere AWS-hostede applikationer millioner af billeder/applikationsartefakter ind i/ud af specifikke ECR-lagre.

I denne artikel vil vi diskutere, hvordan man rydder gamle og forældede AWS ECR og holder ECR-lagre rene.

Behovet: Slet umærkede og gamle billeder nu!

Den primære årsag til rengøring af ECR-depoter er udviklingshygiejne. Ingen ønsker på noget tidspunkt at beholde billeder, der er ældre end ti implementeringer i deres ECR’er. Det skyldes også, at tilbagerulninger ofte sker i branchen, men en tilbagerulning, der vender tilbage fra 5 artefakter tidligere, er sjælden.

I enklere vendinger er ethvert billede/artefakter, der er mere end fem gamle implementeringer, ubrugelige. Det kan ændres i din organisations strategirapport, men vi vil ikke anbefale det som en bedste praksis.

  Krydr din browsers hjemmeside med disse 10 tilfældige webstedsgeneratorer

På tværs af branchen bruges tagging til at angive de mest stabile seneste eller seneste fem seneste billeder. Som en del af softwareudviklingens livscyklus genereres billederne hurtigt, og disse tags erstattes med nye billeder, hvilket efterlader de ældre billeder umærkede og ubrugelige.

I situationer som denne, hvor billeder/artefakter er store, vil det også tilføje lagerafgifter på ECR. Prisen for AWS ECR er “$0,10 pr. GB / måned for data, der er gemt i private eller offentlige depoter”.

Denne pris ser måske lille ud for dig, men som de siger, dråber udgør havet. Alle disse billeder vil, hvis de opbevares i en længere periode, tilføje højere regninger til dine AWS-fakturaer.

Forslaget er at rydde disse gamle og umærkede billeder ud af dine ECR-lagre, fordi du ikke har brug for dem! Enkel! Hvorfor beholde det og betale for det?

Sletning af AWS ECR-billeder manuelt

Metode 1: The GUI Way!

Trin 1: Log ind på Amazon Web Services-kontoen og gå til det depot, du vil rydde.

Trin 2: Her kan du se, at depotet har det seneste tag til at angive den mest stabile version. De andre tags, du ser, kan kaldes umærkede. For at slette skal vi blot vælge billedet og klikke på slet.

Trin 3: Bekræft for at slette

Metode 2: CLI Way!

For at slette et billede ved hjælp af CLI skal du have alle AWS IAM-adgangsnøgler konfigureret på din maskine og den nødvendige IAM-tilladelse for at give dig adgang til lagrene.

I dette tilfælde har vi allerede konfigureret det. Du kan gøre det fra AWS-konfigurationsguiden, hvis du ikke allerede har gjort det.

Hvis du er usikker på, om du har konfigureret AWS CLI på din maskine, skal du bruge følgende kommando til at bekræfte.

aws sts get-caller-identity

Nu hvor vi har bekræftet, at vi kan bruge AWS CLI, kan du bruge følgende kommando til at slette et umærket ECR-billede.

aws ecr batch-delete-image --repository-name test-ecr-policy --image-ids imageTag=custom-image-6

Her laver vi noget, der ligner det, vi gjorde i GUI. Vi sletter det billede, der er tagget som custom-image-6, som findes i repository test-ecr-policy.

Metode 3: Scripting Way!

Forudsætningen for denne metode er at have en AWS Access-nøgle konfigureret på den maskine, du kører på.

  Sådan laver du lodrette afrivningssider i Microsoft Word

Script til at slette umærkede billeder.

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)

Svaret vil give dig listen over slettede billed-id’er sammen med en fejl, hvis der var nogen.

Planlægningsmetode til sletning af ECR-billeder

Hvis du er DevOps-ingeniør eller regelmæssigt administrerer AWS ECR, kender du allerede smerterne ved at slette disse billeder manuelt.

At køre scriptet/kommandoen gør tingene lettere, men vi er sikre på, at du ville have ønsket dig noget, der automatisk ville slette disse billeder på egen hånd, uden at du behøver at bekymre dig om dem.

Gode ​​nyheder, AWS ECR tilbyder en livscykluspolitik for dine billeder, som du kan indstille til at slette disse billeder rettidigt eller planlagt. Lad os se, hvordan man gør det.

Metode 1: The GUI Way!

Trin 1: Gå over til lageret, hvor du vil indstille livscykluspolitikken. På venstre panel kan du se livscykluspolitikken. Du kan klikke på den for at komme i gang.

Trin 2: Du kan klikke på den og oprette din første regel.

Trin 3: ECR giver dig mulighed for at slette billeder på to betingelser, den ene er, hvis dine billeder bliver specificerede dage gamle, eller hvis de er tagget/utagget, og du kun vil beholde dem i f.eks. X antal dage.

Lad os se, hvordan det gøres. Nu kan du indstille, om du vil slette umærkede billeder, hvis de er en dag eller ældre, eller hvis billedantallet af umærkede billeder overstiger et.

Vælg i henhold til din use case. Glem ikke; du kan øge disse tal til det antal du ønsker. Gem for at udløse livscyklusreglen.

Metode 2: CLI Way!

AWS ECR CLI-kommandoen til at indstille livscykluspolitik er put-lifecycle-policy.

Lad os se, hvordan man gør det. Til dette skal du oprette en JSON-fil med en liste over politikbetingelserne. Du kan navngive den policy.json eller et hvilket som helst navn efter eget valg.

Men før det, lad os se på de livscykluspolitiske elementer.

rulePriority (Type: integer, Required: yes):

Lavere til højere regelrækkefølge. Livscykluspolitikregler med prioritet 1 anvendes først, derefter 2 osv. Livscykluspolitikregler skal hver have en unik regelværdi.

Politikregler behøver ikke på hinanden følgende værdier. Eventuelle taggede regler skal have den højeste regelPrioritet og gennemgås sidst.

description (Type: string, Required: no):

Forklarer, hvad en regel i en livscykluspolitik er til for.

tagStatus (Type: string, Required: yes):

Den kontrollerer, om den tilføjede livscykluspolitikregel angiver et billedmærke. Tagget, umærket eller noget som helst er OK. Hvis ingen er angivet, evalueres alle billeder. Tagged kræver en tagPrefixList-værdi. Utagget kræver udeladelse af tagPrefixList.

tagPrefixList (Type: list[string], Required: yes, only if tagStatus is set to tagged):

Hvis “tagStatus” er “tagget”, kræver din livscykluspolitik en kommasepareret liste over billedtag-præfikser.

  Sådan annullerer du abonnementer på iPhone

Ved at bruge tag-præfikset prod kan du angive alle billeder markeret prod, prod1, prod2 osv. Flere tags vælger kun billeder med alle tags.

countType (Type: string, Required: yes):

Angiv countNumber, hvis countType er imageCountMoreThan for at begrænse antallet af billeder i dit lager.

Angiv countUnit og countNumber, hvis countType er sinceImagePushed for at begrænse depotets billeder.

countUnit (Type: string, Required: yes, only if countType is set to sinceImagePushed):

Angiv kun en tælleenhed, når countType er sinceImagePushed; ellers opstår der en fejl.

countNumber (Type: integer, Required: yes):

Kun positive heltal (0 er ikke en accepteret værdi). Hvis countType er imageCountMoreThan, er værdien det maksimale antal fotografier at beholde. Brug af sinceImagePushed som countType bestemmer den maksimale billedalder.

 type (Type: string, Required: yes):

Vælg en type handling. Den værdi, der kan bruges, er “udløber”.

Her er min “policy.json.”

{

"rules": [

{

"rulePriority": 1,

"description": "Expire images older than 10 days",

"selection": {

"tagStatus": "untagged",

"countType": "sinceImagePushed",

"countUnit": "days",

"countNumber": 14

},

"action": {

"type": "expire"

}

}

]

}

I henhold til din organisations krav. “sinceImagePushed” kan erstattes med “imageCountMoreThan”.

CLI-kommandoen til at indstille denne politik ville være:

aws ecr put-lifecycle-policy --repository-name "test-ecr-polict" --lifecycle-policy-text "file://policy.json"

Metode 3: Scripting Way!

Vi vil bruge kommandoen boto3 til at opnå dette. Vi kan bruge den samme “policy.json” til at konfigurere dette. Nedenfor er det brugte kodestykke.

import boto3

client = boto3.client('ecr')

response = client.put_lifecycle_policy(
registryId='PODES12342',
repositoryName="test-ecr-policy",
lifecyclePolicyText="plicy.json"
)

print(response)

Hvordan anvender man en enkelt politik på tværs af flere ECR-lagre?

Ofte er der spørgsmål om, hvordan man anvender den samme politik på tværs af flere lagre.

Det er en gentagen og kedelig opgave at sætte politikker manuelt.

Her er et kodestykke, der kan bruges i produktionssystemet til at anvende en politik på tværs af mere end 100’er lagre.

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)

Konklusion

Vi kan nemt konstruere en ECR-livscykluspolitik og ødelægge ældre billeder i henhold til de angivne parametre. AWS leverer omfattende dokumentation samt eksempler på livscykluspolitikker.

Du kan også eksperimentere med alternative politikker for taggede billeder, såsom at matche kriterier med den dato, billedet blev uploadet.

Du kan også udforske nogle AWS-nøgleterminologier, der fremmer din AWS-læring.