Blog

Erstellen und Initialisieren von CodeCommit-Repositories mit Terraform

Konstantinos Bessas

Aktualisiert Oktober 15, 2025
3 Minuten

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, Dateien, die auf die Anforderungen des Unternehmens zugeschnitten sind, oder eine strukturierte Einrichtung, wenn dies angemessen ist. Es könnte auch praktisch sein, wenn mehrere Dateien zunächst mit einem neu erstellten AWS CodeCommit-Repository aus einer Landing-Zone-spezifischen Lösung über eine Verkaufslösung für Konten synchronisiert werden müssen.

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

Contact

Let’s discuss how we can support your journey.