Memecahkan masalah dengan integrasi Lambda API HTTP - APIGerbang Amazon

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

Memecahkan masalah dengan integrasi Lambda API HTTP

Berikut ini memberikan saran pemecahan masalah untuk kesalahan dan masalah yang mungkin Anda temui saat menggunakan AWS Lambda integrasi dengan API HTTP.

Masalah: API saya dengan integrasi Lambda kembali {"message":"Internal Server Error"}

Untuk memecahkan masalah kesalahan server internal, tambahkan variabel $context.integrationErrorMessage logging ke format log Anda, dan lihat log HTTP API Anda. Untuk mencapai ini, lakukan hal berikut:

Untuk membuat grup log dengan menggunakan AWS Management Console
  1. Buka CloudWatch konsol di https://console.aws.amazon.com/cloudwatch/.

  2. Pilih Grup log.

  3. Pilih Buat grup log.

  4. Masukkan nama grup log, lalu pilih Buat.

  5. Perhatikan Nama Sumber Daya Amazon (ARN) untuk grup log Anda. Format ARN adalah arn:aws:logs: region: account-id:log-group:. log-group-name Anda memerlukan grup log ARN untuk mengaktifkan pencatatan akses untuk HTTP API Anda.

Untuk menambahkan variabel $context.integrationErrorMessage logging
  1. Masuk ke konsol API Gateway di https://console.aws.amazon.com/apigateway.

  2. Pilih HTTP API Anda.

  3. Di bawah Monitor, pilih Logging.

  4. Pilih tahap API Anda.

  5. Pilih Edit, lalu aktifkan pencatatan akses.

  6. Untuk tujuan Log, masukkan ARN dari grup log yang Anda buat pada langkah sebelumnya.

  7. Untuk format Log, pilih CLF. API Gateway membuat contoh format log.

  8. Tambahkan $context.integrationErrorMessage ke akhir format log.

  9. Pilih Simpan.

Untuk melihat log API Anda
  1. Hasilkan log. Gunakan browser atau curl untuk menjalankan API Anda.

    $curl https://api-id.execute-api.us-west-2.amazonaws.com/route
  2. Masuk ke konsol API Gateway di https://console.aws.amazon.com/apigateway.

  3. Pilih HTTP API Anda.

  4. Di bawah Monitor, pilih Logging.

  5. Pilih tahap API yang Anda aktifkan logging.

  6. Pilih Lihat log masuk CloudWatch.

  7. Pilih aliran log terbaru untuk melihat log HTTP API Anda.

  8. Entri log Anda akan terlihat mirip dengan yang berikut ini:

    CloudWatch Entri log log yang menunjukkan pesan kesalahan integrasi dari Lambda.

Karena kami menambahkan $context.integrationErrorMessage ke format log, kami melihat pesan kesalahan di log kami yang merangkum masalah.

Log Anda mungkin menyertakan pesan kesalahan berbeda yang menunjukkan bahwa ada masalah dengan kode fungsi Lambda Anda. Dalam hal ini, periksa kode fungsi Lambda Anda, dan verifikasi bahwa fungsi Lambda Anda mengembalikan respons dalam format yang diperlukan. Jika log Anda tidak menyertakan pesan kesalahan, tambahkan $context.error.message dan $context.error.responseType ke format log Anda untuk informasi selengkapnya guna membantu memecahkan masalah.

Dalam kasus ini, log menunjukkan bahwa API Gateway tidak memiliki izin yang diperlukan untuk menjalankan fungsi Lambda.

Saat Anda membuat integrasi Lambda di konsol API Gateway, API Gateway secara otomatis mengonfigurasi izin untuk menjalankan fungsi Lambda. Saat membuat integrasi Lambda dengan menggunakan AWS CLI,, atau SDK AWS CloudFormation, Anda harus memberikan izin kepada API Gateway untuk menjalankan fungsi tersebut. Contoh AWS CLI perintah berikut memberikan izin untuk rute API HTTP yang berbeda untuk menjalankan fungsi Lambda.

contoh Contoh - Untuk $default tahap dan $default rute API HTTP
aws lambda add-permission \ --function-name my-function \ --statement-id apigateway-invoke-permissions \ --action lambda:InvokeFunction \ --principal apigateway.amazonaws.com \ --source-arn "arn:aws:execute-api:us-west-2:123456789012:api-id/\$default/\$default"
contoh Contoh - Untuk prod tahap dan test rute API HTTP
aws lambda add-permission \ --function-name my-function \ --statement-id apigateway-invoke-permissions \ --action lambda:InvokeFunction \ --principal apigateway.amazonaws.com \ --source-arn "arn:aws:execute-api:us-west-2:123456789012:api-id/prod/*/test"

Konfirmasi kebijakan fungsi di tab Izin di konsol Lambda.

Coba jalankan API Anda lagi. Anda akan melihat respons fungsi Lambda Anda.