Referensi model integrasi - AWS CodePipeline

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

Referensi model integrasi

Ada beberapa integrasi pra-dibangun untuk layanan pihak ketiga untuk membantu membangun alat pelanggan yang ada ke dalam proses rilis pipa. Mitra, atau penyedia layanan pihak ketiga, menggunakan model integrasi untuk menerapkan jenis tindakan untuk digunakan di CodePipeline.

Gunakan referensi ini ketika Anda merencanakan atau bekerja dengan jenis tindakan yang dikelola dengan model integrasi yang didukung di CodePipeline.

Untuk mengesahkan jenis tindakan pihak ketiga Anda sebagai integrasi mitra dengan CodePipeline, referensiAWSJaringan Mitra (APN). Informasi ini adalah suplemen untukAWS CLIReferensi.

Bagaimana jenis tindakan pihak ketiga bekerja dengan integrator

Anda dapat menambahkan jenis tindakan pihak ketiga ke saluran pipa pelanggan untuk menyelesaikan tugas pada sumber daya pelanggan. Integrator mengelola permintaan pekerjaan dan menjalankan tindakan dengan CodePipeline. Diagram berikut menunjukkan jenis tindakan pihak ketiga yang dibuat untuk digunakan pelanggan dalam pipa mereka. Setelah pelanggan mengkonfigurasi tindakan, tindakan berjalan dan menciptakan permintaan pekerjaan yang ditangani oleh mesin aksi integrator.

Diagram menunjukkan langkah-langkah berikut:

  1. Definisi tindakan terdaftar dan tersedia di CodePipeline. Tindakan pihak ketiga tersedia untuk pelanggan penyedia pihak ketiga.

  2. Pelanggan penyedia memilih dan mengkonfigurasi tindakan di CodePipeline.

  3. Tindakan berjalan dan pekerjaan yang antri di CodePipeline. Ketika pekerjaan siap di CodePipeline, ia mengirimkan permintaan pekerjaan.

  4. Integrator (pekerja kerja untuk API pemungutan suara pihak ketiga atau fungsi Lambda) mengambil permintaan pekerjaan, mengembalikan konfirmasi, dan bekerja pada artefak untuk tindakan tersebut.

  5. Integrator mengembalikan output keberhasilan/kegagalan (job worker menggunakan API keberhasilan/kegagalan atau fungsi Lambda mengirimkan output keberhasilan/kegagalan) dengan hasil pekerjaan dan token kelanjutan.

Untuk informasi tentang langkah-langkah yang dapat Anda gunakan untuk meminta, melihat, dan memperbarui jenis tindakan, lihatBekerja dengan jenis tindakan.

Konsep

Bagian ini menggunakan persyaratan berikut untuk tipe tindakan pihak ketiga:

Tipe tindakan

Proses berulang yang dapat digunakan kembali dalam jaringan pipa yang melakukan beban kerja pengiriman berkelanjutan yang sama. Jenis tindakan diidentifikasi olehOwner,Category,Provider, danVersion. Misalnya:

{ "Category": "Deploy", "Owner": "AWS", "Provider": "CodeDeploy", "Version": "1" },

Semua tindakan dari jenis yang sama berbagi implementasi yang sama.

Action

Sebuah contoh tunggal dari jenis tindakan, salah satu proses diskrit yang terjadi di dalam tahap pipa. Ini biasanya mencakup nilai-nilai pengguna khusus untuk pipa yang tindakan ini berjalan di.

Definisi tindakan

Skema untuk jenis tindakan yang mendefinisikan properti yang diperlukan untuk mengkonfigurasi aksi dan input/output artefak.

Eksekusi tindakan

Kumpulan pekerjaan yang telah dijalankan untuk menentukan apakah tindakan pada pipa pelanggan berhasil atau tidak.

Mesin eksekusi tindakan

Sebuah properti dari konfigurasi eksekusi tindakan yang mendefinisikan jenis integrasi yang digunakan oleh jenis tindakan. Nilai yang valid adalah JobWorker dan Lambda.

Integrasi

Menjelaskan sepotong perangkat lunak yang dijalankan oleh integrator untuk mengimplementasikan jenis tindakan. CodePipeline mendukung dua jenis integrasi yang sesuai dengan dua mesin tindakan yang didukungJobWorkerdanLambda.

Integrator

Orang yang memiliki pelaksanaan jenis tindakan.

Tugas

Sepotong pekerjaan dengan pipeline dan konteks pelanggan untuk mengeksekusi integrasi. Eksekusi tindakan terdiri dari satu atau beberapa pekerjaan.

Pekerja Job

Layanan yang memproses input pelanggan dan menjalankan pekerjaan.

Model integrasi yang didukung

CodePipeline memiliki dua model integrasi:

  • Model integrasi Lambda:Model integrasi ini adalah cara yang lebih diutamakan untuk menggunakan tipe aksi di CodePipeline. Model integrasi Lambda menggunakan fungsi Lambda untuk memproses permintaan pekerjaan saat tindakan Anda berjalan.

  • Model integrasi pekerja Job:Model integrasi pekerja kerja adalah model yang sebelumnya digunakan untuk integrasi pihak ketiga. Model integrasi job worker menggunakan job worker yang dikonfigurasi untuk menghubungi CodePipeline API untuk memproses permintaan pekerjaan saat tindakan Anda berjalan.

Sebagai perbandingan, tabel berikut menjelaskan fitur dari dua model:

Model integrasi Lambda Model integrasi pekerja Job
Deskripsi Integrator menulis integrasi sebagai fungsi Lambda, yang dipanggil oleh CodePipeline setiap kali ada pekerjaan yang tersedia untuk tindakan. Fungsi Lambda tidak melakukan polling untuk pekerjaan yang tersedia tetapi menunggu sampai permintaan pekerjaan berikutnya diterima. Integrator menulis integrasi sebagai pekerja kerja yang selalu melakukan polling untuk pekerjaan yang tersedia di jaringan pipa pelanggan. Pekerja kerja kemudian mengeksekusi pekerjaan dan mengirimkan hasil pekerjaan kembali ke CodePipeline dengan menggunakan CodePipeline API.
infrastruktur AWS Lambda Terapkan kode job worker ke infrastruktur integrator, seperti instans Amazon EC2.
Upaya pengembangan Integrasi hanya berisi logika bisnis. Integrasi perlu berinteraksi dengan CodePipeline API selain berisi logika bisnis.
Upaya ops Upaya ops yang lebih rendah karena infrastruktur hanyaAWSsumber daya. Upaya ops yang lebih tinggi karena pekerja kerja membutuhkan perangkat keras mandiri.
Max Job Run Waktu Jika integrasi perlu dijalankan secara aktif selama lebih dari 15 menit, model ini tidak dapat digunakan. Tindakan ini untuk integrator yang perlu memulai proses (misalnya, memulai membangun artefak kode pelanggan) dan mengembalikan hasilnya ketika selesai. Kami tidak menyarankan agar integrator terus menunggu build sampai selesai. Sebagai gantinya, kembalikankelanjutan. CodePipeline menciptakan pekerjaan baru dalam 30 detik lagi jika kelanjutan diterima dari kode integrator untuk memeriksa pekerjaan sampai selesai. Pekerjaan berjalan sangat lama (jam/hari) dapat dipertahankan dengan menggunakan model ini.

Model integrasi Lambda

Model integrasi Lambda yang didukung mencakup pembuatan fungsi Lambda dan mendefinisikan output untuk jenis tindakan pihak ketiga.

Perbarui fungsi Lambda Anda untuk menangani input dari CodePipeline

Anda dapat membuat fungsi Lambda baru. Anda dapat menambahkan logika bisnis ke fungsi Lambda yang dijalankan setiap kali ada pekerjaan yang tersedia di pipeline Anda untuk jenis tindakan Anda. Misalnya, mengingat konteks pelanggan dan pipa, Anda mungkin ingin memulai membangun layanan Anda untuk pelanggan.

Gunakan parameter berikut untuk memperbarui fungsi Lambda Anda untuk menangani input dari CodePipeline.

Format:

  • jobId:

    • ID pekerjaan yang dihasilkan sistem.

    • Jenis: String

    • Pola: [0-9a-f] {4} - [0-9a-f] {4} - [0-9a-f] {4} - [0-9a-f] {4} - [0-9a-f] {4} - [0-9a-f] {4} - [0-9a-f] {4

  • accountId:

    • ID pelangganAWSakun untuk digunakan saat melakukan pekerjaan.

    • Jenis: String

    • Pola: [0-9] {4}

  • data:

    • Informasi lain tentang pekerjaan yang digunakan integrasi untuk menyelesaikan pekerjaan.

    • Berisi peta berikut ini:

      • actionConfiguration:

        • Data konfigurasi untuk tindakan. Bidang konfigurasi tindakan adalah pemetaan pasangan kunci-nilai bagi pelanggan Anda untuk memasukkan nilai. Kunci ditentukan oleh parameter kunci dalam file definisi tipe tindakan saat Anda mengatur tindakan Anda. Dalam contoh ini, nilai-nilai ditentukan oleh pengguna tindakan menentukan informasi dalamUsernamedanPasswordbidang.

        • Jenis: Peta string, opsional

          Contoh:

          "configuration": { "Username": "MyUser", "Password": "MyPassword" },
      • encryptionKey:

        • Mewakili informasi tentang kunci yang digunakan untuk mengenkripsi data di penyimpanan artefak, sepertiAWS KMSkunci.

        • Daftar Isi: Jenis tipe dataencryptionKey, opsional hadir

      • inputArtifacts:

        • Daftar informasi tentang artefak yang akan dikerjakan, seperti artefak uji atau membangun.

        • Daftar Isi: Daftar tipe dataArtifact, opsional hadir

      • outputArtifacts:

        • Daftar informasi tentang output suatu tindakan.

        • Daftar Isi: Daftar tipe dataArtifact, opsional hadir

      • actionCredentials:

        • MerupakanAWSkredensi sesi objek. Kredensial-kredenal ini adalah kredensi sementara yang dikeluarkan olehAWS STS. Mereka dapat digunakan untuk mengakses artefak input dan output dalam bucket S3 yang digunakan untuk menyimpan artefak untuk pipa di CodePipeline.

          Kredensyal ini juga memiliki izin yang sama dengan template pernyataan kebijakan yang ditentukan dalam file definisi jenis tindakan.

        • Daftar Isi: Jenis tipe dataAWSSessionCredentials, opsional hadir

      • actionExecutionId:

        • ID eksternal dari tindakan.

        • Jenis: String

      • continuationToken:

        • Token yang dihasilkan sistem, seperti ID penyebaran, diperlukan oleh pekerjaan untuk melanjutkan pekerjaan secara asinkron.

        • Jenis: String, opsional hadir

Tipe Data:

  • encryptionKey:

    • id:

      • ID yang digunakan untuk mengidentifikasi kunci. UntukAWS KMSkunci, Anda dapat menggunakan ID kunci, atau alias ARN.

      • Jenis: String

    • type:

      • Tipe kunci enkripsi, sepertiAWS KMSkunci.

      • Jenis: String

      • Nilai yang valid: KMS

  • Artifact:

    • name:

      • Nama artefak.

      • Jenis: String, opsional hadir

    • revision:

      • ID revisi artefak. Tergantung pada jenis objek, ini bisa berupa commit ID (GitHub) atau ID revisi (Amazon S3).

      • Jenis: String, opsional hadir

    • location:

      • Lokasi artefak.

      • Daftar Isi: Jenis tipe dataArtifactLocation, opsional hadir

  • ArtifactLocation:

    • type:

      • Jenis artefak di lokasi.

      • Jenis: String, opsional hadir

      • Nilai yang valid: S3

    • s3Location:

      • Lokasi bucket S3 yang berisi revisi.

      • Daftar Isi: Jenis tipe dataS3Location, opsional hadir

  • S3Location:

    • bucketName:

      • Nama bucket S3.

      • Jenis: String

    • objectKey:

      • Kunci dari objek dalam bucket S3, yang secara unik mengidentifikasi objek tersebut dalam bucket.

      • Jenis: String

  • AWSSessionCredentials:

    • accessKeyId:

      • Kunci akses untuk sesi.

      • Jenis: String

    • secretAccessKey:

      • Secret access key untuk sesi.

      • Jenis: String

    • sessionToken:

      • Token untuk sesi.

      • Jenis: String

Contoh:

{ "jobId": "01234567-abcd-abcd-abcd-012345678910", "accountId": "012345678910", "data": { "actionConfiguration": { "key1": "value1", "key2": "value2" }, "encryptionKey": { "id": "123-abc", "type": "KMS" }, "inputArtifacts": [ { "name": "input-art-name", "location": { "type": "S3", "s3Location": { "bucketName": "inputBucket", "objectKey": "inputKey" } } } ], "outputArtifacts": [ { "name": "output-art-name", "location": { "type": "S3", "s3Location": { "bucketName": "outputBucket", "objectKey": "outputKey" } } } ], "actionExecutionId": "actionExecutionId", "actionCredentials": { "accessKeyId": "access-id", "secretAccessKey": "secret-id", "sessionToken": "session-id" }, "continuationToken": "continueId-xxyyzz" } }

Mengembalikan hasil dari fungsi Lambda Anda ke CodePipeline

Sumber kerja pekerja integrator harus mengembalikan muatan yang valid dalam kasus sukses, kegagalan, atau kelanjutan.

Format:

  • result: Hasil dari pekerjaan.

    • Diperlukan

    • Nilai yang valid (case insensitive):

      • Success: Menunjukkan pekerjaan berhasil dan terminal.

      • Continue: Menunjukkan pekerjaan berhasil dan harus dilanjutkan, misalnya jika pekerja kerja dipanggil kembali untuk eksekusi tindakan yang sama.

      • Fail: Menunjukkan pekerjaan gagal dan terminal.

  • failureType: Jenis kegagalan untuk dikaitkan dengan pekerjaan yang gagal.

    ParameterfailureTypekategori untuk tindakan mitra menjelaskan jenis kegagalan yang ditemui saat menjalankan pekerjaan. Integrator mengatur jenis bersama dengan pesan kegagalan ketika mengembalikan hasil kegagalan pekerjaan kembali ke CodePipeline.

    • Tidak wajib. Diperlukan jika hasilnyaFail.

    • Harus null jikaresultadalahSuccessatauContinue

    • Nilai yang valid:

      • ConfigurationError

      • JobFailed

      • PermissionsError

      • RevisionOutOfSync

      • RevisionTidak tersedia

      • SystemUnavailable

  • continuation: Negara kelanjutan yang akan diteruskan ke pekerjaan berikutnya dalam eksekusi tindakan saat ini.

    • Tidak wajib. Diperlukan jika hasilnyaContinue.

    • Harus null jikaresultadalahSuccessatauFail.

    • Properti:

      • State: Sebuah hash dari negara yang akan dilewatkan.

  • status: Status eksekusi tindakan.

    • Tidak wajib.

    • Properti:

      • ExternalExecutionId: ID eksekusi eksternal opsional atau ID komit untuk diasosiasikan dengan pekerjaan.

      • Summary: Ringkasan opsional dari apa yang terjadi. Dalam skenario kegagalan, ini menjadi pesan kegagalan yang dilihat pengguna.

  • outputVariables: Satu set pasangan kunci/nilai yang akan diteruskan ke eksekusi tindakan berikutnya.

    • Tidak wajib.

    • Harus null jikaresultadalahContinueatauFail.

Contoh:

{ "result": "success", "failureType": null, "continuation": null, "status": { "externalExecutionId": "my-commit-id-123", "summary": "everything is dandy" }, "outputVariables": { "FirstOne": "Nice", "SecondOne": "Nicest", ... } }

Gunakan token kelanjutan untuk menunggu hasil dari proses asinkron

Parametercontinuationtoken adalah bagian dari payload dan hasil dari fungsi Lambda Anda. Ini adalah cara untuk lulus negara pekerjaan ke CodePipeline dan menunjukkan bahwa pekerjaan perlu dilanjutkan. Misalnya, setelah integrator mulai membangun untuk pelanggan pada sumber daya mereka, itu tidak menunggu untuk membangun untuk menyelesaikan, tetapi menunjukkan CodePipeline bahwa itu tidak memilikiHasil terminal dengan mengembalikanresultsebagaicontinuedan mengembalikan ID unik build ke CodePipeline sebagaicontinuationtoken.

catatan

Fungsi Lambda hanya bisa berjalan hingga 15 menit. Jika pekerjaan perlu berjalan lebih lama, Anda dapat menggunakan token kelanjutan.

Tim CodePipeline memanggil integrator setelah 30 detik dengan yang samacontinuationtoken dalam muatannya sehingga dapat memeriksanya untuk selesai. Jika build selesai, integrator mengembalikan hasil keberhasilan terminal/gagal, yang lain terus.

Menyediakan CodePipeline izin untuk memanggil fungsi integrator Lambda pada saat runtime

Anda menambahkan izin ke fungsi Lambda integrator Anda untuk menyediakan layanan CodePipeline dengan izin untuk memanggilnya menggunakan prinsip layanan CodePipeline: codepipeline.amazonaws.com. Anda dapat menambahkan izin dengan menggunakanAWS CloudFormationatau baris perintah. Sebagai contoh, lihat Bekerja dengan jenis tindakan.

Model integrasi pekerja Job

Setelah Anda merancang alur kerja tingkat tinggi, Anda dapat membuat job worker Anda. Meskipun spesifik tindakan pihak ketiga menentukan apa yang dibutuhkan untuk pekerja kerja, sebagian besar pekerja kerja untuk tindakan pihak ketiga mencakup fungsionalitas berikut:

  • Polling untuk pekerjaan dari CodePipeline menggunakanPollForThirdPartyJobs.

  • Mengakui pekerjaan dan mengembalikan hasil ke CodePipeline menggunakanAcknowledgeThirdPartyJob,PutThirdPartyJobSuccessResult, danPutThirdPartyJobFailureResult.

  • Mengambil artefak dari dan/atau memasukkan artefak ke dalam bucket Amazon S3 untuk pipa. Untuk mengunduh artefak dari bucket Amazon S3, Anda harus membuat klien Amazon S3 yang menggunakan penandatanganan Signature Version 4 (Sig V4). Sig V4 diperlukan untukAWS KMS.

    Untuk mengunggah artefak ke bucket Amazon S3, Anda juga harus mengonfigurasi Amazon S3PutObjectmeminta untuk menggunakan enkripsi melaluiAWS Key Management Service(AWS KMS).AWS KMSmenggunakanAWS KMS keys. Untuk mengetahui apakah akan menggunakanKunci terkelola AWSatau kunci yang dikelola pelanggan untuk mengunggah artefak, pekerja kerja Anda harus melihatdata pekerjaandan periksakunci enkripsiproperti. Jika properti diatur, Anda harus menggunakan ID kunci yang dikelola pelanggan saat mengonfigurasiAWS KMS. Jika properti kunci adalah null, Anda menggunakanKunci terkelola AWS. CodePipeline menggunakanKunci terkelola AWSkecuali dikonfigurasi lain.

    Untuk contoh yang menunjukkan cara membuatAWS KMSparameter di Jawa atau NET, lihatMenentukanAWS Key Management Servicedi Amazon S3 MenggunakanAWSSDK. Untuk informasi selengkapnya tentang bucket Amazon S3 untuk CodePipeline, lihatKonsep CodePipeline.

Pilih dan konfigurasikan strategi manajemen izin untuk pekerja pekerjaan Anda

Untuk mengembangkan pekerja kerja untuk tindakan pihak ketiga Anda di CodePipeline, Anda memerlukan strategi untuk integrasi pengguna dan manajemen izin.

Strategi paling sederhana adalah menambahkan infrastruktur yang Anda butuhkan untuk pekerja kerja Anda dengan membuat instans Amazon EC2 denganAWS Identity and Access Management(IAM) peran instans, yang memungkinkan Anda untuk dengan mudah meningkatkan sumber daya yang Anda butuhkan untuk integrasi Anda. Anda dapat menggunakan integrasi bawaan denganAWSuntuk menyederhanakan interaksi antara job worker Anda dan CodePipeline.

Pelajari lebih lanjut tentang Amazon EC2 dan tentukan apakah itu pilihan yang tepat untuk integrasi Anda. Untuk informasi, lihatAmazon EC2 - Hosting Server Virtual. Untuk informasi tentang pengaturan instans Amazon EC2, lihatMemulai dengan Instans Linux Amazon EC2.

Strategi lain yang perlu dipertimbangkan adalah menggunakan federasi identitas dengan IAM untuk mengintegrasikan sistem dan sumber daya penyedia identitas Anda yang ada. Strategi ini berguna jika Anda sudah memiliki penyedia identitas perusahaan atau sudah dikonfigurasi untuk mendukung pengguna menggunakan penyedia identitas web. Federasi identitas memungkinkan Anda untuk memberikan akses yang aman keAWSsumber daya, termasuk CodePipeline, tanpa harus membuat atau mengelola pengguna IAM. Anda dapat menggunakan fitur dan kebijakan untuk persyaratan keamanan kata sandi dan rotasi kredenensial. Anda dapat menggunakan contoh aplikasi sebagai template untuk desain Anda sendiri. Untuk informasi, lihatKelola Federasi.

Untuk mengatur federasi identitas

  1. Meninjau contoh diSkenario untuk Memberikan Akses Sementarauntuk mengidentifikasi skenario untuk akses sementara yang paling sesuai dengan kebutuhan tindakan pihak ketiga Anda.

  2. Tinjau contoh kode federasi identitas yang relevan dengan infrastruktur Anda, seperti:

  3. Konfigurasi federasi identitas. Untuk informasi, lihatPenyedia Identitas dan FederasidiPanduan Pengguna IAM.

Strategi ketiga yang perlu dipertimbangkan adalah membuat pengguna IAM untuk digunakan di bawah AndaAWSakun saat menjalankan tindakan pihak ketiga dan pekerja kerja Anda.

Untuk informasi selengkapnya tentang praktik terbaik IAM dan kasus penggunaan, lihatPraktik Terbaik IAM.

Mengatur pengguna IAM

Berikut ini adalah contoh kebijakan yang mungkin Anda buat untuk digunakan dengan job worker pihak ketiga Anda. Kebijakan ini dimaksudkan sebagai contoh saja dan disediakan sebagaimana adanya.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:PollForThirdPartyJobs", "codepipeline:AcknowledgeThirdPartyJob", "codepipeline:GetThirdPartyJobDetails", "codepipeline:PutThirdPartyJobSuccessResult", "codepipeline:PutThirdPartyJobFailureResult" ], "Resource": [ "arn:aws:codepipeline:us-east-2::actionType:ThirdParty/Build/Provider/1/" ] } ] }