optar_infra/terraform/modules/ecr/main.tf

82 lines
1.7 KiB
HCL

#############################
# Providers
#############################
provider "aws" {
region = var.region
default_tags {
tags = {
Environment = var.stage
Project = "web-crawler-on-eks"
}
}
}
resource "aws_ecr_repository" "optar" {
name = "optar"
image_tag_mutability = "MUTABLE"
image_scanning_configuration {
scan_on_push = true
}
}
data "aws_iam_policy_document" "optar" {
statement {
sid = "allow eks"
effect = "Allow"
principals {
type = "AWS"
identifiers = [var.account_id]
}
actions = [
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage",
"ecr:BatchCheckLayerAvailability",
"ecr:PutImage",
"ecr:InitiateLayerUpload",
"ecr:UploadLayerPart",
"ecr:CompleteLayerUpload",
"ecr:DescribeRepositories",
"ecr:GetRepositoryPolicy",
"ecr:ListImages",
"ecr:DeleteRepository",
"ecr:BatchDeleteImage",
"ecr:SetRepositoryPolicy",
"ecr:DeleteRepositoryPolicy",
]
}
}
resource "aws_ecr_repository_policy" "optar" {
repository = aws_ecr_repository.optar.name
policy = data.aws_iam_policy_document.optar.json
}
resource "aws_ecr_lifecycle_policy" "optar_lifecycle" {
repository = aws_ecr_repository.optar.name
policy = <<EOF
{
"rules": [
{
"rulePriority": 1,
"description": "Keep last 30 images",
"selection": {
"tagStatus": "tagged",
"tagPrefixList": ["v0"],
"countType": "imageCountMoreThan",
"countNumber": 30
},
"action": {
"type": "expire"
}
}
]
}
EOF
}