ECRSampel Amazon untuk CodeBuild - AWS CodeBuild

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

ECRSampel Amazon untuk CodeBuild

Contoh ini menggunakan image Docker di repositori image Amazon Elastic Container Registry (AmazonECR) 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 Amazon S3, harga, AWS Key Management Service harga Amazon, dan CloudWatch harga Amazon Elastic Container Registry.

Jalankan ECR sampel Amazon

Gunakan petunjuk berikut untuk menjalankan ECR sampel Amazon CodeBuild.

Untuk menjalankan sampel ini
  1. Untuk membuat dan mendorong gambar Docker ke repositori gambar Anda di AmazonECR, selesaikan langkah-langkah di Jalankan sampel 'Publikasikan gambar Docker ke ECR Amazon' bagian. Contoh 'Publikasikan gambar Docker ke ECR Amazon'

  2. Buat proyek Go:

    1. Buat file seperti yang dijelaskan di Pergi file proyek bagian Struktur proyek Go 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 ZIP file yang berisi file, lalu unggah ke bucket input. Jangan tambahkan (root directory name) ke ZIP file, hanya file di dalamnya(root directory name).

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

      Jika Anda menggunakan AWS CLI untuk membuat proyek build, input JSON -format 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" }
    3. Untuk mendapatkan artefak keluaran build, buka bucket keluaran S3 Anda.

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

  3. Jika salah satu dari berikut ini benar, Anda harus menambahkan izin ke repositori gambar Anda di Amazon ECR sehingga AWS CodeBuild dapat menarik gambar Docker-nya ke lingkungan build.

    • Proyek Anda menggunakan CodeBuild kredensi untuk menarik gambar AmazonECR. Ini dilambangkan dengan nilai CODEBUILD dalam imagePullCredentialsType atribut Anda. ProjectEnvironment

    • Proyek Anda menggunakan ECR gambar Amazon lintas akun. Dalam hal ini, proyek Anda harus menggunakan peran layanannya untuk menarik ECR gambar Amazon. Untuk mengaktifkan perilaku ini, setel imagePullCredentialsType atribut Anda ProjectEnvironment keSERVICE_ROLE.

    1. Buka ECR konsol Amazon di https://console.aws.amazon.com/ecr/.

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

    3. Dari panel navigasi, pilih Izin, pilih Edit, lalu pilih Tambah pernyataan.

    4. Untuk nama Pernyataan, masukkan pengenal (misalnya,CodeBuildAccess).

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

    6. Untuk Principal, lakukan salah satu hal berikut:

      • Jika proyek Anda menggunakan CodeBuild kredensi untuk menarik ECR gambar Amazon, di Prinsipal layanan, masukkan. codebuild.amazonaws.com

      • Jika proyek Anda menggunakan ECR gambar Amazon lintas akun, untuk AWS akun IDs, masukkan IDs AWS akun yang ingin Anda berikan akses.

    7. Lewati daftar Semua IAM entitas.

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

    9. Untuk Ketentuan, tambahkan yang berikut ini:

      { "StringEquals":{ "aws:SourceAccount":"<AWS-account-ID>", "aws:SourceArn":"arn:aws:codebuild:<region>:<AWS-account-ID>:project/<project-name>" } }
    10. 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 ECR gambar Amazon, "codebuild.amazonaws.com" muncul di bawah Prinsipal layanan.

      • Jika project Anda menggunakan ECR gambar Amazon 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 Amazon ECR lintas akun.

      { "Version":"2012-10-17", "Statement":[ { "Sid":"CodeBuildAccessPrincipal", "Effect":"Allow", "Principal":{ "Service":"codebuild.amazonaws.com" }, "Action":[ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ], "Condition":{ "StringEquals":{ "aws:SourceArn":"arn:aws:codebuild:<region>:<aws-account-id>:project/<project-name>", "aws:SourceAccount":"<aws-account-id>" } } }, { "Sid":"CodeBuildAccessCrossAccount", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::<AWS-account-ID>:root" }, "Action":[ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ] } ] }
      • Jika proyek Anda menggunakan CodeBuild kredensi dan Anda ingin CodeBuild proyek Anda memiliki akses terbuka ke ECR repositori Amazon, Anda dapat menghilangkan Condition kunci dan menambahkan kebijakan contoh berikut.

      { "Version":"2012-10-17", "Statement":[ { "Sid":"CodeBuildAccessPrincipal", "Effect":"Allow", "Principal":{ "Service":"codebuild.amazonaws.com" }, "Action":[ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ] }, { "Sid":"CodeBuildAccessCrossAccount", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::<AWS-account-ID>:root" }, "Action":[ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ] } ] }
  4. Buat proyek build, jalankan build, dan lihat informasi build.

    Jika Anda menggunakan AWS CLI untuk membuat proyek build, input JSON -format 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" }
  5. Untuk mendapatkan artefak keluaran build, buka bucket keluaran S3 Anda.

  6. 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

Sampel ini mengasumsikan struktur direktori ini.

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

Pergi file proyek

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) }