Saya memiliki 2 fungsi Lambda - yang menghasilkan penawaran dan yang mengubah penawaran menjadi pesanan. Saya ingin fungsi Order lambda untuk memanggil fungsi Penawaran untuk membuat ulang penawaran, daripada hanya menerimanya dari klien yang tidak terpercaya.
Saya telah mencari di mana-mana yang dapat saya pikirkan - tetapi tidak dapat melihat bagaimana saya akan melakukan chaining atau memanggil fungsi ... pasti ini ada!
Jawaban:
Saya menemukan cara menggunakan
aws-sdk
.Anda dapat menemukan dokumen di sini: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html
sumber
InvocationType: 'Event'
parameter (tambahkan setelahFunctionName
danPayload
). Dari dokumen: "Anda dapat secara opsional meminta eksekusi asinkron dengan menentukan Peristiwa sebagai Jenis Invokasi." Dengan eksekusi async, fungsi callback akan dipanggil dengan andal, tetapi tanpa harus menunggu lambda yang dipanggil untuk menyelesaikan eksekusi.AWSLambdaRole
. Atau, Anda dapat menambahkan objek pernyataan berikut ke kebijakan peran Anda yang ada: '{"Effect": "Allow", "Action": ["lambda: InvokeFunction"], "Resource": ["*"]} `Anda harus rantai
Lambda functions
via AndaSNS
. Pendekatan ini memberikan kinerja yang baik, latensi, dan skalabilitas untuk upaya minimal.Pertama Anda
Lambda
mempublikasikan pesan ke AndaSNS Topic
dan yang keduaLambda
berlangganan topik ini. Begitu pesan tiba di topik, keduaLambda
dieksekusi dengan pesan sebagai parameter inputnya.Lihat Meminta fungsi Lambda menggunakan notifikasi Amazon SNS .
Anda juga dapat menggunakan pendekatan ini untuk Menjalankan fungsi Lambda lintas-akun melalui SNS .
sumber
inilah kode contoh untuk python,
Btw, Anda perlu menambahkan kebijakan seperti ini ke peran lambda Anda juga
sumber
datetime.now()
menjadi string (atau menanganinya entah bagaimana). Jika tidak, Anda mendapatkan kesalahandatetime.datetime(2017, 9, 11, 14, 40, 53, 23834) is not JSON serializable
InvocationType
harus:RequestResponse
. Untuk mendapatkan respons dari lambda yang Anda coba panggil.Sejak pertanyaan ini diajukan, Amazon telah merilis Fungsi Langkah ( https://aws.amazon.com/step-functions/ ).
Salah satu prinsip inti di balik AWS Lambda adalah bahwa Anda dapat lebih fokus pada logika bisnis dan lebih sedikit pada logika aplikasi yang mengikat semuanya. Fungsi langkah memungkinkan Anda mengatur interaksi kompleks antar fungsi tanpa harus menulis kode untuk melakukannya.
sumber
Solusi ini dilakukan dengan menggunakan boto3 dan Python:
sumber
Saya sedang melihat memotong SNS sampai saya melihat ini di dokumen klien Lambda (versi Java) :
Jadi SNS memiliki keuntungan yang jelas: tidak sinkron. Lambda Anda tidak akan menunggu untuk lambda berikutnya selesai.
sumber
Amazon telah memperkenalkan fungsi langkah di AWS lambda pada 2016. Saya pikir, sekarang lebih nyaman menggunakan fungsi langkah karena sangat mudah untuk menggunakannya. Anda dapat membangun mesin negara dengan dua fungsi lambda sebagai:
Anda dapat dengan mudah melakukannya seperti di bawah ini:
Di sini Anda dapat memiliki status pertama untuk menghasilkan kutipan dan yang lainnya berubah menjadi urutan
Fungsi langkah membuatnya sangat mudah untuk menulis beberapa fungsi lambda dan dijalankan secara berurutan atau paralel. Anda dapat memperoleh informasi lebih lanjut tentang fungsi langkah lambda di sini: Fungsi Langkah
sumber
Saya bekerja dengan jawaban yang diberikan oleh blueskin tetapi saya tidak dapat membaca respons Payload karena InvocationType = 'Event' adalah async , jadi saya berubah sebagai InvocationType = 'RequestResponse' dan sekarang semua berfungsi dengan baik.
sumber
Di java, kita bisa melakukan hal berikut:
Di sini, payload adalah objek java Anda yang di- string yang harus dilewatkan sebagai objek Json ke lambda lain jika Anda perlu meneruskan beberapa informasi dari memanggil lambda ke yang disebut lambda.
sumber
Anda mungkin dapat memanfaatkan fitur Air Terjun Async.js - lihat bagian bawah potongan kode besar pada Langkah 3 dari dokumen ini sebagai contoh:
https://aws.amazon.com/blogs/compute/better-together-amazon-ecs-and-aws-lambda/
sumber
Anda dapat menjalankan fungsi lambda secara langsung (setidaknya melalui Java) dengan menggunakan
AWSLambdaClient
seperti yang dijelaskan dalam posting blog AWS .sumber
Saya mengalami masalah yang sama tetapi fungsi Lambda yang saya implementasikan akan memasukkan entri dalam DynamoDB, jadi solusi saya menggunakan DynamoDB Triggers.
Saya membuat DB memanggil fungsi Lambda untuk setiap sisipan / pembaruan dalam tabel, jadi ini memisahkan implementasi dua fungsi Lambda.
Dokumentasi ada di sini: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.Lambda.html
Berikut adalah panduan penelusuran: https://aws.amazon.com/blogs/aws/dynamodb-update-triggers-streams-lambda-cross-region-replication-app/
sumber
Semacam solusi bundaran tetapi saya hanya memanggil titik akhir API untuk fungsi lambda saya ketika saya perlu rantai mereka. Ini memungkinkan Anda untuk memutuskan sambil mengkodekan apakah Anda ingin mereka tidak sinkron atau tidak.
Jika Anda tidak ingin mengatur permintaan POST, Anda hanya bisa mengatur permintaan GET sederhana dengan pasangan, atau tidak sama sekali, parameter string kueri untuk melewati peristiwa mudah.
- Edit -
Lihat: https://docs.aws.amazon.com/apigateway/api-reference/making-http-requests/
dan: http://docs.aws.amazon.com/lambda/latest/dg/with-on-demand-https-example.html
sumber
Lainnya menunjukkan untuk menggunakan SQS dan Step Functions. Namun kedua solusi ini menambah biaya tambahan. Langkah Fungsi transisi keadaan konon sangat mahal.
AWS lambda menawarkan beberapa logika coba lagi. Di mana ia mencoba sesuatu selama 3 kali. Saya tidak yakin apakah itu masih berlaku ketika Anda memicu menggunakan API.
sumber
Ini adalah contoh python untuk memanggil fungsi lambda lain dan mendapatkan responsnya. Ada dua jenis doa 'RequestResponse' dan 'Event' . Gunakan 'RequestResponse' jika Anda ingin mendapatkan respons fungsi lambda dan gunakan 'Event' untuk memanggil fungsi lambda secara tidak sinkron. Jadi kedua cara asinkron dan sinkron tersedia.
sumber
Anda dapat mengatur lingkungan AWS_REGION.
sumber