Saya ingin tahu apakah mungkin untuk memanggil fungsi lambda dengan alias dari Fungsi Langkah?

Saat ini saya memiliki beberapa pengaturan fungsi Lambda untuk bekerja dengan alias. (satu untuk setiap lingkungan, seperti DEV, UAT dll). Ini nyaman karena itu berarti saya tidak perlu menggunakan fungsi Lambda terpisah untuk setiap lingkungan.

Saya ingin mencapai hal yang sama dengan Fungsi Langkah dan memulai eksekusi pada mesin negara dengan nilai yang mewakili lingkungan pelaksana (Alias).

Saya kemudian ingin menggunakan nilai itu di dalam Bahasa Mesin Negara untuk meneruskannya ke bagian fungsi Lambda.

Sesuatu seperti ini.

"Comment": "DEV Send Email Notification",
"StartAt": "Send Email Through Mandrill",
"States": {
  "Send Email Through Mandrill": {
    "Type": "Task",
    "Resource": "arn:aws:states:::lambda:invoke",
    "Parameters": {
      "FunctionName": "arn:aws:lambda:{region}:{accountId}:function:Email-Notification:DEV",
      "Payload": {
        "Input.$": "$"
      }
    },
...

Alih-alih menggunakan arn:aws:lambda:{region}:{accountId}:function:Email-Notification:DEV sebagai FunctionName, dapatkah saya menggunakan nilai dari input state machine seperti

"FunctionName": "arn:aws:lambda:{region}:{accountId}:function:Email-Notification:$.Alias"

Atau bisakah saya menggunakan "Parameter" lain untuk alias?

Saya mencoba untuk menghindari pengaturan Fungsi Langkah yang sama per lingkungan.

1
Ryan Dobbs 3 Maret 2020, 10:13

1 menjawab

Jawaban Terbaik

Parameter menggunakan JSONPath yang merupakan bahasa kueri dan oleh karena itu Anda tidak akan dapat menggabungkan nilai seperti pada contoh Anda. Selain itu untuk referensi data dari Input Anda di dalam Parameter, itu harus dalam format nilai kunci ("key.$": "$.Value").

Namun melihat Integrasi Tugas Lambda kami dapat melihatnya mendukung parameter FunctionName dan Qualifier. Melihat Lambda Invoke API kita dapat melihat bahwa FunctionName mendukung 3 format nama:

  1. Fungsi ARN
  2. Nama fungsi (nama atau nama: alias)
  3. ARN Parsial (123456789012:fungsi:fungsi-saya)

Bidang Qualifier digunakan untuk menentukan versi atau alias dari fungsi yang akan dipanggil. Jadi dengan itu Anda akan dapat menentukan nama fungsi Lambda Anda (tidak perlu akun dan wilayah karena Fungsi Langkah tidak mendukung pemanggilan lintas wilayah/akun) dan alias (secara dinamis dari input) untuk fungsi tanpa harus membangun ARN penuh. Berikut ini contoh tampilan Negara Anda:

"LambdaTask": {
    "Type": "Task",
    "Resource": "arn:aws:states:::lambda:invoke",
    "Parameters": {
        "FunctionName": "NameOfYourFunction",
        "Qualifier.$": "$.Alias",
        "Payload": {
            "Foo": "Bar"
        }
    },
    "End": true
}
0
Joe 3 Maret 2020, 20:59