Как определить политику жизненного цикла ECR с CloudFormation
Чтобы ограничить количество изображений в хранилище, я бы хотел определить политику жизненного цикла. Поскольку весь стек определен с помощью CloudFormation, я бы тоже хотел определить эту политику.
Например, моя политика может быть "хранить только самые последние 8 изображений, независимо от того, помечены они или нет".
3 ответа
Решение было довольно простым, но так как я не смог найти ни одного примера или подобных вопросов (ECR не является основным направлением, я знаю), позвольте мне опубликовать здесь простое решение, которое я нашел, которое просто требует вставить политику как JSON в CloudFormation определение:
MyRepository:
Type: AWS::ECR::Repository
Properties:
LifecyclePolicy:
LifecyclePolicyText: |
{
"rules": [
{
"rulePriority": 1,
"description": "Only keep 8 images",
"selection": {
"tagStatus": "any",
"countType": "imageCountMoreThan",
"countNumber": 8
},
"action": { "type": "expire" }
}]
}
Конечно, это очень упрощенно, но это отправная точка, которую я искал
| позволит вам добавить встроенный текст.
AWSTemplateFormatVersion: "2010-09-09"
Resources:
ECRRepo:
Type: AWS::ECR::Repository
Properties:
RepositoryName: "images"
LifecyclePolicy:
LifecyclePolicyText: |
{
"rules": [
{
"rulePriority": 2,
"description": "Keep only one untagged image, expire all others",
"selection": {
"tagStatus": "untagged",
"countType": "imageCountMoreThan",
"countNumber": 1
},
"action": {
"type": "expire"
}
}
]
}
Вы также можете определить ссылку на свой PolicyText, а затем в файле parameters.json указать вашу политику.
Это будет выглядеть примерно так:
шаблон.yml
Parameters:
lifecyclePolicyText:
Description: Lifecycle policy content (JSON), the policy content the pre-fixes for the microservices and the kind of policy (CountMoreThan).
Type: String
repositoryName:
Description: ECR Repository Name to which we will apply the lifecycle policies.
Type: String
registryId:
Description: AWS account identification number (12 digits)
Type: String
Default: xxxxx
Resources:
Repository:
Type: AWS::ECR::Repository
Properties:
LifecyclePolicy:
LifecyclePolicyText: !Ref lifecyclePolicyText
RegistryId: !Ref registryId
RepositoryName: !Ref repositoryName
Outputs:
Arn:
Value: !GetAtt Repository.Arn
параметры.json
[
{
"ParameterKey": "lifecyclePolicyText",
"ParameterValue": "{'rules':[{'rulePriority':1,'description':'Only keep 8 images','selection':{'tagStatus':'any','countType':'imageCountMoreThan','countNumber':8},'action':{'type':'expire'}}]}"
},
{
"ParameterKey": "repositoryName",
"ParameterValue": "xxxx"
}
]