

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Amazon ECR-Beispiel für CodeBuild
<a name="sample-ecr"></a>

In diesem Beispiel wird ein Docker-Image in einem Image-Repository von Amazon Elastic Container Registry (Amazon ECR) verwendet, um ein Go-Beispielprojekt zu erstellen.

**Wichtig**  
Die Ausführung dieses Beispiels kann dazu führen, dass Ihr AWS Konto belastet wird. Dazu gehören mögliche Gebühren für AWS CodeBuild und für AWS Ressourcen und Aktionen im Zusammenhang mit Amazon S3 AWS KMS, CloudWatch Logs und Amazon ECR. Weitere Informationen finden Sie unter [CodeBuild Preise](https://aws.amazon.com/codebuild/pricing), [Amazon S3 S3-Preise](https://aws.amazon.com/s3/pricing), [AWS Key Management Service Preise](https://aws.amazon.com/kms/pricing), [ CloudWatch Amazon-Preise](https://aws.amazon.com/cloudwatch/pricing) und [Amazon Elastic Container Registry — Preise](https://aws.amazon.com/ecr/pricing).

**Topics**
+ [Führen Sie das Amazon ECR-Beispiel aus](#sample-ecr-running)

## Führen Sie das Amazon ECR-Beispiel aus
<a name="sample-ecr-running"></a>

Verwenden Sie die folgenden Anweisungen, um das Amazon ECR-Beispiel für CodeBuild auszuführen.

**So führen Sie das Beispiel aus**

1. Um das Docker-Image zu erstellen und in Ihr Image-Repository in Amazon ECR zu übertragen, führen Sie die Schritte im [Führen Sie das Beispiel „Docker-Image in Amazon ECR veröffentlichen“ aus](sample-docker.md#sample-docker-running) Abschnitt der aus. [Beispiel für „Docker-Image auf Amazon ECR veröffentlichen“](sample-docker.md)

1. Erstellen eines Go-Projekts: 

   1. Erstellen Sie die Dateien wie in den [Go-Projektdateien](#sample-ecr-go-project-files) Abschnitten [Go-Projektstruktur](#ecr-sample-go-project-file-structure) und in diesem Thema beschrieben und laden Sie sie dann in einen S3-Eingabe-Bucket oder ein AWS CodeCommit, GitHub, oder Bitbucket-Repository hoch. 
**Wichtig**  
Laden Sie nicht `(root directory name)` hoch, sondern nur die Dateien in `(root directory name)`.   
Wenn Sie einen S3-Empfangs-Bucket verwenden, sollten Sie eine ZIP-Datei erstellen, die die Dateien enthält, und diese dann in den Empfangs-Bucket hochladen. Fügen Sie `(root directory name)` nicht zur ZIP-Datei hinzu, sondern nur die Dateien in `(root directory name)`.

   1. Erstelle ein Build-Projekt, führe den Build aus und sieh dir die zugehörigen Build-Informationen an.

      Wenn Sie das AWS CLI Build-Projekt mit erstellen, sieht die Eingabe des `create-project` Befehls im JSON-Format möglicherweise ähnlich aus. (Ersetzen Sie die Platzhalter durch Ihre eigenen Werte.)

      ```
      {
        "name": "sample-go-project",
        "source": {
          "type": "S3",
          "location": "codebuild-region-ID-account-ID-input-bucket/GoSample.zip"
        },
        "artifacts": {
          "type": "S3",
          "location": "codebuild-region-ID-account-ID-output-bucket",
          "packaging": "ZIP",
          "name": "GoOutputArtifact.zip"
        },
        "environment": {
          "type": "LINUX_CONTAINER",
          "image": "aws/codebuild/standard:5.0",
          "computeType": "BUILD_GENERAL1_SMALL"
        },
        "serviceRole": "arn:aws:iam::account-ID:role/role-name",
        "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
      }
      ```

   1. Zum Abrufen des Build-Ausgabeartefakts, öffnen Sie Ihren S3-Ausgabe-Bucket.

   1. Laden Sie die Datei `GoOutputArtifact.zip` auf Ihren lokalen Computer oder Ihre lokale Instance herunter. Extrahieren Sie anschließend den Inhalt der Datei . Rufen Sie im extrahierten Inhalt die Datei `hello` auf. 

1.  Wenn eine der folgenden Bedingungen zutrifft, müssen Sie Ihrem Image-Repository in Amazon ECR Berechtigungen hinzufügen, damit das zugehörige Docker-Image in die Build-Umgebung abgerufen werden AWS CodeBuild kann. 
   +  Ihr Projekt verwendet CodeBuild Anmeldeinformationen, um Amazon ECR-Bilder abzurufen. Dies wird durch den Wert von `CODEBUILD` im Attribut `imagePullCredentialsType` Ihrer `ProjectEnvironment` angezeigt. 
   +  Ihr Projekt verwendet ein kontoübergreifendes Amazon ECR-Image. In diesem Fall muss Ihr Projekt seine Servicerolle verwenden, um Amazon ECR-Images abzurufen. Um dieses Verhalten zu aktivieren, setzen Sie das Attribut `imagePullCredentialsType` Ihrer `ProjectEnvironment` auf `SERVICE_ROLE`. 

   1. Öffnen Sie die Amazon ECR-Konsole unter [https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/).

   1. Klicken Sie in der Liste der Repository-Namen den Namen des Repositories aus, das Sie erstellt oder ausgewählt haben.

   1. Wählen Sie im Navigationsbereich **Permissions (Berechtigungen)** und dann **Edit (Bearbeiten)** aus. Klicken Sie anschließend auf **Add statement (Anweisung hinzufügen)**.

   1. Geben Sie in **Statement name** einen Bezeichner (z. B. **CodeBuildAccess**) ein.

   1. Für **Effect (Effekt)** lassen Sie **Allow (Zulassen)** ausgewählt. Dies zeigt an, dass Sie den Zugriff auf ein anderes AWS -Konto zulassen möchten.

   1. Wählen Sie für **Principal (Prinzipal)** eine der folgenden Vorgehensweisen:
      + Wenn Ihr Projekt CodeBuild Anmeldeinformationen verwendet, um ein Amazon ECR-Image abzurufen, geben **codebuild.amazonaws.com** Sie im Feld **Service Principal** den folgenden Wert ein. 
      + Wenn Ihr Projekt ein IDs kontoübergreifendes Amazon ECR-Image verwendet IDs, geben Sie **AWS unter Konto** die AWS Konten ein, denen Sie Zugriff gewähren möchten.

   1. Überspringen Sie die Liste **All IAM entities**.

   1. **Wählen Sie **unter Aktion** die Aktionen, die nur abgerufen werden können: ecr:GetDownloadUrlForLayer, **ecr:** und **ecr**: aus. BatchGetImage BatchCheckLayerAvailability**

   1. Fügen Sie **unter Bedingungen Folgendes hinzu**:

      ```
      {
         "StringEquals":{
            "aws:SourceAccount":"<AWS-account-ID>",
            "aws:SourceArn":"arn:aws:codebuild:<region>:<AWS-account-ID>:project/<project-name>"
         }
      }
      ```

   1. Wählen Sie **Speichern**.

      Diese Richtlinie wird in **Permissions (Berechtigungen)** angezeigt. Der Prinzipal entspricht dem, was Sie in Schritt 3 dieses Verfahrens für **Principal (Prinzipal)** eingegeben haben:
      + Wenn Ihr Projekt CodeBuild Anmeldeinformationen verwendet, um ein Amazon ECR-Image abzurufen, `"codebuild.amazonaws.com"` wird es unter **Service Principals** angezeigt.
      + **Wenn Ihr Projekt ein kontoübergreifendes Amazon ECR-Image verwendet, wird die ID des AWS Kontos, dem Sie Zugriff gewähren möchten, unter AWS Konto angezeigt. IDs**

        Die folgende Beispielrichtlinie verwendet sowohl CodeBuild Anmeldeinformationen als auch ein kontoübergreifendes Amazon ECR-Image.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "CodeBuildAccessPrincipal",
                  "Effect": "Allow",
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ],
                  "Resource": "*",
                  "Condition": {
                      "StringEquals": {
                          "aws:SourceArn": "arn:aws:codebuild:us-east-1:111122223333:project/MyProject",
                          "aws:SourceAccount": "111122223333"
                      }
                  }
              },
              {
                  "Sid": "CodeBuildAccessCrossAccount",
                  "Effect": "Allow",
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ],
                  "Resource": "*"
              }
          ]
      }
      ```

------
      + Wenn Ihre Projekte CodeBuild Anmeldeinformationen verwenden und Sie möchten, dass Ihre CodeBuild Projekte offenen Zugriff auf das Amazon ECR-Repository haben, können Sie die `Condition` Schlüssel weglassen und die folgende Beispielrichtlinie hinzufügen.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "CodeBuildAccessPrincipal",
                  "Effect": "Allow",
                  "Resource": [
                      "arn:aws:codecommit:us-east-2:111122223333:MySharedDemoRepo"
                  ],
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ]
              },
              {
                  "Sid": "CodeBuildAccessCrossAccount",
                  "Effect": "Allow",
                  "Resource": [
                      "arn:aws:codecommit:us-east-2:111122223333:MySharedDemoRepo"
                  ],
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ]
              }
          ]
      }
      ```

------

1. Erstellen Sie ein Build-Projekt, führen Sie den Build aus und sehen Sie sich die Build-Informationen an.

   Wenn Sie das AWS CLI Build-Projekt mit erstellen, sieht die Eingabe des `create-project` Befehls im JSON-Format möglicherweise ähnlich aus. (Ersetzen Sie die Platzhalter durch Ihre eigenen Werte.)

   ```
   {
     "name": "amazon-ecr-sample-project",
     "source": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-input-bucket/GoSample.zip"
     },
     "artifacts": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-output-bucket",
       "packaging": "ZIP",
       "name": "GoOutputArtifact.zip"
     },
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "account-ID.dkr.ecr.region-ID.amazonaws.com/your-Amazon-ECR-repo-name:tag",
       "computeType": "BUILD_GENERAL1_SMALL"
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name",
     "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
   }
   ```

1. Zum Abrufen des Build-Ausgabeartefakts, öffnen Sie Ihren S3-Ausgabe-Bucket.

1. Laden Sie die Datei `GoOutputArtifact.zip` auf Ihren lokalen Computer oder Ihre lokale Instance herunter. Extrahieren Sie anschließend den Inhalt der Datei `GoOutputArtifact.zip`. Rufen Sie im extrahierten Inhalt die Datei `hello` auf.

### Go-Projektstruktur
<a name="ecr-sample-go-project-file-structure"></a>

In diesem Beispiel wird von dieser Verzeichnisstruktur ausgegangen.

```
(root directory name)
├── buildspec.yml
└── hello.go
```

### Go-Projektdateien
<a name="sample-ecr-go-project-files"></a>

In diesem Beispiel werden diese Dateien verwendet.

`buildspec.yml` (in `(root directory name)`)

```
version: 0.2

phases:
  install: 
   runtime-versions: 
     golang: 1.13 
  build:
    commands:
      - echo Build started on `date`
      - echo Compiling the Go code
      - go build hello.go 
  post_build:
    commands:
      - echo Build completed on `date`
artifacts:
  files:
    - hello
```

`hello.go` (in `(root directory name)`)

```
package main
import "fmt"

func main() {
  fmt.Println("hello world")
  fmt.Println("1+1 =", 1+1)
  fmt.Println("7.0/3.0 =", 7.0/3.0)
  fmt.Println(true && false)
  fmt.Println(true || false)
  fmt.Println(!true)
}
```