Terraform
AWS CodeCommit

Terraform para criação dos repositórios CodeCommit e das credenciais git para os repositórios.

Criação dos repositórios

codecommit-repo.tf
resource "aws_codecommit_repository" "build" {
  repository_name = var.build_repository_name
  description     = "Repository for model build pipeline"
}

resource "aws_codecommit_repository" "deploy" {
  repository_name = var.deploy_repository_name
  description     = "Repository for model deploy pipeline"
}

Neste arquivo, são criados os dois repositórios, utilizando os nomes definidos em variables.tf.

Criação do usuário, permissões e credenciais

iam.tf
resource "aws_iam_user" "mirror_user" {
  name = "GitToCodeCommitSyncUser"
}

# Use service specific user_name to mirror to CodeCommit
resource "aws_iam_service_specific_credential" "git_credentials" {
  service_name = "codecommit.amazonaws.com"
  user_name    = aws_iam_user.mirror_user.name
}

# IAM GROUP
resource "aws_iam_group" "mirror_group" {
  name = "GitToCodeCommitSyncGroup"
}

# AWS MANAGED IAM POLICY
data "aws_iam_policy" "aws_poweruser_codecommit" {
  arn = "arn:aws:iam::aws:policy/AWSCodeCommitPowerUser"
}

# Policy attachment
resource "aws_iam_group_policy_attachment" "policy_attachment" {
  group      = aws_iam_group.mirror_group.name
  policy_arn = data.aws_iam_policy.aws_poweruser_codecommit.arn
}

# User membership to IAM Group
resource "aws_iam_group_membership" "user_membership" {
  name = "codecommit_poweruser_membership"
  users = [
    aws_iam_user.mirror_user.name
  ]

  group = aws_iam_group.mirror_group.name
}

Neste código terraform, definimos um usuário IAM, um grupo e suas permissões para criação e uso dos repositórios CodeCommit, a partir dele geramos as credenciais git para fazer o mirror push para o git lab.

Output das credenciais e da url no terminal

outputs.tf
output "mirror_url_build" {
  value = "https://${aws_iam_service_specific_credential.git_credentials.service_user_name}@git-codecommit.${var.region}.amazonaws.com/v1/repos/${aws_codecommit_repository.build.repository_name}"
}

output "mirror_url_deploy" {
  value = "https://${aws_iam_service_specific_credential.git_credentials.service_user_name}@git-codecommit.${var.region}.amazonaws.com/v1/repos/${aws_codecommit_repository.deploy.repository_name}"
}

output "mirror_git_password" {
  value = aws_iam_service_specific_credential.git_credentials.service_password
  sensitive = true
}

Nesta parte é feito apenas o output das urls para mirror push no gitlab no terminal, assim como a senha a ser utilizada no mirror.