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.