View a markdown version of this page

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 khusus, Anda dapat Membawa logika pemrosesan file Anda sendiri menggunakan. 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 kustom, dengan Ter apkan pemrosesan kustom ke file yang dibuat dari tombol radio langkah sebelumnya dipilih, dan fungsi Lambda ditampilkan di bidang Target.
catatan

Untuk contoh fungsi Lambda, lihatContoh fungsi Lambda untuk langkah alur kerja kustom. Misalnya peristiwa (termasuk lokasi untuk file yang diteruskan ke Lambda), lihatContoh acara yang dikirim ke AWS Lambda saat mengunggah file.

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

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

Saat 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 input yang dilewatkan ketika fungsi Lambda dieksekusi (contoh ditunjukkan pada bagian berikut). Nil Status ainya bisa berupa SUCCESS atauFAILURE.

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

Menggunakan beberapa fungsi Lambda secara berurutan

Saat 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 penerusan Lambda-processed file kembali untuk digunakan sebagai input langkah berikutnya. Jadi, jika Anda memiliki beberapa langkah kustom yang semuanya dikonfigurasi untuk menggunakan previous.file opsi, semuanya menggunakan lokasi file yang sama (lokasi file input untuk langkah kustom pertama).

catatan

Peng previous.file aturan ini juga bekerja secara berbeda jika Anda memiliki langkah yang telah ditentukan (tag, salin, dekripsi, atau hapus) setelah langkah kustom. 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 sebelumnya.

Mengakses file setelah pemrosesan kustom

Jika Anda menggunakan Amazon S3 sebagai penyimpanan, dan jika alur kerja Anda 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 kustom tidak dapat mereferensikan file yang diperbarui dari output langkah kustom.

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

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

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

  • Langkah 3 - Cobalah untuk melakukan pemrosesan lebih lanjut pada versi yang diperbarui dariexample-file.txt.

Jika Anda mengonfigurasi sourceFileLocation untuk Langkah 3 menjadi${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 digunakan Langkah 2 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) untuk example-file.txt sehingga tidak cocok dengan file asli.

catatan

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

Contoh acara yang dikirim ke AWS Lambda saat mengunggah file

Contoh berikut menunjukkan peristiwa yang dikirim AWS Lambda ketika unggahan file selesai. Salah satu contoh menggunakan server Transfer Family di mana 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": "amzn-s3-demo-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 kustom

Fungsi Lambda berikut mengekstrak informasi mengenai status eksekusi, dan kemudian memanggil operasi SendWorkflowStepState API untuk mengembalikan status ke alur kerja untuk langkah—baik atauSUCCESS. FAILURE Sebelum fungsi 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 kustom

Untuk mengizinkan 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" ] }