Jak odstranit neoznačené a starší obrázky AWS ECR?

Amazon ECR je integrován s Amazon Elastic Kubernetes Service (Amazon EKS), Amazon Elastic Container Service (Amazon ECS) a AWS Lambda, což zjednodušuje váš vývoj až do produkčního workflow.

Amazon ECR hostuje obrazy ve vysoce škálovatelné a dostupné architektuře, což vám umožňuje spolehlivě nasazovat kontejnery pro vaše aplikace. Pro zachování hygieny je důležité smazat neoznačené a staré obrázky.

Dnes aplikace běží jako mikroslužba. Termín mikroslužba není nic jiného než kontejner, který zabalí veškerý kód a jeho závislosti, takže aplikace může běžet rychle a spolehlivě v jakémkoli výpočetním prostředí. Díky své přenosnosti, malé velikosti a pohodlí se kontejnery stávají metodou volby pro přepravu moderních aplikací.

Kontejnery jsou navrženy ze šablony pouze pro čtení zvané obrázek. Tyto obrázky musí být někde uloženy, aby je mohl získat jakýkoli stroj oprávněný je používat.

Zde přichází na řadu registr kontejnerů. Není to tak dávno, co lidé používali DockerHub k ukládání těchto obrázků a artefaktů. Pokud však používáte cloudové služby AWS, jsem si jistý, že již používáte AWS ECR, což je alternativa k DockerHubu.

AWS ECR je plně spravovaný registr kontejnerů, který poskytuje vysoce výkonný hosting a umožňuje vám nasazovat obrázky a artefakty aplikací ve formě veřejných a soukromých úložišť.

Každý den několik aplikací hostovaných AWS vloží a vytáhne miliony obrázků/artefaktů aplikací do/z konkrétních úložišť ECR.

V tomto článku budeme diskutovat o tom, jak vyčistit staré a zastaralé AWS ECR a udržovat úložiště ECR čisté.

Potřeba: Odstraňte neoznačené a staré obrázky hned!

Primárním důvodem pro čištění úložišť ECR je hygiena vývoje. V každém okamžiku by nikdo nechtěl ve svých pokladnách uchovávat obrázky starší než deset nasazení. Je to také proto, že v průmyslu často dochází k rollbackům, ale rollback, který vrátí změnu z 5 dřívějších artefaktů, je vzácný.

Jednodušeji řečeno, jakýkoli obrázek/artefakty staré více než pět nasazení jsou k ničemu. Ve zprávě o strategii vaší organizace se to může změnit, ale nedoporučujeme to jako osvědčený postup.

  8 nejlepších softwarových řešení, která jsme otestovali

V celém odvětví se tagování používá k určení nejstabilnějších nejnovějších nebo posledních pěti nejnovějších obrázků. V rámci životního cyklu vývoje softwaru jsou obrázky generovány rychle a tyto značky jsou nahrazeny novými obrázky, takže starší obrázky zůstávají netagované a nepoužitelné.

V situacích, jako je tato, kdy jsou obrázky/artefakty velké, také zvýší poplatky za úložiště na ECR. Cena AWS ECR je „0,10 $ za GB / měsíc za data uložená v soukromých nebo veřejných úložištích“.

Tato cena se vám může zdát malá, ale jak se říká, kapky tvoří oceán. Všechny tyto obrázky, pokud jsou uloženy na skladě po delší dobu, přinesou vyšší účty na vaše faktury AWS.

Navrhujeme vymazat tyto staré a neoznačené obrázky ze svých repozitářů ECR, protože je nepotřebujete! Jednoduchý! Proč si to nechat a platit za to?

Ruční mazání snímků AWS ECR

Metoda 1: Způsob GUI!

Krok 1: Přihlaste se k účtu Amazon Web Services a přejděte do úložiště, které chcete vymazat.

Krok 2: Zde můžete vidět, že úložiště má nejnovější značku pro určení nejstabilnější verze. Ostatní značky, které vidíte, lze nazvat neoznačené. Pro smazání stačí vybrat obrázek a kliknout na Smazat.

Krok 3: Potvrďte smazání

Metoda 2: Cesta CLI!

Chcete-li odstranit obraz pomocí CLI, budete potřebovat všechny přístupové klíče AWS IAM nakonfigurované na vašem počítači a požadované oprávnění IAM, abyste měli přístup k úložištím.

V tomto případě jsme jej již nakonfigurovali. Můžete to udělat z průvodce základní konfigurací AWS, pokud jste to ještě neudělali.

Pokud si nejste jisti, že jste na svém počítači nakonfigurovali AWS CLI, použijte k ověření následující příkaz.

aws sts get-caller-identity

Nyní, když jsme potvrdili, že můžeme použít AWS CLI, můžete pomocí následujícího příkazu odstranit neoznačený obrázek ECR.

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

Zde děláme něco podobného, ​​co jsme dělali v GUI. Smažeme obrázek označený jako custom-image-6 umístěný v repozitáři test-ecr-policy.

Metoda 3: Způsob skriptování!

Předpokladem pro tuto metodu je mít na počítači, na kterém běžíte, nakonfigurován přístupový klíč AWS.

Skript pro odstranění neoznačených obrázků.

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)

Odpověď by vám poskytla seznam smazaných ID obrázků spolu s chybou, pokud nějaké byly.

  17 Platforma online kurzů účetnictví pro každého

Metoda plánování pro odstranění snímků ECR

Pokud jste technikem DevOps nebo pravidelně spravujete AWS ECR, již budete znát bolest při ručním mazání těchto obrázků.

Spuštění skriptu/příkazu věci usnadňuje, ale jsme si jisti, že byste si přáli něco, co by tyto obrázky samo o sobě automaticky smazalo, aniž byste se o ně museli starat.

Dobrá zpráva, AWS ECR nabízí zásady životního cyklu pro vaše obrázky, které můžete nastavit tak, aby byly tyto obrázky odstraněny včas nebo podle plánu. Pojďme se podívat, jak na to.

Metoda 1: Způsob GUI!

Krok 1: Přejděte do úložiště, kde chcete nastavit zásady životního cyklu. Na levém panelu můžete vidět zásady životního cyklu. Můžete na něj kliknout a začít.

Krok 2: Můžete na něj kliknout a vytvořit své první pravidlo.

Krok 3: ECR vám umožňuje odstranit obrázky za dvou podmínek, jednou z nich je, pokud vaše obrázky zestárnou zadané dny nebo pokud jsou označeny/neoznačeny a chcete je uchovat pouze po dobu, řekněme, X dní.

Podívejme se, jak se to dělá. Nyní můžete nastavit, zda chcete smazat neoznačené obrázky, pokud jsou jeden den nebo starší, nebo pokud počet neoznačených obrázků překročí jeden.

Vyberte si podle svého případu použití. Nezapomeňte; tato čísla můžete zvýšit na číslo dle vašeho výběru. Uložením spustíte pravidlo životního cyklu.

Metoda 2: Cesta CLI!

Příkaz AWS ECR CLI pro nastavení zásady životního cyklu je put-lifecycle-policy.

Pojďme se podívat, jak na to. K tomu musíte vytvořit soubor JSON se seznamem podmínek zásad. Můžete jej pojmenovat policy.json nebo libovolný název podle svého výběru.

Předtím se však podívejme na prvky politiky životního cyklu.

rulePriority (Type: integer, Required: yes):

Pořadí pravidel od nižšího k vyššímu. Nejprve se použijí pravidla politiky životního cyklu s prioritou jedna, potom 2 atd. Pravidla politiky životního cyklu musí mít každé jedinečnou hodnotu pravidla.

Pravidla zásad nepotřebují po sobě jdoucí hodnoty. Pravidla s libovolnými značkami musí mít nejvyšší prioritu pravidla a musí být kontrolována jako poslední.

description (Type: string, Required: no):

Vysvětluje, k čemu slouží pravidlo v politice životního cyklu.

tagStatus (Type: string, Required: yes):

Zkontroluje, zda přidané pravidlo zásad životního cyklu specifikuje značku obrázku. Označené, neoznačené nebo jakékoli je v pořádku. Pokud není zadán žádný, vyhodnotí se všechny obrázky. Tagged vyžaduje hodnotu tagPrefixList. Untagged vyžaduje vynechání tagPrefixList.

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

Pokud je „tagStatus“ označeno jako „označeno“, vaše zásady životního cyklu vyžadují seznam předpon značek obrázků oddělených čárkami.

  Hush je správce záložek chráněný heslem pro soukromé prohlížení [Chrome]

Pomocí předpony tagu prod můžete určit všechny obrázky označené prod, prod1, prod2 atd. Více tagů vybere pouze obrázky se všemi tagy.

countType (Type: string, Required: yes):

Pokud je countType nastaven na imageCountMoreThan, zadejte countNumber, abyste omezili počet obrázků ve vašem úložišti.

Zadejte countUnit a countNumber, pokud countType je sinceImagePushed pro omezení obrázků úložiště.

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

Jednotku počtu určete pouze v případě, že typ countType je sinceImagePushed; jinak dojde k chybě.

countNumber (Type: integer, Required: yes):

Pouze kladná celá čísla (0 není přijatelná hodnota). Pokud je countType imageCountMoreThan, hodnota je maximální počet fotografií, které se mají ponechat. Použití sinceImagePushed jako countType určuje maximální stáří obrázku.

 type (Type: string, Required: yes):

Vyberte typ akce. Hodnota, kterou lze použít, je „expire“.

Zde je můj soubor policy.json.

{

"rules": [

{

"rulePriority": 1,

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

"selection": {

"tagStatus": "untagged",

"countType": "sinceImagePushed",

"countUnit": "days",

"countNumber": 14

},

"action": {

"type": "expire"

}

}

]

}

Podle požadavků vaší organizace. „sinceImagePushed“ lze nahradit „imageCountMoreThan“.

Příkaz CLI pro nastavení této zásady by byl:

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

Metoda 3: Způsob skriptování!

K tomu použijeme příkaz boto3. K nastavení můžeme použít stejný soubor „policy.json“. Níže je použitý fragment kódu.

import boto3

client = boto3.client('ecr')

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

print(response)

Jak aplikovat jednu zásadu na více úložišť ECR?

Často se objevují otázky, jak aplikovat stejné zásady na více úložištích.

Je to opakující se a nudný úkol ručně nastavovat zásady.

Zde je úryvek kódu, který lze použít v produkčním systému k aplikaci zásad ve více než 100 úložištích.

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)

Závěr

Můžeme snadno vytvořit politiku životního cyklu ECR a zničit starší obrázky podle zadaných parametrů. AWS poskytuje rozsáhlou dokumentaci a ukázky zásad životního cyklu.

Můžete také experimentovat s alternativními zásadami pro označené obrázky, jako je shoda kritérií s datem nahrání obrázku.

Můžete také prozkoumat některé klíčové terminologie AWS, které rozšiřují vaše učení AWS.