Amazon ECR está integrado con Amazon Elastic Kubernetes Service (Amazon EKS), Amazon Elastic Container Service (Amazon ECS) y AWS Lambda, lo que simplifica su flujo de trabajo desde el desarrollo hasta la producción.
Amazon ECR aloja imágenes en una arquitectura altamente escalable y disponible, lo que le permite implementar contenedores para sus aplicaciones de manera confiable. Es importante eliminar las imágenes antiguas y sin etiquetar para mantener la higiene.
Hoy en día, las aplicaciones funcionan como microservicios. El término microservicio no es más que un contenedor que agrupa todo el código y sus dependencias para que la aplicación pueda ejecutarse de manera rápida y confiable en cualquier entorno informático. Debido a su portabilidad, tamaño pequeño y conveniencia, los contenedores se están convirtiendo en el método preferido para enviar aplicaciones modernas.
Los contenedores se crean a partir de una plantilla de solo lectura llamada imagen. Estas imágenes deben almacenarse en algún lugar para que puedan ser recuperadas por cualquier máquina autorizada para usarlas.
Aquí es donde entra en juego un registro de contenedor. No hace mucho tiempo, la gente usaba DockerHub para almacenar estas imágenes y artefactos. Pero, si está utilizando los servicios en la nube de AWS, estoy seguro de que ya está utilizando AWS ECR, que es una alternativa a DockerHub.
AWS ECR es un registro de contenedores completamente administrado que proporciona alojamiento de alto rendimiento, lo que le permite implementar imágenes y artefactos de aplicaciones como repositorios públicos y privados.
Todos los días, múltiples aplicaciones alojadas en AWS empujan y extraen millones de imágenes/artefactos de aplicaciones hacia/desde repositorios de ECR específicos.
En este artículo, veremos cómo borrar los ECR de AWS antiguos y obsoletos y mantener limpios los repositorios de ECR.
La necesidad: ¡Elimine imágenes antiguas y sin etiquetar ahora!
La principal razón para limpiar los repositorios de ECR es la higiene del desarrollo. En ningún momento alguien querría mantener imágenes de más de diez despliegues en sus ECR. Esto también se debe a que las reversiones ocurren con frecuencia en la industria, pero una reversión que deshace el cambio 5 artefactos antes es rara.
En términos más simples, cualquier imagen/artefacto que tenga más de cinco implementaciones es inútil. Está sujeto a cambios en el informe estratégico de su organización, pero no lo recomendaríamos como mejor práctica.
En toda la industria, el marcado se utiliza para especificar los últimos fotogramas más estables o los últimos cinco fotogramas más recientes. Como parte del ciclo de vida del desarrollo de software, las imágenes se generan rápidamente y estas etiquetas se reemplazan con imágenes nuevas, dejando las imágenes antiguas sin etiquetar e inútiles.
En situaciones como esta, donde las imágenes o los artefactos son grandes, también agregará costos de almacenamiento en ECR. El precio de AWS ECR es «$0.10 por GB/mes para los datos almacenados en repositorios privados o públicos».
Este precio puede parecerte pequeño, pero como dicen, las gotas forman el océano. Todas estas imágenes, si se almacenan durante un período más largo, agregarán facturas más altas a sus facturas de AWS.
¡La sugerencia es eliminar estas imágenes antiguas y sin etiquetar de sus repositorios de ECR porque no las necesita! ¡Sencillo! ¿Por qué conservarlo y pagarlo?
Eliminación manual de imágenes de AWS ECR
Método 1: ¡El método GUI!
Etapa 1: Inicie sesión en la cuenta de Amazon Web Services y diríjase al repositorio que desea borrar.
2do paso: Aquí puede ver que el repositorio tiene la última etiqueta para especificar la versión más estable. Las otras etiquetas que ve se pueden llamar sin etiquetar. Para eliminar, simplemente seleccione la imagen y haga clic en eliminar.
Paso 3: Confirmar para borrar
Método 2: ¡El método CLI!
Para eliminar una imagen mediante la CLI, necesitará todas las claves de acceso de AWS IAM configuradas en su máquina y la autorización de IAM requerida para darle acceso a los repositorios.
En este caso, ya lo hemos configurado. Puedes hacer esto desde Guía básica de configuración de AWS si aún no lo has hecho.
Si no está seguro de tener la CLI de AWS configurada en su máquina, use el siguiente comando para verificar.
aws sts get-caller-identity
Ahora que hemos confirmado que podemos usar la CLI de AWS, puede usar el siguiente comando para eliminar una imagen de ECR sin etiquetar.
aws ecr batch-delete-image --repository-name test-ecr-policy --image-ids imageTag=custom-image-6
Aquí estamos haciendo algo similar a lo que hicimos en la GUI. Eliminaremos la imagen etiquetada como custom-image-6 que reside en el repositorio test-ecr-policy.
Método 3: ¡El método del script!
El requisito previo para este método es tener una clave de acceso de AWS configurada en la máquina en la que se está ejecutando.
Script para eliminar imágenes sin etiquetar.
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)
La respuesta le daría la lista de ID de imágenes eliminadas, junto con una falla si hubiera alguna.
Método de programación para eliminar imágenes ECR
Si es ingeniero de DevOps o administra AWS ECR con regularidad, ya conoce la dificultad de eliminar estas imágenes manualmente.
Ejecutar el script/comando lo hace más fácil, pero estamos seguros de que le hubiera gustado tener algo que eliminara automáticamente esas imágenes sin tener que preocuparse por ellas.
Buenas noticias, AWS ECR ofrece una política de ciclo de vida para sus imágenes, que puede configurar para eliminar esas imágenes de manera oportuna o programada. Veamos cómo.
Método 1: ¡El método GUI!
Etapa 1: Vaya al repositorio donde desea definir la política de ciclo de vida. En el panel izquierdo, puede ver la política de ciclo de vida. Puede hacer clic en él para comenzar.
2do paso: Puede hacer clic en él y crear su primera regla.
Paso 3: ECR le permite eliminar imágenes en dos condiciones, una es si sus imágenes tienen días específicos o están etiquetadas/sin etiquetar, y solo desea conservarlas, digamos, X días.
Veamos cómo se hace. Ahora puede configurar si desea eliminar las imágenes sin etiquetar si tienen un día o más, o si la cantidad de imágenes sin etiquetar supera una.
Elija en función de su caso de uso. No lo olvide; puede aumentar estos números hasta el número de su elección. Guarde para activar la regla del ciclo de vida.
Método 2: ¡El método CLI!
El comando de la CLI de AWS ECR para establecer la política de ciclo de vida es poner-política-de-ciclo-de-vida.
Veamos cómo. Para esto, debe crear un archivo JSON que enumere las condiciones de la política. Puede nombrarlo policy.json o cualquier nombre que desee.
Pero antes de eso, veamos los elementos de la política de ciclo de vida.
rulePriority (Type: integer, Required: yes):
Orden de reglas de menor a mayor. Las reglas de política de ciclo de vida con prioridad 1 se aplican primero, luego 2 y así sucesivamente. Cada una de las reglas de la política de ciclo de vida debe tener un valor de regla único.
Las reglas de política no necesitan valores consecutivos. Todas las reglas etiquetadas deben tener la prioridad de regla más alta y revisarse en último lugar.
description (Type: string, Required: no):
Explica para qué sirve una regla en una política de ciclo de vida.
tagStatus (Type: string, Required: yes):
Comprueba si la regla de política de ciclo de vida agregada especifica una etiqueta de imagen. Etiquetado, sin etiquetar o cualquiera está bien. Si no se especifica ninguno, se evalúan todas las imágenes. Tagged requiere un valor de tagPrefixList. Untagged requiere que se omita tagPrefixList.
tagPrefixList (Type: list[string], Required: yes, only if tagStatus is set to tagged):
Si «tagStatus» es «etiquetado», su política de ciclo de vida requiere una lista de prefijos de etiquetas de imagen separados por comas.
Usando el prefijo de la etiqueta prod, puede especificar todas las imágenes etiquetadas prod, prod1, prod2, etc. Múltiples etiquetas solo seleccionan imágenes con todas las etiquetas.
countType (Type: string, Required: yes):
Especifique countNumber si countType es imageCountMoreThan para limitar la cantidad de imágenes en su repositorio.
Especifique countUnit y countNumber si countType es sinceImagePushed para limitar las imágenes del repositorio.
countUnit (Type: string, Required: yes, only if countType is set to sinceImagePushed):
Solo especifique una unidad de conteo cuando countType sea sinceImagePushed; de lo contrario, se produce un error.
countNumber (Type: integer, Required: yes):
Solo números enteros positivos (0 no es un valor aceptado). Si countType es imageCountMoreThan, el valor es el número máximo de fotografías que se pueden conservar. El uso de sinceImagePushed como countType determina la antigüedad máxima de la imagen.
type (Type: string, Required: yes):
Elija un tipo de acción. El valor que se puede utilizar es «expires».
Aquí está mi «policy.json».
{
"rules": [
{
"rulePriority": 1,
"description": "Expire images older than 10 days",
"selection": {
"tagStatus": "untagged",
"countType": "sinceImagePushed",
"countUnit": "days",
"countNumber": 14
},
"action": {
"type": "expire"
}
}
]
}
De acuerdo a los requerimientos de su organización. «fromImagePushed» puede ser reemplazado por «ImagenCuentaMásQue».
El comando CLI para establecer esta política sería:
aws ecr put-lifecycle-policy --repository-name "test-ecr-polict" --lifecycle-policy-text "file://policy.json"
Método 3: ¡El método del script!
Usaremos el comando boto3 para lograr esto. Podemos usar el mismo «policy.json» para configurar esto. A continuación se muestra el fragmento de código utilizado.
import boto3
client = boto3.client('ecr')
response = client.put_lifecycle_policy(
registryId='PODES12342',
repositoryName='test-ecr-policy',
lifecyclePolicyText='plicy.json'
)
print(response)
¿Cómo aplicar una única política en varios repositorios de ECR?
A menudo hay preguntas sobre cómo aplicar la misma política en varios repositorios.
Es una tarea repetitiva y aburrida establecer políticas manualmente.
Aquí hay un fragmento de código que se puede usar en el sistema de producción para aplicar una política en más de 100 repositorios.
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)
Conclusión
Podemos crear fácilmente una política de ciclo de vida de ECR y destruir imágenes antiguas en función de parámetros específicos. AWS proporciona una amplia documentación y ejemplos de políticas de ciclo de vida.
También puede experimentar con otras políticas para imágenes etiquetadas, como la coincidencia de criterios con la fecha en que se cargó la imagen.
También puede explorar algunas terminologías clave de AWS que mejoran su aprendizaje de AWS.
Si quiere puede hacernos una donación por el trabajo que hacemos, lo apreciaremos mucho.
Direcciones de Billetera:
- BTC: 14xsuQRtT3Abek4zgDWZxJXs9VRdwxyPUS
- USDT: TQmV9FyrcpeaZMro3M1yeEHnNjv7xKZDNe
- BNB: 0x2fdb9034507b6d505d351a6f59d877040d0edb0f
- DOGE: D5SZesmFQGYVkE5trYYLF8hNPBgXgYcmrx
También puede seguirnos en nuestras Redes sociales para mantenerse al tanto de los últimos post de la web:
- Telegram
Disclaimer: En Cryptoshitcompra.com no nos hacemos responsables de ninguna inversión de ningún visitante, nosotros simplemente damos información sobre Tokens, juegos NFT y criptomonedas, no recomendamos inversiones