Setup CodePipeline - Langkah Deploy berstatus gagal

Oct 01 2020

Saat menyiapkan CodeDeploy mengikuti tutorial ini , di bawah langkah terakhir Setup CodePipeline

Jika saya mengklik Rincian di bawah Gagal

Jika saya mengklik Tautan ke detail eksekusi

Penerapan gagal karena tidak ada contoh yang ditemukan untuk grup penerapan Anda. Periksa pengaturan grup penerapan Anda untuk memastikan tag untuk instans Amazon EC2 atau grup Penskalaan Otomatis Anda dengan benar mengidentifikasi instans yang ingin Anda terapkan, lalu coba lagi.

Hal ini kemungkinan besar karena masalah di lokasi - terkadang digunakan Virginia Utara dan di lain waktu London.

  • IAM - tidak memerlukan pemilihan wilayah.
  • S3 - tidak memerlukan pemilihan wilayah.
  • Instance LightSail - London, Zona A (eu-west-2a)
  • Aplikasi CodeDeploy - N. Virginia (us-east-1)
  • Pipa CodeDeploy - London, Zona A (eu-west-2a)

Jadi, saya pergi ke CodeDeploy, menghapus aplikasi di N. Virginia dan membuatnya dengan grup penerapannya di London. Kemudian, buat pipeline baru di sana di London.

Penerapan kali ini juga gagal, tetapi dengan alasan yang berbeda

Penerapan keseluruhan gagal karena terlalu banyak instance individu yang gagal dalam penerapan, terlalu sedikit instance yang sehat yang tersedia untuk penerapan, atau beberapa instance dalam grup penerapan Anda mengalami masalah.

Untuk memperbaikinya, saya telah menghapus kedua pipeline dan membuat yang baru. Karena saya harus mengubah peran, saya menggunakan AWSCodePipelineServiceRole-eu-west-2-CodeDeployLightsailDemoPipelinetetapi ini membuat saya mengalami masalah pada saat Membuat pipa

Tidak dapat membuat peran AWSCodePipelineServiceRole-eu-west-2-CodeDeployLightsailDemoPipeline

Jadi, saya mengubahnya menjadi AWSCodePipelineServiceRole-eu-west-2-CodeDeployLightsailDemoP. Lalu, ini membawa saya ke masalah lain

Kebijakan yang disebut AWSCodePipelineServiceRole-eu-west-2-CodeDeployLightsailDemoPipeline sudah ada. Nama duplikat tidak diperbolehkan.

Jadi, saya kembali dan mengubah nama Pipeline menjadi CodeDeployLightsailDemoPidan nama Peran menjadi AWSCodePipelineServiceRole-eu-west-2-CodeDeployLightsailDemoPi.

Ini membuat saya menjadi sama

Penerapan keseluruhan gagal karena terlalu banyak instance individu yang gagal dalam penerapan, terlalu sedikit instance yang sehat yang tersedia untuk penerapan, atau beberapa instance dalam grup penerapan Anda mengalami masalah.

Saya memutuskan untuk menunggu 30 menit dan membuat pipeline baru, memberinya nama CodeDeployLightsailPipelinedan nama peran, AWSCodePipelineServiceRole-eu-west-2-CodeDeployLightsailPipelintetapi masalah yang sama terjadi.

Inilah yang disajikan oleh informasi di Deployment ID> Lihat peristiwa

Menurut Marcin , saya seharusnya menemukan appspec.yml

version: 0.0
os: linux
files:
  - source: /index.html
    destination: /var/www/html/
hooks:
  BeforeInstall:
    - location: scripts/install_dependencies
      timeout: 300
      runas: root
    - location: scripts/start_server
      timeout: 300
      runas: root
  ApplicationStop:
    - location: scripts/stop_server
      timeout: 300
      runas: root

Di dalamnya disebutkan destination: /var/www/html/tetapi dalam contoh tidak ada /var/www/htmljalan seperti itu

Jadi, saya telah membuat dua folder ini di dalamnya

dan memulai kembali penerapan

tapi gagal seperti sebelumnya.

Bagaimana cara agar status Deploy berhasil?


Edit

Menurut dokumentasi , kode kesalahan ini menunjukkan HEALTH_CONSTRAINTS . Jadi, saya sekarang membaca:

  • Instance Health
  • Pecahkan masalah instance
  • Pecahkan Masalah Penerapan EC2 / Lokal

Jawaban

1 Marcin Oct 02 2020 at 08:50

Berdasarkan komentar:

Dalam upaya untuk mereproduksi masalah, saya menerapkan aplikasi CodeDeployGitHubDemo yang digunakan oleh OP pada instans Amazon Linux 2 saya sendiri dengan CodeDeploy. Saya dapat memverifikasi bahwa CodeDeployGitHubDemodan appspec.ymlfile-nya benar dan berfungsi seperti yang diharapkan.

Karena OP menggunakan CodePipline (CP), disarankan untuk mundur selangkah dan fokus pada penerapan hanya menggunakan CodeDeploy (CD), tanpa menambahkan kerumitan menggunakan kombinasi CP + CD. Hal ini memungkinkan untuk fokus hanya pada masalah CD dan harus menyederhanakan menemukan akar penyebab masalah. Setelah penyebaran CD mandiri berfungsi, langkah selanjutnya adalah bekerja untuk menggabungkan CP dalam proses penyebaran, mengetahui persis bagaimana CD harus diatur agar berfungsi.


Lebih khusus lagi, inilah yang telah dilakukan

  1. Di konsol IAM di https://console.aws.amazon.com/iam/

    1.1. Menghapus satu peran (CodeDeployServiceRole).

    1.2. Menciptakan peran layanan.

  2. Di konsol S3 di https://console.aws.amazon.com/s3/

    2.1. Mengosongkan dan menghapus satu keranjang (tiagocodedeploylightsailbucket).

    2.2. Membuat ember baru di EU London (eu-west-2).

  3. Kembali ke konsol IAM di https://console.aws.amazon.com/iam/

    3.1. Menghapus satu kebijakan (CodeDeployS3BucketPolicy).

    3.2. Membuat kebijakan baru.

  4. Tetap di konsol IAM di https://console.aws.amazon.com/iam/

    4.1. Hapus satu pengguna (LightSailCodeDeployUser)

    4.2. Membuat pengguna baru (Perhatikan bahwa ia harus memiliki nama yang berbeda atau akan mendapatkan masalah ini ).

  5. Arahkan ke beranda Lightsail di https://lightsail.aws.amazon.com/

    5.1. Instance sebelumnya dihapus (codedeploy).

    5.2. Membuat satu instance baru dengan Amazon Linux (Amazon_Linux_1) (Perhatikan bahwa jika menggunakan Amazon Linux 2 maka akan mencapai masalah ini ),

menggunakan skrip

mkdir /etc/codedeploy-agent/

mkdir /etc/codedeploy-agent/conf

cat <<EOT >> /etc/codedeploy-agent/conf/codedeploy.onpremises.yml

---

aws_access_key_id: ACCESS_KEY

aws_secret_access_key: SECRET_KEY

iam_user_arn: arn:aws:iam::525221857828:user/GeneralUser

region: eu-west-2

EOT

wget https://aws-codedeploy-us-west-2.s3.us-west-2.amazonaws.com/latest/install

chmod +x ./install

sudo ./install auto
  1. SSH di kedua contoh

    6.1. Verifikasi apakah codedeploy-agent sedang berjalan ( sudo service codedeploy-agent status)

  2. Di PowerShell dengan AWS CLI di mesin lokal Anda

    7.1.

Lari

aws deploy register-on-premises-instance --instance-name Amazon_Linux_1 --iam-user-arn arn:aws:iam::525221857828:user/GeneralUser --region eu-west-2

Kemudian

aws deploy add-tags-to-on-premises-instances --instance-names Amazon_Linux_1 --tags Key=Name,Value=CodeDeployLightsailDemo --region eu-west-2

Kemudian

aws deploy list-on-premises-instances --region eu-west-2

Akhirnya didapat sebagai output

{
    "instanceNames": [
        "Amazon_Linux_1",
        "codedeploy"
    ]
}
  1. Arahkan ke konsol CodeDeploy di https://eu-west-2.console.aws.amazon.com/codesuite/codedeploy/start?region=eu-west-2#

    8.1. Hapus aplikasi (CodeDeployLightsailDemo).

    8.2. Buat aplikasi baru dengan grup penerapan baru (CodeDeployLightsailDemoDeploymentGroup).

  2. Arahkan ke konsol CodePipeline di https://eu-west-2.console.aws.amazon.com/codesuite/codepipeline/start?region=eu-west-2

    9.1. Hapus pipeline (CodeDeployLightsailDemoPipeline).

    9.2. Buat pipeline baru menggunakan "Peran layanan baru".