Blog
Erstellen und Initialisieren von CodeCommit-Repositories mit Terraform

In der heutigen schnelllebigen digitalen Landschaft sind eine effiziente Zusammenarbeit und eine sichere Versionskontrolle für jedes Softwareentwicklungsprojekt unerlässlich. Mit AWS CodeCommit steht Entwicklern und Cloud-Ingenieuren eine robuste und skalierbare Lösung für das Hosting sicherer Git-Repositorys zur Verfügung, die nahtlos in ihre AWS-Umgebungen integriert ist oder sich in deren Nähe befindet.
Das Erstellen eines Repositorys in AWS CodeCommit ist kein schwieriger Prozess. Dies kann entweder in der Konsole oder im Code erfolgen. Wenn Sie Code verwenden, können Sie die Erstellung des CodeCommit-Repositorys standardisieren und zusätzliche Aufgaben rund um das Repository durchführen. Ein Beispiel hierfür wäre die anfängliche Synchronisierung von Dateien mit neu erstellten Repositorys. Dies kann mehrere Anwendungsfälle erleichtern. Ein Beispiel ist die anfängliche Synchronisierung von lizenzspezifischen Dateien mit dem Repository,
Wie können wir dies also erreichen? Wir werden dies im Folgenden anhand eines Terraform-Beispielcodes veranschaulichen.
Lösung
Zunächst müssen wir ein neues AWS CodeCommit-Repository erstellen.
resource "aws_codecommit_repository" "repository" {
repository_name = var.repository_name
description = "In bulk created repositories"
}
Dann müssen wir einen Benutzer anlegen, der von der Pipeline verwendet wird, die den Terraform-Code bereitstellt. Die Dateien, die normalerweise in der Pipeline verfügbar sind, werden mit Git mit dem neu erstellten Repository synchronisiert. Unten sehen Sie einen Benutzer, eine Richtlinie und die Verknüpfung der Richtlinie mit dem Benutzer. Wenn die zum Erstellen des Repositorys verwendeten Anmeldeinformationen Git-Pull- und Push-Aktionen durchführen können, kann dieser Schritt übersprungen werden. Stattdessen können wir im letzten Schritt die vorhandenen Anmeldeinformationen verwenden.
resource "aws_iam_user" "pipeline_codecommit_user" {
name = "codecommit_user"
}
resource "aws_iam_policy" "codecommit_pullpush_policy" {
name = "codecommit_pullpush"
path = "/"
description = "CodeCommit policy for the pipeline_codecommit_user used by a CI/CD pipeline"
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = [
"codecommit:GitPull",
"codecommit:GitPush"
]
Effect = "Allow"
Resource = aws_codecommit_repository.repository.arn
},
]
})
}
resource "aws_iam_user_policy_attachment" "codecommit_policy_attachment" {
user = aws_iam_user.pipeline_codecommit_user.name
policy_arn = aws_iam_policy.codecommit_pullpush_policy.arn
}
Anschließend müssen wir einen Zugriffsschlüssel für den oben genannten Benutzer erstellen. Dieser Schlüssel wird in den nächsten Schritten für die Synchronisierung der Dateien verwendet.
resource "aws_iam_access_key" "pipeline_codecommit_user" {
user = aws_iam_user.pipeline_codecommit_user.name
}
Bitte beachten Sie, dass bei Verwendung des obigen Schnipsels der generierte Zugriffsschlüssel und der geheime Zugriffsschlüssel als Klartext in der Statusdatei verfügbar sind, unabhängig davon, ob diese lokal oder remote ist. Es gibt Möglichkeiten, sie mit einem pgp-Schlüssel zu verschlüsseln, aber das würde den Rahmen dieses Beitrags sprengen.
Schließlich können wir den local-exec provisioner verwenden, um Dateien mit dem entfernten Git-Repository zu synchronisieren. Unter der Annahme, dass die Dateien in einem lokalen Ordner mit dem Namen repo-init verfügbar sind, finden Sie den Code, mit dem die Dateien synchronisiert werden, unten.
resource "null_resource" "git_clone" {
provisioner "local-exec" {
command = <<EOT
export AWS_ACCESS_KEY_ID=${aws_iam_access_key.pipeline_codecommit_user.id}
export AWS_SECRET_ACCESS_KEY=${aws_iam_access_key.pipeline_codecommit_user.secret}
git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.UseHttpPath true
git clone ${aws_codecommit_repository.repository.clone_url_http} ../temp-location
cp -r repo-init/**/* ../temp-location
cd ../temp-location
git add . && git commit -am "Initial commit" && git push origin main
rm -rf ../temp-location
EOT
}
}
Fazit
Zusammenfassend lässt sich sagen, dass AWS CodeCommit eine robuste Lösung für die Versionskontrolle ist. Diese Lösung kann durch Automatisierungsfunktionen wie die Synchronisierung von Dateien bei der Erstellung ergänzt werden.
Hauptbild von Freepik
Verfasst von
Konstantinos Bessas
Unsere Ideen
Weitere Blogs
Contact



