Memecahkan masalah EC2/On-premise deployment - AWS CodeDeploy

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

Memecahkan masalah EC2/On-premise deployment

catatan

Penyebab banyak kegagalan penerapan dapat diidentifikasi dengan meninjau file log yang dibuat selama proses penyebaran. Untuk mempermudah, sebaiknya gunakan Amazon CloudWatch Logs untuk memonitor file log secara terpusat alih-alih melihatnya secara instance per instance. Untuk selengkapnya, lihat Melihat CodeDeploy Log di Konsol CloudWatch Log.

Tip

Untuk runbook yang mengotomatiskan banyak tugas pemecahan masalah yang terkait dengan penerapan EC2/On-premise, lihat - AWSSupportdi TroubleshootCodeDeploy referensi buku runbook Systems Manager Automation.AWS

CodeDeploy CommandPollerkesalahan kredensialnya hilang plugin

Jika Anda menerima kesalahan yang mirip denganInstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Missing credentials - please check if this instance was started with an IAM instance profile, itu mungkin disebabkan oleh salah satu dari berikut ini:

  • Instance yang Anda terapkan tidak memiliki profil instans IAM yang terkait dengannya.

  • Profil instans IAM Anda tidak memiliki izin yang benar yang dikonfigurasi.

Profil instans IAM memberikan izin CodeDeploy agen untuk berkomunikasi dengan CodeDeploy dan mengunduh revisi Anda dari Amazon S3. Untuk instans EC2, lihat. Identity and access management untuk AWS CodeDeploy Untuk instance lokal, lihat. Working with On-Premises Instances

Penerapan gagal dengan pesan “Validasi pesan yang ditandatangani PKCS7 gagal”

Pesan kesalahan ini menunjukkan instance menjalankan versi CodeDeploy agen yang hanya mendukung algoritma hash SHA-1. Support untuk algoritma hash SHA-2 diperkenalkan dalam versi 1.0.1.854 dari CodeDeploy agen, dirilis pada November 2015. Efektif 17 Oktober 2016, penerapan gagal jika versi CodeDeploy agen lebih awal dari 1.0.1.854 diinstal. Untuk informasi selengkapnya, lihat AWS untuk beralih ke algoritma hash SHA256 untuk Sertifikat SSL, PEMBERITAHUAN: Menghentikan agen CodeDeploy host yang lebih lama dari versi 1.0.1.85, dan. Perbarui CodeDeploy agen

Penerapan atau pemindahan file yang sama ke lokasi instance yang sama gagal dengan kesalahan “Penerapan gagal karena file tertentu sudah ada di lokasi ini”

Saat CodeDeploy mencoba menyebarkan file ke instance tetapi file dengan nama yang sama sudah ada di lokasi target yang ditentukan, penerapan ke instance itu mungkin gagal. Anda mungkin menerima pesan galat “Penerapan gagal karena file tertentu sudah ada di lokasi ini: nama lokasi.” Ini karena, selama setiap penerapan, CodeDeploy pertama-tama menghapus semua file dari penerapan sebelumnya, yang tercantum dalam file log pembersihan. Jika ada file di folder instalasi target yang tidak tercantum dalam file pembersihan ini, CodeDeploy agen secara default menafsirkan ini sebagai kesalahan dan gagal penerapan.

catatan

Pada instance Amazon Linux, RHEL, dan Ubuntu Server, file pembersihan terletak di. /opt/codedeploy-agent/deployment-root/deployment-instructions/ Pada instance Windows Server, lokasinya adalahC:\ProgramData\Amazon\CodeDeploy\deployment-instructions\.

Cara termudah untuk menghindari kesalahan ini adalah dengan menentukan opsi selain perilaku default untuk gagal penerapan. Untuk setiap penerapan, Anda dapat memilih apakah akan gagal penerapan, menimpa file yang tidak tercantum dalam file pembersihan, atau untuk menyimpan file yang sudah ada di instance.

Opsi overwrite berguna ketika, misalnya, Anda secara manual menempatkan file pada instance setelah penerapan terakhir, tetapi kemudian menambahkan file dengan nama yang sama ke revisi aplikasi berikutnya.

Anda dapat memilih opsi pertahankan untuk file yang Anda tempatkan pada instance yang Anda inginkan untuk menjadi bagian dari penerapan berikutnya tanpa harus menambahkannya ke paket revisi aplikasi. Opsi pertahankan juga berguna jika file aplikasi Anda sudah ada di lingkungan produksi Anda dan Anda ingin menggunakan CodeDeploy untuk pertama kalinya. Untuk informasi selengkapnya, lihat Membuat penerapan Platform Komputasi EC2/Lokal (konsol) dan Perilaku rollback dengan konten yang ada.

Memecahkan masalah kesalahan penerapan The deployment failed because a specified file already exists at this location

Jika Anda memilih untuk tidak menentukan opsi untuk menimpa atau mempertahankan konten yang CodeDeploy mendeteksi di lokasi penyebaran target Anda (atau jika Anda tidak menentukan opsi penerapan apa pun untuk menangani konten yang ada dalam perintah terprogram), Anda dapat memilih untuk memecahkan masalah kesalahan.

Informasi berikut hanya berlaku jika Anda memilih untuk tidak menyimpan atau menimpa konten.

Jika Anda mencoba menerapkan ulang file dengan nama dan lokasi yang sama, pemindahan akan lebih mungkin berhasil jika Anda menentukan nama aplikasi dan grup penyebaran dengan ID grup penyebaran dasar yang sama yang Anda gunakan sebelumnya. CodeDeploy menggunakan ID grup penyebaran yang mendasari untuk mengidentifikasi file yang akan dihapus sebelum pemindahan.

Menyebarkan file baru atau memindahkan file yang sama ke lokasi yang sama pada instance dapat gagal karena alasan berikut:

  • Anda menetapkan nama aplikasi yang berbeda untuk pemindahan revisi yang sama ke instance yang sama. Penerapan ulang gagal karena meskipun nama grup penyebaran sama, penggunaan nama aplikasi yang berbeda berarti ID grup penyebaran dasar yang berbeda sedang digunakan.

  • Anda menghapus dan membuat ulang grup penyebaran untuk aplikasi dan kemudian mencoba menerapkan revisi yang sama ke grup penerapan. Penerapan ulang gagal karena meskipun nama grup penerapan sama, CodeDeploy mereferensikan ID grup penerapan dasar yang berbeda.

  • Anda menghapus grup aplikasi dan penyebaran CodeDeploy, lalu membuat grup aplikasi dan penyebaran baru dengan nama yang sama dengan yang Anda hapus. Setelah itu, Anda mencoba menerapkan revisi yang telah diterapkan ke grup penerapan sebelumnya ke yang baru dengan nama yang sama. Penerapan ulang gagal karena meskipun nama grup aplikasi dan penyebaran sama, CodeDeploy masih mereferensikan ID grup penyebaran yang Anda hapus.

  • Anda menerapkan revisi ke grup penerapan dan kemudian menerapkan revisi yang sama ke grup penerapan lain ke instance yang sama. Penerapan kedua gagal karena CodeDeploy mereferensikan ID grup penyebaran dasar yang berbeda.

  • Anda menerapkan revisi ke satu grup penerapan dan kemudian menerapkan revisi lain ke grup penerapan lain ke instance yang sama. Setidaknya ada satu file dengan nama yang sama dan di lokasi yang sama yang coba diterapkan oleh grup penyebaran kedua. Penerapan kedua gagal karena CodeDeploy tidak menghapus file yang ada sebelum penerapan kedua dimulai. Kedua penerapan> referensi ID grup penerapan yang berbeda.

  • Anda menerapkan revisi di CodeDeploy, tetapi setidaknya ada satu file dengan nama yang sama dan di lokasi yang sama. Penerapan gagal karena, secara default, CodeDeploy tidak menghapus file yang ada sebelum penerapan dimulai.

Untuk mengatasi situasi ini, lakukan salah satu hal berikut:

  • Hapus file dari lokasi dan instance yang sebelumnya digunakan, lalu coba penerapannya lagi.

  • Dalam AppSpec file revisi Anda, baik dalam peristiwa siklus hidup ApplicationStop atau BeforeInstall penerapan, tentukan skrip khusus untuk menghapus file di lokasi mana pun yang cocok dengan file yang akan dipasang revisi Anda.

  • Menerapkan atau menyebarkan ulang file ke lokasi atau instance yang bukan bagian dari penerapan sebelumnya.

  • Sebelum Anda menghapus aplikasi atau grup penyebaran, gunakan revisi yang berisi file yang menetapkan tidak ada AppSpec file yang akan disalin ke instance. Untuk penerapan, tentukan nama aplikasi dan nama grup penyebaran yang menggunakan ID grup aplikasi dan penyebaran dasar yang sama dengan yang akan Anda hapus. (Anda dapat menggunakan get-deployment-groupperintah untuk mengambil ID grup penyebaran.) CodeDeploymenggunakan ID dan AppSpec file grup penyebaran yang mendasari untuk menghapus semua file yang diinstal dalam penerapan yang berhasil sebelumnya.

Jalur file yang panjang menyebabkan kesalahan “Tidak ada file atau direktori seperti itu”

Untuk penerapan ke instance Windows, jika Anda memiliki jalur file yang lebih besar dari 260 karakter di bagian file file appspec.yl Anda, Anda mungkin melihat penerapan gagal dengan kesalahan yang mirip dengan berikut ini:

No such file or directory @ dir_s_mkdir - C:\your-long-file-path

Kesalahan ini terjadi karena Windows secara default tidak mengizinkan jalur file lebih dari 260 karakter, seperti yang dijelaskan dalam dokumentasi Microsoft.

Untuk versi CodeDeploy agen 1.4.0 atau yang lebih baru, Anda dapat mengaktifkan jalur file panjang dengan dua cara, tergantung pada proses instalasi agen:

Jika CodeDeploy agen belum diinstal:

  1. Pada mesin tempat Anda berencana untuk menginstal CodeDeploy agen, aktifkan kunci registri LongPathsEnabled Windows menggunakan perintah ini:

    New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force
  2. Instal CodeDeploy agen. Untuk informasi selengkapnya, lihat Instal CodeDeploy agen.

Jika CodeDeploy agen telah diinstal:

  1. Pada mesin CodeDeploy agen, aktifkan kunci registri LongPathsEnabled Windows menggunakan perintah ini:

    New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force
  2. Mulai ulang CodeDeploy agen agar perubahan kunci registri berlaku. Untuk me-restart agen, gunakan perintah ini:

    powershell.exe -Command Restart-Service -Name codedeployagent

Proses yang berjalan lama dapat menyebabkan penerapan gagal

Untuk penerapan ke Amazon Linux, Ubuntu Server, dan instans RHEL, jika Anda memiliki skrip penerapan yang memulai proses yang berjalan lama, CodeDeploy mungkin menghabiskan waktu lama menunggu dalam peristiwa siklus hidup penerapan dan kemudian gagal penerapan. Ini karena jika proses berjalan lebih lama dari proses latar depan dan latar belakang dalam peristiwa itu diharapkan untuk mengambil, CodeDeploy menghentikan dan gagal penerapan, bahkan jika proses masih berjalan seperti yang diharapkan.

Misalnya, revisi aplikasi berisi dua file di akarnya, after-install.sh dansleep.sh. AppSpec File-nya berisi instruksi berikut:

version: 0.0 os: linux files: - source: ./sleep.sh destination: /tmp hooks: AfterInstall: - location: after-install.sh timeout: 60

after-install.shFile berjalan selama acara siklus hidup AfterInstall aplikasi. Berikut isinya:

#!/bin/bash /tmp/sleep.sh

sleep.shFile berisi berikut ini, yang menangguhkan eksekusi program selama tiga menit (180 detik), mensimulasikan beberapa proses yang berjalan lama:

#!/bin/bash sleep 180

Ketika after-install.sh panggilansleep.sh, sleep.sh mulai dan berjalan selama tiga menit (180 detik), yaitu dua menit (120 detik) melewati waktu yang CodeDeploy diharapkan sleep.sh (dan, menurut hubungan,after-install.sh) untuk berhenti berjalan. Setelah batas waktu satu menit (60 detik), CodeDeploy berhenti dan gagal penerapan pada acara siklus hidup AfterInstall aplikasi, meskipun sleep.sh terus berjalan seperti yang diharapkan. Kesalahan berikut ditampilkan:

Script at specified location: after-install.sh failed to complete in 60 seconds.

Anda tidak bisa begitu saja menambahkan ampersand (&) after-install.sh untuk dijalankan sleep.sh di latar belakang.

#!/bin/bash # Do not do this. /tmp/sleep.sh &

Melakukannya dapat membuat penerapan dalam status tertunda hingga periode batas waktu peristiwa siklus hidup penerapan satu jam default, setelah itu CodeDeploy menghentikan dan gagal penerapan pada acara siklus hidup aplikasi seperti sebelumnya. AfterInstall

Dalamafter-install.sh, panggil sleep.sh sebagai berikut, yang memungkinkan CodeDeploy untuk melanjutkan setelah proses mulai berjalan:

#!/bin/bash /tmp/sleep.sh > /dev/null 2> /dev/null < /dev/null &

Pada panggilan sebelumnya, sleep.sh adalah nama proses yang ingin Anda mulai jalankan di latar belakang, mengarahkan stdout, stderr, dan stdin ke. /dev/null

Memecahkan masalah peristiwa AllowTraffic siklus hidup yang gagal tanpa kesalahan yang dilaporkan dalam log penerapan

Dalam beberapa kasus, penerapan biru/hijau gagal selama peristiwa AllowTraffic siklus hidup, tetapi log penerapan tidak menunjukkan penyebab kegagalan.

Kegagalan ini biasanya disebabkan oleh pemeriksaan kesehatan yang tidak dikonfigurasi dengan benar di Elastic Load Balancing untuk Classic Load Balancer, Application Load Balancer, atau Network Load Balancer yang digunakan untuk mengelola lalu lintas untuk grup penyebaran.

Untuk mengatasi masalah ini, tinjau dan perbaiki kesalahan apa pun dalam konfigurasi pemeriksaan kesehatan untuk penyeimbang beban.

Untuk Classic Load Balancer, lihat Mengonfigurasi Pemeriksaan Kesehatan di Panduan Pengguna untuk Penyeimbang Beban Klasik dan ConfigureHealthCheckdi Referensi API Elastic Load Balancing versi 2012-06-01.

Untuk Application Load Balancers, lihat Health Check for Your Target Groups di Panduan Pengguna untuk Application Load Balancers.

Untuk Network Load Balancer, lihat Pemeriksaan Kesehatan untuk Grup Target Anda di Panduan Pengguna Network Load Balancer.

Memecahkan masalah peristiwa siklus hidup yang gagal ApplicationStop BeforeBlockTraffic, atau AfterBlockTraffic penerapan

Selama penerapan, CodeDeploy agen menjalankan skrip yang ditentukan untuk ApplicationStop, BeforeBlockTraffic, dan AfterBlockTraffic dalam AppSpec file dari penerapan yang berhasil sebelumnya. (Semua skrip lain dijalankan dari AppSpec file dalam penerapan saat ini.) Jika salah satu skrip ini berisi kesalahan dan tidak berhasil berjalan, deployment dapat gagal.

Kemungkinan alasan kegagalan ini meliputi:

  • CodeDeploy Agen menemukan deployment-group-id_last_successful_install file di lokasi yang benar, tetapi lokasi yang tercantum dalam deployment-group-id_last_successful_install file tidak ada.

    Di Amazon Linux, Ubuntu Server, dan instans RHEL, file ini harus ada di. /opt/codedeploy-agent/deployment-root/deployment-instructions

    Pada instance Windows Server, file ini harus disimpan di C:\ProgramData\Amazon\CodeDeploy\deployment-instructions folder.

  • Di lokasi yang tercantum dalam deployment-group-id_last_successful_install file, AppSpec file tidak valid atau skrip tidak berjalan dengan sukses.

  • Skrip berisi kesalahan yang tidak dapat diperbaiki, sehingga tidak pernah berjalan dengan sukses.

Gunakan CodeDeploy konsol untuk menyelidiki mengapa penerapan mungkin gagal selama salah satu peristiwa ini. Pada halaman detail untuk penerapan, pilih Lihat peristiwa. Pada halaman detail untuk instance, di AfterBlockTrafficbaris ApplicationStopBeforeBlockTraffic, atau, pilih Lihat log. Atau gunakan AWS CLI untuk memanggil get-deployment-instanceperintah.

Jika penyebab kegagalan adalah skrip dari penerapan terakhir yang berhasil yang tidak pernah berjalan dengan sukses, buat penerapan dan tentukan bahwa ApplicationStop, BeforeBlockTraffic, dan AfterBlockTraffic kegagalan harus diabaikan. Ada dua cara untuk melakukan hal ini:

  • Gunakan CodeDeploy konsol untuk membuat penyebaran. Pada halaman Buat penerapan, di bawah kegagalan peristiwa ApplicationStop siklus hidup, pilih Jangan gagal penerapan ke instance jika peristiwa siklus hidup ini pada instance gagal.

  • Gunakan tombol AWS CLI untuk memanggil create-deployment perintah dan sertakan --ignore-application-stop-failures opsi.

Saat Anda menerapkan revisi aplikasi lagi, penerapan berlanjut meskipun salah satu dari tiga peristiwa siklus hidup ini gagal. Jika revisi baru menyertakan skrip tetap untuk peristiwa siklus hidup tersebut, penerapan masa depan dapat berhasil tanpa menerapkan perbaikan ini.

Memecahkan masalah peristiwa siklus hidup DownloadBundle penerapan yang gagal dengan UnknownError: tidak dibuka untuk dibaca

Jika Anda mencoba menerapkan revisi aplikasi dari Amazon S3, dan penerapan gagal selama peristiwa siklus hidup penerapan DownloadBundle dengan kesalahan: UnknownError: not opened for reading

  • Ada kesalahan layanan Amazon S3 internal. Terapkan revisi aplikasi lagi.

  • Profil instans IAM pada instans EC2 Anda tidak memiliki izin untuk mengakses revisi aplikasi di Amazon S3. Untuk informasi tentang kebijakan bucket Amazon S3, lihat Dorong revisi CodeDeploy ke Amazon S3 (hanya penerapan EC2/On-premise) dan. Prasyarat penyebaran

  • Instans yang Anda gunakan terkait dengan satu AWS Wilayah (misalnya, US West (Oregon)), tetapi bucket Amazon S3 yang berisi revisi aplikasi dikaitkan dengan AWS Wilayah lain (misalnya, US East (Virginia N.)). Pastikan revisi aplikasi ada di bucket Amazon S3 yang terkait dengan Wilayah yang AWS sama dengan instans.

Pada halaman detail acara untuk penerapan, di baris bundel Unduh, pilih Lihat log. Atau gunakan AWS CLI untuk memanggil get-deployment-instanceperintah. Jika kesalahan ini terjadi, harus ada kesalahan dalam output dengan kode kesalahan UnknownError dan pesan kesalahannot opened for reading.

Untuk menentukan alasan kesalahan ini:

  1. Aktifkan wire logging pada setidaknya satu instance, lalu terapkan revisi aplikasi lagi.

  2. Periksa file wire logging untuk menemukan kesalahan. Pesan kesalahan umum untuk masalah ini termasuk frasa “akses ditolak.”

  3. Setelah Anda memeriksa file log, kami sarankan Anda menonaktifkan wire logging untuk mengurangi ukuran file log dan jumlah informasi sensitif yang mungkin muncul dalam output dalam teks biasa pada instance di masa depan.

Untuk informasi tentang cara menemukan file wire logging dan mengaktifkan dan menonaktifkan wire logging, lihat :log_aws_wire: di referensi konfigurasi CodeDeploy agen.

Memecahkan masalah semua peristiwa siklus hidup yang dilewati kesalahan

Jika semua peristiwa siklus hidup EC2 atau penerapan lokal dilewati, Anda mungkin menerima kesalahan yang mirip dengan. The overall deployment failed because too many individual instances failed deployment, too few healthy instances are available for deployment, or some instances in your deployment group are experiencing problems. (Error code: HEALTH_CONSTRAINTS) Berikut adalah beberapa kemungkinan penyebab dan solusi:

  • CodeDeploy Agen mungkin tidak diinstal atau dijalankan pada instance. Untuk menentukan apakah CodeDeploy agen sedang berjalan:

    • Untuk Amazon Linux RHEL atau server Ubuntu, jalankan yang berikut ini:

      systemctl status codedeploy-agent
    • Untuk Windows, jalankan yang berikut ini:

      powershell.exe -Command Get-Service -Name CodeDeployagent

    Jika CodeDeploy agen tidak diinstal atau berjalan, lihatVerifikasi CodeDeploy agen sedang berjalan.

    Instans Anda mungkin tidak dapat mencapai titik akhir publik Amazon S3 CodeDeploy atau menggunakan port 443. Cobalah salah satu cara berikut ini:

    • Tetapkan alamat IP publik ke instance dan gunakan tabel rute untuk memungkinkan akses internet. Pastikan grup keamanan yang terkait dengan instance memungkinkan akses keluar melalui port 443 (HTTPS). Untuk informasi selengkapnya, lihat Protokol komunikasi dan port untuk CodeDeploy agen.

    • Jika sebuah instance disediakan dalam subnet pribadi, gunakan gateway NAT alih-alih gateway internet di tabel rute. Lihat informasi yang lebih lengkap di Gateway NAT.

  • Peran layanan untuk CodeDeploy mungkin tidak memerlukan izin. Untuk mengonfigurasi peran CodeDeploy layanan, lihatLangkah 2: Buat peran layanan untuk CodeDeploy.

  • Jika Anda menggunakan proxy HTTP, pastikan itu ditentukan dalam :proxy_uri: pengaturan dalam file konfigurasi CodeDeploy agen. Untuk informasi selengkapnya, lihat CodeDeploy referensi konfigurasi agen.

  • Tanda tangan tanggal dan waktu instans penerapan Anda mungkin tidak cocok dengan tanda tangan tanggal dan waktu permintaan penerapan Anda. Cari kesalahan yang mirip dengan Cannot reach InstanceService: Aws::CodeDeployCommand::Errors::InvalidSignatureException - Signature expired di file log CodeDeploy agen Anda. Jika Anda melihat kesalahan ini, ikuti langkah-langkahnyaPemecahan masalah “InvalidSignatureException - Tanda tangan kedaluwarsa: [waktu] sekarang lebih awal dari [waktu]” kesalahan penerapan. Untuk informasi selengkapnya, lihat Melihat data log untuk penerapan CodeDeploy EC2/Lokal.

  • CodeDeploy Agen mungkin berhenti berjalan karena instance kehabisan memori atau ruang hard disk. Cobalah untuk menurunkan jumlah penerapan yang diarsipkan pada instans Anda dengan memperbarui max_revisions pengaturan dalam konfigurasi agen. CodeDeploy Jika Anda melakukan ini untuk instans EC2 dan masalah tetap ada, pertimbangkan untuk menggunakan instance yang lebih besar. Misalnya, jika tipe instans Andat2.small, coba gunakant2.medium. Untuk informasi selengkapnya, lihatFile yang diinstal oleh CodeDeploy agen ,CodeDeploy referensi konfigurasi agen, dan Jenis instans.

  • Instance yang Anda gunakan mungkin tidak memiliki profil instans IAM yang dilampirkan, atau mungkin memiliki profil instans IAM yang dilampirkan yang tidak memiliki izin yang diperlukan.

    • Jika profil instans IAM tidak dilampirkan ke instance Anda, buat profil dengan izin yang diperlukan lalu lampirkan.

    • Jika profil instans IAM sudah dilampirkan ke instans Anda, pastikan ia memiliki izin yang diperlukan.

    Setelah Anda mengonfirmasi profil instans terlampir Anda dikonfigurasi dengan izin yang diperlukan, mulai ulang instance Anda. Untuk informasi selengkapnya, lihat Langkah 4: Buat profil instans IAM untuk instans Amazon EC2 Anda dan Peran IAM untuk Amazon EC2 di Panduan Pengguna Amazon EC2.

PowerShell Skrip Windows gagal menggunakan versi Windows 64-bit PowerShell secara default

Jika PowerShell skrip Windows yang berjalan sebagai bagian dari penerapan bergantung pada fungsionalitas 64-bit (misalnya, karena menghabiskan lebih banyak memori daripada aplikasi 32-bit yang memungkinkan atau memanggil pustaka yang ditawarkan hanya dalam versi 64-bit), skrip mungkin macet atau tidak berjalan seperti yang diharapkan. Ini karena, secara default, CodeDeploy menggunakan versi Windows 32-bit PowerShell untuk menjalankan PowerShell skrip Windows yang merupakan bagian dari revisi aplikasi.

Tambahkan kode seperti berikut ini ke awal skrip apa pun yang harus dijalankan dengan Windows versi 64-bit PowerShell:

# Are you running in 32-bit mode? # (\SysWOW64\ = 32-bit mode) if ($PSHOME -like "*SysWOW64*") { Write-Warning "Restarting this script under 64-bit Windows PowerShell." # Restart this script under 64-bit Windows PowerShell. # (\SysNative\ redirects to \System32\ for 64-bit mode) & (Join-Path ($PSHOME -replace "SysWOW64", "SysNative") powershell.exe) -File ` (Join-Path $PSScriptRoot $MyInvocation.MyCommand) @args # Exit 32-bit script. Exit $LastExitCode } # Was restart successful? Write-Warning "Hello from $PSHOME" Write-Warning " (\SysWOW64\ = 32-bit mode, \System32\ = 64-bit mode)" Write-Warning "Original arguments (if any): $args" # Your 64-bit script code follows here... # ...

Meskipun informasi jalur file dalam kode ini mungkin tampak berlawanan dengan intuisi, Windows 32-bit PowerShell menggunakan jalur seperti:

c:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe

Windows 64-bit PowerShell menggunakan jalur seperti:

c:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe