Gunakan langkah-langkah pemrosesan file khusus - AWS Transfer Family

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

Gunakan langkah-langkah pemrosesan file khusus

Dengan menggunakan langkah pemrosesan file kustom, Anda dapat menggunakan logika pemrosesan file Anda Sendiri. AWS Lambda Setelah kedatangan file, server Transfer Family memanggil fungsi Lambda yang berisi logika pemrosesan file khusus, seperti mengenkripsi file, memindai malware, atau memeriksa jenis file yang salah. Dalam contoh berikut, AWS Lambda fungsi target digunakan untuk memproses file output dari langkah sebelumnya.

Layar langkah khusus, dengan Terapkan pemrosesan kustom ke file yang dibuat dari radio langkah sebelumnya tombol dipilih, dan fungsi Lambda ditampilkan di bidang Target.
catatan

Untuk contoh fungsi Lambda, lihat. Contoh fungsi Lambda untuk langkah alur kerja khusus Misalnya peristiwa (termasuk lokasi untuk file yang diteruskan ke Lambda), lihat. Contoh peristiwa dikirim ke AWS Lambda saat file upload

Dengan langkah alur kerja khusus, Anda harus mengonfigurasi fungsi Lambda untuk memanggil operasi API SendWorkflowStepState. SendWorkflowStepStatememberitahukan eksekusi alur kerja bahwa langkah telah selesai dengan status sukses atau kegagalan. Status operasi SendWorkflowStepState API memanggil langkah penangan pengecualian atau langkah nominal dalam urutan linier, berdasarkan hasil fungsi Lambda.

Jika fungsi Lambda gagal atau habis waktu, langkahnya gagal, dan Anda lihat StepErrored di log Anda CloudWatch . Jika fungsi Lambda adalah bagian dari langkah nominal dan fungsi merespons SendWorkflowStepState dengan Status="FAILURE" atau waktu habis, aliran berlanjut dengan langkah-langkah penangan pengecualian. Dalam hal ini, alur kerja tidak terus mengeksekusi langkah-langkah nominal yang tersisa (jika ada). Untuk detail selengkapnya, lihat Penanganan pengecualian untuk alur kerja.

Ketika Anda memanggil operasi SendWorkflowStepState API, Anda harus mengirim parameter berikut:

{ "ExecutionId": "string", "Status": "string", "Token": "string", "WorkflowId": "string" }

Anda dapat mengekstrakExecutionId,Token, dan WorkflowId dari peristiwa masukan yang diteruskan ketika fungsi Lambda dijalankan (contoh ditampilkan di bagian berikut). StatusNilainya bisa berupa SUCCESS atauFAILURE.

Untuk dapat memanggil operasi SendWorkflowStepState API dari fungsi Lambda, Anda harus menggunakan versi AWS SDK yang diterbitkan setelah Alur Kerja Terkelola diperkenalkan.

Menggunakan beberapa fungsi Lambda secara berurutan

Bila Anda menggunakan beberapa langkah kustom satu demi satu, opsi lokasi File bekerja secara berbeda daripada jika Anda hanya menggunakan satu langkah kustom. Transfer Family tidak mendukung meneruskan file yang diproses Lambda kembali untuk digunakan sebagai input langkah berikutnya. Jadi, jika Anda memiliki beberapa langkah khusus yang semuanya dikonfigurasi untuk menggunakan previous.file opsi, semuanya menggunakan lokasi file yang sama (lokasi file input untuk langkah kustom pertama).

catatan

previous.filePengaturan juga bekerja secara berbeda jika Anda memiliki langkah yang telah ditentukan (tag, salin, dekripsi, atau hapus) setelah langkah khusus. Jika langkah yang telah ditentukan dikonfigurasi untuk menggunakan previous.file pengaturan, langkah yang telah ditentukan menggunakan file input yang sama yang digunakan oleh langkah kustom. File yang diproses dari langkah kustom tidak diteruskan ke langkah yang telah ditentukan.

Mengakses file setelah pemrosesan kustom

Jika Anda menggunakan Amazon S3 sebagai penyimpanan, dan jika alur kerja menyertakan langkah khusus yang melakukan tindakan pada file yang diunggah semula, langkah selanjutnya tidak dapat mengakses file yang diproses tersebut. Artinya, langkah apa pun setelah langkah khusus tidak dapat mereferensikan file yang diperbarui dari output langkah khusus.

Misalnya, Anda memiliki tiga langkah berikut dalam alur kerja Anda.

  • Langkah 1 - Unggah file bernamaexample-file.txt.

  • Langkah 2 — Memanggil fungsi Lambda yang example-file.txt berubah dalam beberapa cara.

  • Langkah 3 — Mencoba untuk melakukan pemrosesan lebih lanjut pada versi terbaru dariexample-file.txt.

Jika Anda mengonfigurasi sourceFileLocation untuk Langkah 3${original.file}, Langkah 3 menggunakan lokasi file asli dari saat server mengunggah file ke penyimpanan di Langkah 1. Jika Anda menggunakan ${previous.file} untuk Langkah 3, Langkah 3 menggunakan kembali lokasi file yang Langkah 2 digunakan sebagai input.

Oleh karena itu, Langkah 3 menyebabkan kesalahan. Misalnya, jika langkah 3 mencoba menyalin yang diperbaruiexample-file.txt, Anda menerima kesalahan berikut:

{ "type": "StepErrored", "details": { "errorType": "NOT_FOUND", "errorMessage": "ETag constraint not met (Service: null; Status Code: 412; Error Code: null; Request ID: null; S3 Extended Request ID: null; Proxy: null)", "stepType": "COPY", "stepName": "CopyFile" },

Kesalahan ini terjadi karena langkah kustom memodifikasi tag entitas (ETag) example-file.txt agar tidak cocok dengan file aslinya.

catatan

Perilaku ini tidak terjadi jika Anda menggunakan Amazon EFS karena Amazon EFS tidak menggunakan tag entitas untuk mengidentifikasi file.

Contoh peristiwa dikirim ke AWS Lambda saat file upload

Contoh berikut menunjukkan peristiwa yang dikirim ke AWS Lambda ketika file upload selesai. Salah satu contoh menggunakan server Transfer Family tempat domain dikonfigurasi dengan Amazon S3. Contoh lainnya menggunakan server Transfer Family di mana domain menggunakan Amazon EFS.

Custom step that uses an Amazon S3 domain
{ "token": "MzI0Nzc4ZDktMGRmMi00MjFhLTgxMjUtYWZmZmRmODNkYjc0", "serviceMetadata": { "executionDetails": { "workflowId": "w-1234567890example", "executionId": "abcd1234-aa11-bb22-cc33-abcdef123456" }, "transferDetails": { "sessionId": "36688ff5d2deda8c", "userName": "myuser", "serverId": "s-example1234567890" } }, "fileLocation": { "domain": "S3", "bucket": "DOC-EXAMPLE-BUCKET", "key": "path/to/mykey", "eTag": "d8e8fca2dc0f896fd7cb4cb0031ba249", "versionId": null } }
Custom step that uses an Amazon EFS domain
{ "token": "MTg0N2Y3N2UtNWI5Ny00ZmZlLTk5YTgtZTU3YzViYjllNmZm", "serviceMetadata": { "executionDetails": { "workflowId": "w-1234567890example", "executionId": "abcd1234-aa11-bb22-cc33-abcdef123456" }, "transferDetails": { "sessionId": "36688ff5d2deda8c", "userName": "myuser", "serverId": "s-example1234567890" } }, "fileLocation": { "domain": "EFS", "fileSystemId": "fs-1234567", "path": "/path/to/myfile" } }

Contoh fungsi Lambda untuk langkah alur kerja khusus

Fungsi Lambda berikut mengekstrak informasi mengenai status eksekusi, dan kemudian memanggil operasi SendWorkflowStepStateAPI untuk mengembalikan status ke alur kerja untuk langkah tersebut—baik atau. SUCCESS FAILURE Sebelum fungsi Anda memanggil operasi SendWorkflowStepState API, Anda dapat mengonfigurasi Lambda untuk mengambil tindakan berdasarkan logika alur kerja Anda.

import json import boto3 transfer = boto3.client('transfer') def lambda_handler(event, context): print(json.dumps(event)) # call the SendWorkflowStepState API to notify the workflow about the step's SUCCESS or FAILURE status response = transfer.send_workflow_step_state( WorkflowId=event['serviceMetadata']['executionDetails']['workflowId'], ExecutionId=event['serviceMetadata']['executionDetails']['executionId'], Token=event['token'], Status='SUCCESS|FAILURE' ) print(json.dumps(response)) return { 'statusCode': 200, 'body': json.dumps(response) }

Izin IAM untuk langkah khusus

Agar langkah yang memanggil Lambda berhasil, pastikan peran eksekusi untuk alur kerja Anda berisi izin berikut.

{ "Sid": "Custom", "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:region:account-id:function:function-name" ] }