

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Sampel Amazon ECR untuk CodeBuild
<a name="sample-ecr"></a>

Contoh ini menggunakan image Docker di repositori image Amazon Elastic Container Registry (Amazon ECR) Registry ECR) untuk membuat proyek Go sampel.

**penting**  
Menjalankan sampel ini dapat mengakibatkan biaya ke AWS akun Anda. Ini termasuk kemungkinan biaya untuk AWS CodeBuild dan untuk AWS sumber daya dan tindakan yang terkait dengan Amazon S3,, CloudWatch Log AWS KMS, dan Amazon ECR. Untuk informasi selengkapnya, lihat [CodeBuild harga, harga](https://aws.amazon.com/codebuild/pricing) [Amazon S3, harga, [AWS Key Management Service harga](https://aws.amazon.com/kms/pricing)](https://aws.amazon.com/s3/pricing) Amazon, dan [ CloudWatch harga Amazon](https://aws.amazon.com/cloudwatch/pricing) [Elastic Container Registry](https://aws.amazon.com/ecr/pricing).

**Topics**
+ [Jalankan sampel Amazon ECR](#sample-ecr-running)

## Jalankan sampel Amazon ECR
<a name="sample-ecr-running"></a>

Gunakan petunjuk berikut untuk menjalankan sampel Amazon ECR. CodeBuild

**Untuk menjalankan sampel ini**

1. Untuk membuat dan mendorong gambar Docker ke repositori gambar Anda di Amazon ECR, selesaikan langkah-langkah di bagian[Jalankan sampel 'Publikasikan gambar Docker ke Amazon ECR'](sample-docker.md#sample-docker-running). [Sampel 'Publikasikan gambar Docker ke Amazon ECR'](sample-docker.md)

1. Buat proyek Go: 

   1. Buat file seperti yang dijelaskan di [Pergi file proyek](#sample-ecr-go-project-files) bagian [Struktur proyek Go](#ecr-sample-go-project-file-structure) dan topik ini, lalu unggah ke bucket input S3 atau repositori AWS CodeCommit GitHub, atau Bitbucket. 
**penting**  
Jangan mengunggah`(root directory name)`, hanya file di dalamnya`(root directory name)`.   
Jika Anda menggunakan bucket input S3, pastikan untuk membuat file ZIP yang berisi file, lalu unggah ke bucket input. Jangan tambahkan `(root directory name)` ke file ZIP, hanya file di dalamnya`(root directory name)`.

   1. Buat proyek build, jalankan build, dan lihat informasi build terkait.

      Jika Anda menggunakan AWS CLI untuk membuat proyek build, input berformat JSON ke `create-project` perintah mungkin terlihat mirip dengan ini. (Ganti placeholder dengan nilai Anda sendiri.)

      ```
      {
        "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. Untuk mendapatkan artefak keluaran build, buka bucket keluaran S3 Anda.

   1. Unduh `GoOutputArtifact.zip` file ke komputer atau instance lokal Anda, lalu ekstrak konten file tersebut. Dalam konten yang diekstraksi, dapatkan `hello` file. 

1.  Jika salah satu dari berikut ini benar, Anda harus menambahkan izin ke repositori gambar Anda di Amazon ECR sehingga AWS CodeBuild dapat menarik image Docker-nya ke lingkungan build. 
   +  Proyek Anda menggunakan CodeBuild kredensi untuk menarik gambar Amazon ECR. Ini dilambangkan dengan nilai `CODEBUILD` dalam `imagePullCredentialsType` atribut Anda. `ProjectEnvironment` 
   +  Proyek Anda menggunakan gambar ECR Amazon lintas akun. Dalam hal ini, proyek Anda harus menggunakan peran layanannya untuk menarik gambar Amazon ECR. Untuk mengaktifkan perilaku ini, setel `imagePullCredentialsType` atribut Anda `ProjectEnvironment` ke`SERVICE_ROLE`. 

   1. Buka konsol Amazon ECR di [https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/).

   1. Dalam daftar nama repositori, pilih nama repositori yang Anda buat atau pilih.

   1. Dari panel navigasi, pilih **Izin**, pilih **Edit**, lalu pilih **Tambah** pernyataan.

   1. Untuk **nama Pernyataan**, masukkan pengenal (misalnya,**CodeBuildAccess**).

   1. Untuk **Efek**, biarkan **Izinkan** dipilih. Ini menunjukkan bahwa Anda ingin mengizinkan akses ke AWS akun lain.

   1. Untuk **Principal**, lakukan salah satu hal berikut:
      + Jika project Anda menggunakan CodeBuild kredensi untuk menarik image Amazon ECR, di **Prinsipal layanan**, masukkan. **codebuild.amazonaws.com** 
      + Jika proyek Anda menggunakan gambar ECR Amazon lintas akun, untuk **AWS akun IDs**, masukkan IDs AWS akun yang ingin Anda berikan akses.

   1. Lewati daftar **Semua entitas IAM**.

   1. **Untuk **Tindakan**, pilih tindakan khusus tarik: ecr:, **ecr: GetDownloadUrlForLayer**, dan **ecr: BatchGetImage**. BatchCheckLayerAvailability**

   1. Untuk **Ketentuan**, tambahkan yang berikut ini:

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

   1. Pilih **Simpan**.

      Kebijakan ini ditampilkan di **Izin**. Kepala sekolah adalah apa yang Anda masukkan untuk **Principal** pada langkah 3 dari prosedur ini:
      + **Jika project Anda menggunakan CodeBuild kredensi untuk menarik image Amazon ECR, `"codebuild.amazonaws.com"` muncul di bawah Prinsipal layanan.**
      + **Jika project Anda menggunakan image Amazon ECR lintas akun, ID AWS akun yang ingin Anda berikan akses akan muncul di bawah AWS Akun. IDs**

        Kebijakan contoh berikut menggunakan CodeBuild kredensi dan gambar ECR Amazon lintas akun.

------
#### [ 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": "*"
              }
          ]
      }
      ```

------
      + Jika proyek Anda menggunakan CodeBuild kredensi dan Anda ingin CodeBuild proyek Anda memiliki akses terbuka ke repositori Amazon ECR, Anda dapat menghilangkan `Condition` kunci dan menambahkan kebijakan sampel berikut.

------
#### [ 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. Buat proyek build, jalankan build, dan lihat informasi build.

   Jika Anda menggunakan AWS CLI untuk membuat proyek build, input berformat JSON ke `create-project` perintah mungkin terlihat mirip dengan ini. (Ganti placeholder dengan nilai Anda sendiri.)

   ```
   {
     "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. Untuk mendapatkan artefak keluaran build, buka bucket keluaran S3 Anda.

1. Unduh `GoOutputArtifact.zip` file ke komputer atau instance lokal Anda, lalu ekstrak konten `GoOutputArtifact.zip` file tersebut. Dalam konten yang diekstraksi, dapatkan `hello` file.

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

Sampel ini mengasumsikan struktur direktori ini.

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

### Pergi file proyek
<a name="sample-ecr-go-project-files"></a>

Sampel ini menggunakan file-file ini.

`buildspec.yml`(dalam`(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`(dalam`(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)
}
```