Tengo curiosidad por saber si hay una manera de establecer una política de ciclo de vida común, que se aplicará a todos los repositorios en ECR.
Actualmente, según tengo entendido, no hay forma de hacerlo.
Un enfoque en el que estoy pensando es usar la definición JSON de políticas de ciclo de vida y aplicarla a todos los repositorios con AWS CLI (puede ser un poco automatizado). Pero esto debe ejecutarse cada vez que se crea un nuevo repositorio que agrega complejidad.
Todavía no hay una plantilla de política de ciclo de vida de ECR predeterminada o algo así. Entonces, como mencionó, puede usar aws cli way y asignarlo para que se ejecute desde algún lugar, como Lambda o trabajo k8s:
Obtenga todos los nombres de los repositorios:
repositories=($(aws ecr describe-repositories --profile=$profile --output text --query "repositories[*].repositoryName"))Aplicar la política a cada repositorio:
for repository in "${repositories[@]}"; do aws ecr put-lifecycle-policy --profile=$profile --repository-name $repository --lifecycle-policy-text "file://policy.json" done;puedes usar Terraform para eso
resource "aws_ecr_lifecycle_policy" "untagged_removal_policy" { count = "${length(split(",",local.registries))}" depends_on = [ "aws_ecr_repository.ecr_repositories" ] repository = "${aws_ecr_repository.ecr_repositories.*.name[count.index]}" policy = <<EOF { "rules": [ { "rulePriority": 1, "description": "Expire Docker images older than 7 days", "selection": { "tagStatus": "untagged", "countType": "sinceImagePushed", "countUnit": "days", "countNumber": 7 }, "action": { "type": "expire" } } ] } EOF}
Estoy usando el mapeo de CloudFormation para definir una política y luego aplicarla en todos los repositorios con una línea:
Mappings: ECRPolicy: DevPolicy: RemoveUntagged: | { "rules": [ { "rulePriority": 1, "description": "Expire images older than 3 days", "selection": { "tagStatus": "untagged", "countType": "sinceImagePushed", "countUnit": "days", "countNumber": 3 }, "action": { "type": "expire" } } ] }Y para los repositorios es solo:
ECRRepository: Type: AWS::ECR::Repository Properties: RepositoryName: !Sub ${ECRRepositoryName}-dev RepositoryPolicyText: Version: "2012-10-17" Statement: - Effect: Allow Action: - ecr:GetAuthorizationToken - ecr:BatchCheckLayerAvailability - ecr:GetDownloadUrlForLayer - ecr:GetRepositoryPolicy - ecr:DescribeRepositories - ecr:ListImages - ecr:DescribeImages - ecr:BatchGetImage Principal: AWS: - !Sub arn:aws:iam::${DevAccount}:root Sid: AllowCrossAccountPull LifecyclePolicy: LifecyclePolicyText: !FindInMap [ECRPolicy, DevPolicy, RemoveUntagged]