

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AWS Transfer Family 受管工作流程
<a name="transfer-workflows"></a>

 AWS Transfer Family 支援 受管工作流程以進行檔案處理。透過 受管工作流程，您可以在檔案透過 SFTP、FTPS 或 FTP 傳輸之後啟動工作流程。使用此功能，您可以協調檔案處理所需的所有必要步驟，以安全且經濟實惠的方式滿足您的business-to-business (B2B) 檔案交換合規要求。此外，您可以受益於end-to-end稽核和可見性。

![\[流程圖顯示受管工作流程如何協助處理檔案。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-diagram.png)


透過協調檔案處理任務，受管工作流程可協助您在下游應用程式取用資料之前預先處理資料。這類檔案處理任務可能包括：
+ 將檔案移至使用者特定的資料夾。
+ 將檔案解密為工作流程的一部分。
+ 標記檔案。
+ 透過建立 AWS Lambda 函數並將其連接至工作流程來執行自訂處理。
+ 成功傳輸檔案時傳送通知。（如需詳細說明此使用案例的部落格文章，請參閱[使用 AWS Transfer Family 受管工作流程自訂檔案交付通知](https://aws.amazon.com/blogs/storage/customize-file-delivery-notifications-using-aws-transfer-family-managed-workflows/)。)

若要快速複寫和標準化組織中跨多個業務單位的常見上傳後檔案處理任務，您可以使用基礎設施即程式碼 (IaC) 部署工作流程。您可以指定要在完整上傳的檔案上啟動的受管工作流程。您也可以指定不同的受管工作流程，以便在因為過早中斷連線而僅部分上傳的檔案上啟動。內建例外狀況處理可協助您快速回應檔案處理結果，同時讓您控制如何處理失敗。此外，每個工作流程步驟都會產生詳細的日誌，您可以稽核以追蹤資料歷程。

若要開始使用，請執行下列任務：

1. 設定您的工作流程以包含預先處理動作，例如根據您的需求複製、標記和其他步驟。如需詳細資訊，請參閱 [建立工作流程](create-workflow.md)。

1. 設定執行角色，供 Transfer Family 用來執行工作流程。如需詳細資訊，請參閱 [工作流程的 IAM 政策](workflow-execution-role.md)。

1. 將工作流程映射到伺服器，以便在檔案送達時，即時評估和啟動此工作流程中指定的動作。如需詳細資訊，請參閱 [設定和執行工作流程](create-workflow.md#configure-workflow)。

**相關資訊**
+ 若要監控工作流程執行，請參閱 [使用 Transfer Family 伺服器的 CloudWatch 指標](metrics.md)。
+ 如需詳細的執行日誌和疑難排解資訊，請參閱 [使用 Amazon CloudWatch 對工作流程相關錯誤進行故障診斷](workflow-issues.md#workflows-cloudwatch-errors)。
+ Transfer Family 提供部落格文章和研討會，引導您建置檔案傳輸解決方案。此解決方案利用 AWS Transfer Family 受管 SFTP/FTPS 端點和 Amazon Cognito 和 DynamoDB 進行使用者管理。

  部落格文章可在[使用 Amazon Cognito 做為 AWS Transfer Family 和 Amazon S3 的身分提供者](https://aws.amazon.com/blogs/storage/using-amazon-cognito-as-an-identity-provider-with-aws-transfer-family-and-amazon-s3/)取得。您可以在[此處](https://catalog.workshops.aws/transfer-family-sftp/en-US)檢視研討會的詳細資訊。
+ 以下影片提供 Transfer Family 受管工作流程的簡介。  
[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/t-iNqCRospw/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/t-iNqCRospw)
+ 以下研討會提供實作實驗室，以建置全自動化和事件驅動的工作流程，涉及將檔案傳輸到外部 SFTP 伺服器或從外部 SFTP 伺服器傳輸到 Amazon S3，以及這些檔案的常見前置和後置處理：[事件驅動的 MFT 研討會](https://catalog.us-east-1.prod.workshops.aws/workshops/e55c90e0-bbb0-47e1-be83-6bafa3a59a8a/en-US)。

  此影片提供本研討會的逐步解說。  
[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/oojopisG4lA/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/oojopisG4lA)

**Topics**
+ [建立工作流程](create-workflow.md)
+ [使用預先定義的步驟](nominal-steps-workflow.md)
+ [使用自訂檔案處理步驟](custom-step-details.md)
+ [工作流程的 IAM 政策](workflow-execution-role.md)
+ [工作流程的例外狀況處理](#exception-workflow)
+ [監控工作流程執行](cloudwatch-workflow.md)
+ [從範本建立工作流程](workflow-template.md)
+ [從 Transfer Family 伺服器移除工作流程](#remove-workflow-association)
+ [受管工作流程的限制](#limitations-workflow)

如需 受管工作流程入門的更多說明，請參閱下列資源：
+ [AWS Transfer Family 受管工作流程](https://www.youtube.com/watch?v=t-iNqCRospw)示範影片
+ [使用 AWS Transfer Family 工作流程部落格文章建置雲端原生檔案傳輸平台](https://aws.amazon.com/blogs/architecture/building-a-cloud-native-file-transfer-platform-using-aws-transfer-family-workflows/) 

# 建立工作流程
<a name="create-workflow"></a>

您可以使用 建立受管工作流程 AWS 管理主控台，如本主題所述。為了讓工作流程建立程序盡可能簡單，主控台中的大多數區段都可以使用情境說明面板。

工作流程有兩種步驟：
+ **名義步驟** – 名義步驟是您想要套用至傳入檔案的檔案處理步驟。如果您選擇多個名目步驟，則每個步驟都會以線性順序處理。
+ **例外狀況處理步驟** – 例外狀況處理常式是在任何名目步驟失敗或導致驗證錯誤時 AWS Transfer Family 執行的檔案處理步驟。

**建立工作流程**

1. 在 https：//[https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/) 開啟 AWS Transfer Family 主控台。

1. 在左側導覽窗格中，選擇**工作流程**。

1. 在**工作流程**頁面上，選擇**建立工作流程**。

1. 在**建立工作流程**頁面上，輸入描述。此描述會出現在**工作流程**頁面上。

1. 在**名義步驟**區段中，選擇**新增步驟**。新增一或多個步驟。

   1. 從可用的選項中選擇步驟類型。如需各種步驟類型的詳細資訊，請參閱 [使用預先定義的步驟](nominal-steps-workflow.md)。

   1. 選擇**下一步**，然後設定步驟的參數。

   1. 選擇**下一步**，然後檢閱步驟的詳細資訊。

   1. 選擇**建立步驟**以新增步驟並繼續。

   1. 視需要繼續新增步驟。工作流程中的步驟數目上限為 8。

   1. 新增所有必要的名目步驟後，向下捲動至**例外處理常式 – *選用***區段，然後選擇**新增步驟**。
**注意**  
為了讓您即時收到失敗的通知，建議您設定例外狀況處理常式，以及在工作流程失敗時執行的步驟。

1. 若要設定例外狀況處理常式，請以先前所述的相同方式新增步驟。如果檔案導致任何步驟擲回例外狀況，則會逐一叫用例外狀況處理常式。

1. （選用） 向下捲動至**標籤**區段，並為您的工作流程新增標籤。

1. 檢閱組態，然後選擇**建立工作流程**。
**重要**  
建立工作流程之後，您無法編輯它，因此請務必仔細檢閱組態。

## 設定和執行工作流程
<a name="configure-workflow"></a>

您必須先將工作流程與 Transfer Family 伺服器建立關聯，才能執行工作流程。

**設定 Transfer Family 在上傳的檔案上執行工作流程**

1. 在 https：//[https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/) 開啟 AWS Transfer Family 主控台。

1. 在左側導覽窗格中，選擇**伺服器**。
   + 若要將工作流程新增至現有伺服器，請選擇您要用於工作流程的伺服器。
   + 或者，建立新的伺服器，並將工作流程新增至其中。如需詳細資訊，請參閱[設定 SFTP、FTPS 或 FTP 伺服器端點](tf-server-endpoint.md)。

1. 在伺服器的詳細資訊頁面上，向下捲動至**其他詳細資訊**區段，然後選擇**編輯**。
**注意**  
 根據預設，伺服器沒有任何相關聯的工作流程。您可以使用**其他詳細資訊**區段，將工作流程與所選伺服器建立關聯。

1. 在**編輯其他詳細資訊**頁面的**受管工作流程**區段中，選取要在所有上傳上執行的工作流程。
**注意**  
如果您還沒有工作流程，請選擇**建立新工作流程**來建立工作流程。

   1. 選擇要使用的工作流程 ID。

   1. 選擇執行角色。這是 Transfer Family 在執行工作流程步驟時擔任的角色。如需詳細資訊，請參閱[工作流程的 IAM 政策](workflow-execution-role.md)。選擇 **Save** (儲存)。  
![\[受管工作流程畫面，顯示工作流程和執行角色的值。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-addtoserver.png)

**注意**  
如果您不再希望工作流程與伺服器建立關聯，您可以移除關聯。如需詳細資訊，請參閱[從 Transfer Family 伺服器移除工作流程](transfer-workflows.md#remove-workflow-association)。

**執行工作流程**

若要執行工作流程，您可以將檔案上傳到使用相關聯工作流程設定的 Transfer Family 伺服器。

**注意**  
每當您從伺服器移除工作流程並將其取代為新的工作流程，或更新伺服器組態 （這會影響工作流程的執行角色） 時，您必須等待大約 10 分鐘，才能執行新的工作流程。Transfer Family 伺服器會快取工作流程詳細資訊，伺服器重新整理其快取需要 10 分鐘。  
此外，您必須登出任何作用中的 SFTP 工作階段，然後在 10 分鐘的等待期間之後重新登入，以查看變更。

**Example**  

```
# Execute a workflow
> sftp bob@s-1234567890abcdef0.server.transfer.us-east-1.amazonaws.com

Connected to s-1234567890abcdef0.server.transfer.us-east-1.amazonaws.com.
sftp> put doc1.pdf
Uploading doc1.pdf to /amzn-s3-demo-bucket/home/users/bob/doc1.pdf
doc1.pdf                                                                    100% 5013KB 601.0KB/s   00:08    
sftp> exit
>
```

上傳檔案後，定義的動作會在您的檔案上執行。例如，如果您的工作流程包含複製步驟，檔案會複製到您在該步驟中定義的位置。您可以使用 Amazon CloudWatch Logs 來追蹤執行的步驟及其執行狀態。

## 檢視工作流程詳細資訊
<a name="view-details-workflow"></a>

您可以檢視先前建立的工作流程或工作流程執行的詳細資訊。若要檢視這些詳細資訊，您可以使用 主控台或 AWS Command Line Interface (AWS CLI)。

------
#### [ Console ]

**檢視工作流程詳細資訊**

1. 在 https：//[https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/) 開啟 AWS Transfer Family 主控台。

1. 在左側導覽窗格中，選擇**工作流程**。

1. 在**工作流程**頁面上，選擇工作流程。

   工作流程詳細資訊頁面隨即開啟。  
![\[Transfer Family 工作流程的工作流程詳細資訊畫面，顯示描述、步驟、例外狀況處理常式和傳輸中執行。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-overview.png)

------
#### [ CLI ]

若要檢視工作流程詳細資訊，請使用 `describe-workflow` CLI 命令，如下列範例所示。將工作流程 ID 取代`w-1234567890abcdef0`為您自己的值。如需詳細資訊，請參閱《 *AWS CLI 命令參考*》中的 [ describe-workflow](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/transfer/describe-workflow.html)。

```
# View Workflow details
> aws transfer describe-workflow --workflow-id w-1234567890abcdef0
{
    "Workflow": {
        "Arn": "arn:aws:transfer:us-east-1:111122223333:workflow/w-1234567890abcdef0",
        "WorkflowId": "w-1234567890abcdef0",
        "Name": "Copy file to shared_files",
        "Steps": [
            {
                "Type": "COPY",
                "CopyStepDetails": {
                "Name": "Copy to shared",
                "FileLocation": {
                    "S3FileLocation": {
                        "Bucket": "amzn-s3-demo-bucket",
                        "Key": "home/shared_files/"
                    }
                }
                }
            }
        ],
        "OnException": {}
    }
}
```

------

如果您的工作流程是建立為 AWS CloudFormation 堆疊的一部分，您可以使用 CloudFormation 主控台 ([https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)：//) 來管理工作流程。

![\[屬於 堆疊之 AWS CloudFormation 工作流程的工作流程詳細資訊畫面，顯示您在 CloudFormation 中管理此工作流程的訊息。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-cloudformation-link.png)


# 使用預先定義的步驟
<a name="nominal-steps-workflow"></a>

當您建立工作流程時，您可以選擇新增下列其中一個本主題中討論的預先定義步驟。您也可以選擇新增自己的自訂檔案處理步驟。如需詳細資訊，請參閱[使用自訂檔案處理步驟](custom-step-details.md)。

**Topics**
+ [複製檔案](#copy-step-details)
+ [解密檔案](#decrypt-step-details)
+ [標籤檔案](#tag-step-details)
+ [刪除檔案](#delete-step-details)
+ [工作流程的命名變數](#workflow-named-variables)
+ [範例標籤和刪除工作流程](#sourcefile-workflow)

## 複製檔案
<a name="copy-step-details"></a>

複製檔案步驟會在新的 Amazon S3 位置建立上傳檔案的副本。目前，您只能搭配 Amazon S3 使用複製檔案步驟。

下列複製檔案步驟會將檔案複製到 *amzn-s3-demo-destination-bucket* 中的 `test` 資料夾。

如果複製檔案步驟不是工作流程的第一個步驟，您可以指定**檔案位置**。透過指定檔案位置，您可以複製上一個步驟中使用的檔案或上傳的原始檔案。您可以使用此功能來製作原始檔案的多個副本，同時保持來源檔案完整，以供檔案封存和記錄保留。如需範例，請參閱 [範例標籤和刪除工作流程](#sourcefile-workflow)。

![\[工作流程畫面，已選取複製從上一個步驟...建立的檔案。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-step-copy.png)


### 提供儲存貯體和金鑰詳細資訊
<a name="copy-provide-bucket"></a>

您必須提供複製檔案步驟目的地的儲存貯體名稱和金鑰。金鑰可以是路徑名稱或檔案名稱。是否將金鑰視為路徑名稱或檔案名稱，取決於您是否以正斜線 (`/`) 字元結束金鑰。

如果最後一個字元是 `/`，您的檔案會複製到 資料夾，且其名稱不會變更。如果最後一個字元是英數字元，您上傳的檔案會重新命名為金鑰值。在這種情況下，如果具有該名稱的檔案已存在，則行為取決於**覆寫現有**欄位的設定。
+ 如果選取**覆寫現有**檔案，則會將現有檔案取代為正在處理的檔案。
+ 如果未選取**覆寫現有** ，則不會發生任何情況，且工作流程處理會停止。
**提示**  
如果在相同的檔案路徑上執行並行寫入，可能會在覆寫檔案時產生非預期的行為。

例如，如果您的金鑰值為 `test/`，您上傳的檔案會複製到 `test` 資料夾。如果您的金鑰值為 `test/today`，則您上傳****的每個檔案都會複製到 `today` `test` 資料夾中名為 的檔案，而每個後續檔案都會覆寫先前的檔案。

**注意**  
Amazon S3 支援儲存貯體與物件，且沒有任何階層。不過，您可以在物件金鑰名稱中使用字首和分隔符號來暗示階層，並以類似於資料夾的方式整理資料。

### 在複製檔案步驟中使用具名變數
<a name="named-variable-copy"></a>

在複製檔案步驟中，您可以使用 變數，將檔案動態複製到使用者特定的資料夾。目前，您可以使用 `${transfer:UserName}`或 `${transfer:UploadDate}`作為變數，將檔案複製到上傳檔案之特定使用者的目的地位置，或根據目前日期。

在下列範例中，如果使用者`richard-roe`上傳檔案，則會將其複製到 `amzn-s3-demo-destination-bucket/richard-roe/processed/` 資料夾。如果使用者`mary-major`上傳檔案，則會將其複製到 `amzn-s3-demo-destination-bucket/mary-major/processed/` 資料夾。

![\[複製步驟的參數畫面，顯示使用 參數化的儲存貯體和金鑰UserName。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-step-copy-dynamic.png)


同樣地，您可以使用 `${transfer:UploadDate}`做為變數，將檔案複製到目前日期名為 的目的地位置。在下列範例中，如果您在 2022 年 2 月 1 `${transfer:UploadDate}/processed` 日將目的地設定為 ，上傳的檔案會複製到 `amzn-s3-demo-destination-bucket/2022-02-01/processed/` 資料夾。

![\[複製步驟的參數畫面，顯示使用 參數化的儲存貯體和金鑰UploadDate。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-step-copy-dynamic-date.png)


您也可以結合這兩個變數的功能。例如，您可以將**目的地金鑰字首**設定為 **folder/\$1\$1transfer:UserName\$1/\$1\$1transfer:UploadDate\$1/**，這會建立巢狀資料夾，例如 `folder/marymajor/2023-01-05/`。

### 複製步驟的 IAM 許可
<a name="copy-step-iam"></a>

若要允許複製步驟成功，請確定工作流程的執行角色包含下列許可。

```
{
    "Sid": "ListBucket",
    "Effect": "Allow",
    "Action": "s3:ListBucket",
    "Resource": [
        "arn:aws:s3:::amzn-s3-demo-destination-bucket"
    ]
}, {
    "Sid": "HomeDirObjectAccess",
    "Effect": "Allow",
    "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObjectVersion",
        "s3:DeleteObject",
        "s3:GetObjectVersion"
    ],
    "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
}
```

**注意**  
只有在您未選取**覆寫現有**時，才需要 `s3:ListBucket`許可。此許可會檢查您的儲存貯體，以查看是否有同名的檔案已存在。如果您已選取**覆寫現有**檔案，則工作流程不需要檢查檔案，而且只能寫入檔案。  
如果您的 Amazon S3 檔案有標籤，您需要將一或兩個許可新增至 IAM 政策。  
`s3:GetObjectTagging` 針對未進行版本控制的 Amazon S3 檔案新增 。
`s3:GetObjectVersionTagging` 為版本控制的 Amazon S3 檔案新增 。

## 解密檔案
<a name="decrypt-step-details"></a>

 AWS 儲存部落格有一篇文章，說明如何簡單地解密檔案，而無需使用 Transfer Family Managed 工作流程撰寫任何程式碼、[使用 PGP 和 加密和解密檔案 AWS Transfer Family](https://aws.amazon.com/blogs/storage/encrypt-and-decrypt-files-with-pgp-and-aws-transfer-family/)。

### 支援的對稱加密演算法
<a name="symmetric-algorithms"></a>

對於 PGP 解密，Transfer Family 支援對稱加密演算法，這些演算法用於加密 PGP 檔案中的實際檔案資料。
+ 如需支援對稱加密演算法的詳細資訊，請參閱 [PGP 對稱加密演算法](key-management.md#pgp-symmetric-algorithms)。
+ 如需有關搭配這些對稱演算法使用的 PGP 金鑰對演算法的資訊，請參閱 [PGP 金鑰對演算法](key-management.md#pgp-key-algorithms)。

### 在工作流程中使用 PGP 解密
<a name="configure-decryption"></a>

Transfer Family 內建支援 Pretty Good Privacy (PGP) 解密。您可以在透過 SFTP、FTPS 或 FTP 上傳到 Amazon Simple Storage Service (Amazon S3) 或 Amazon Elastic File System (Amazon EFS) 的檔案上使用 PGP 解密。

若要使用 PGP 解密，您必須建立和存放用於檔案解密的 PGP 私有金鑰。然後，您的使用者可以在將檔案上傳至 Transfer Family 伺服器之前，使用對應的 PGP 加密金鑰來加密檔案。收到加密的檔案後，您可以在工作流程中解密這些檔案。如需詳細教學，請參閱[設定用於解密檔案的受管工作流程](workflow-decrypt-tutorial.md)。

如需支援的 PGP 演算法和建議的相關資訊，請參閱 [PGP 加密和解密演算法](key-management.md#pgp-encryption-algorithms)。

**在工作流程中使用 PGP 解密**

1. 識別 Transfer Family 伺服器以託管您的工作流程，或建立新的工作流程。您需要有伺服器 ID，才能將 PGP 金鑰 AWS Secrets Manager 以正確的秘密名稱存放在 中。

1. 將您的 PGP 金鑰存放在所需的秘密名稱 AWS Secrets Manager 下。如需詳細資訊，請參閱[管理 PGP 金鑰](manage-pgp-keys.md)。工作流程可以根據 Secrets Manager 中的秘密名稱，自動找到要用於解密的正確 PGP 金鑰。
**注意**  
當您將秘密存放在 Secrets Manager 時， AWS 帳戶 會產生費用。如需關於定價的資訊，請參閱[AWS Secrets Manager 定價](https://aws.amazon.com/secrets-manager/pricing)。

1. 使用您的 PGP 金鑰對加密檔案。（如需支援的用戶端清單，請參閱 [支援的 PGP 用戶端](pgp-key-clients.md)。) 如果您使用命令列，請執行下列命令。若要使用此命令，請將 `username@example.com`取代為您用來建立 PGP 金鑰對的電子郵件地址。`testfile.txt` 將 取代為您要加密的檔案名稱。

   ```
   gpg -e -r username@example.com testfile.txt
   ```
**重要**  
加密檔案以搭配 AWS Transfer Family 工作流程使用時，請務必使用 `-r` 參數來指定非匿名收件人。匿名加密 （未指定收件人） 可能會導致工作流程中的解密失敗，因為系統無法識別要用於解密的金鑰。此問題的偵錯資訊可在 取得[對匿名收件人加密問題進行故障診斷](workflow-issues.md#workflows-decrypt-anonymous)。

1. 將加密的檔案上傳至 Transfer Family 伺服器。

1. 在工作流程中設定解密步驟。如需詳細資訊，請參閱[新增解密步驟](#decrypt-step-procedure)。

### 新增解密步驟
<a name="decrypt-step-procedure"></a>

解密步驟會解密在工作流程中上傳至 Amazon S3 或 Amazon EFS 的加密檔案。如需設定解密的詳細資訊，請參閱 [在工作流程中使用 PGP 解密](#configure-decryption)。

當您為工作流程建立解密步驟時，您必須指定解密檔案的目的地。如果檔案已存在於目的地位置，您也必須選取是否覆寫現有檔案。您可以使用 Amazon CloudWatch Logs 監控解密工作流程結果，並即時取得每個檔案的稽核日誌。

選擇步驟的 **Decrypt 檔案類型**後，即會顯示**設定參數**頁面。填寫**設定 PGP 解密參數**區段的值。

可用的選項如下所示：
+ **步驟名稱** – 輸入步驟的描述性名稱。
+ **檔案位置** – 透過指定檔案位置，您可以解密上一個步驟中使用的檔案或上傳的原始檔案。
**注意**  
如果此步驟是工作流程的第一個步驟，則無法使用此參數。
+ **解密檔案的目的地** – 選擇 Amazon S3 儲存貯體或 Amazon EFS 檔案系統做為解密檔案的目的地。
  + 如果您選擇 Amazon S3，則必須提供目的地儲存貯體名稱和目的地金鑰字首。若要依使用者名稱參數化目的地金鑰字首，請在目的地金鑰字首中輸入 **\$1\$1transfer:UserName\$1** 。 ****同樣地，若要依上傳日期參數化目的地金鑰字首，請在目的地金鑰字首輸入 **\$1\$1Transfer:UploadDate\$1** 。 ****
  + 如果您選擇 Amazon EFS，則必須提供目的地檔案系統和路徑。
**注意**  
您在此處選擇的儲存選項必須與與此工作流程相關聯的 Transfer Family 伺服器所使用的儲存系統相符。否則，當您嘗試執行此工作流程時，會收到錯誤。
+ **覆寫現有**檔案 – 如果您上傳檔案，且目的地已存在具有相同檔案名稱的檔案，則行為取決於此參數的設定：
  + 如果選取**覆寫現有**檔案，則會將現有檔案取代為正在處理的檔案。
  + 如果未選取**覆寫現有** ，則不會發生任何情況，且工作流程處理會停止。
**提示**  
如果在相同的檔案路徑上執行並行寫入，可能會在覆寫檔案時產生非預期的行為。

下列螢幕擷取畫面顯示您可能會為解密檔案步驟選擇的選項範例。

![\[AWS Transfer Family 主控台，顯示使用範例值設定 PGP 解密參數區段。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-step-decrypt-details.png)


### 解密步驟的 IAM 許可
<a name="decrypt-step-iam"></a>

若要允許解密步驟成功，請確定工作流程的執行角色包含下列許可。

```
{
    "Sid": "ListBucket",
    "Effect": "Allow",
    "Action": "s3:ListBucket",
    "Resource": [
        "arn:aws:s3:::amzn-s3-demo-destination-bucket"
    ]
}, {
    "Sid": "HomeDirObjectAccess",
    "Effect": "Allow",
    "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObjectVersion",
        "s3:DeleteObject",
        "s3:GetObjectVersion"
    ],
    "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
}, {
    "Sid": "Decrypt",
    "Effect": "Allow",
    "Action": [
        "secretsmanager:GetSecretValue",
    ],
    "Resource": "arn:aws:secretsmanager:region:account-id:secret:aws/transfer/*"
}
```

**注意**  
只有在您未選取**覆寫現有**時，才需要 `s3:ListBucket`許可。此許可會檢查您的儲存貯體，以查看是否有同名的檔案已存在。如果您已選取**覆寫現有**檔案，則工作流程不需要檢查檔案，而且只能寫入檔案。  
如果您的 Amazon S3 檔案有標籤，您需要將一或兩個許可新增至 IAM 政策。  
`s3:GetObjectTagging` 針對未進行版本控制的 Amazon S3 檔案新增 。
`s3:GetObjectVersionTagging` 為版本控制的 Amazon S3 檔案新增 。

## 標籤檔案
<a name="tag-step-details"></a>

若要標記傳入檔案以供進一步下游處理，請使用標籤步驟。輸入您要指派給傳入檔案的標籤值。目前，只有在您將 Amazon S3 用於 Transfer Family 伺服器儲存體時，才支援標籤操作。

下列範例標籤步驟會分別指派 `scan_outcome`和 `clean`做為標籤索引鍵和值。

![\[工作流程畫面顯示標記步驟的詳細資訊。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-step-tag.png)


若要允許標籤步驟成功，請確定工作流程的執行角色包含下列許可。

```
{
            "Sid": "Tag",
            "Effect": "Allow",
            "Action": [
                "s3:PutObjectTagging",
                "s3:PutObjectVersionTagging"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
}
```

**注意**  
如果您的工作流程包含複製或解密步驟之前執行的標籤步驟，您需要將一或兩個許可新增至 IAM 政策。  
`s3:GetObjectTagging` 針對未進行版本控制的 Amazon S3 檔案新增 。
`s3:GetObjectVersionTagging` 為版本控制的 Amazon S3 檔案新增 。

## 刪除檔案
<a name="delete-step-details"></a>

若要從先前的工作流程步驟中刪除已處理的檔案，或刪除最初上傳的檔案，請使用刪除檔案步驟。

![\[工作流程畫面顯示刪除步驟的詳細資訊。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-step-delete.png)


若要允許刪除步驟成功，請確定工作流程的執行角色包含下列許可。

```
{
            "Sid": "Delete",
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObjectVersion",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:secretsmanager:region:account-ID:secret:aws/transfer/*"
        }
```

## 工作流程的命名變數
<a name="workflow-named-variables"></a>

對於複製和解密步驟，您可以使用 變數來動態執行動作。目前， AWS Transfer Family 支援下列具名變數。
+ 使用 根據上傳檔案的使用者`${transfer:UserName}`，將檔案複製或解密至目的地。
+ 使用 根據目前日期`${transfer:UploadDate}`將檔案複製或解密至目的地位置。

## 範例標籤和刪除工作流程
<a name="sourcefile-workflow"></a>

下列範例說明的工作流程會標記需要由下游應用程式處理的傳入檔案，例如資料分析平台。標記傳入檔案之後，工作流程接著會刪除最初上傳的檔案，以節省儲存成本。

------
#### [ Console ]

**範例標籤和移動工作流程**

1. 在 https：//[https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/) 開啟 AWS Transfer Family 主控台。

1. 在左側導覽窗格中，選擇**工作流程**。

1. 在**工作流程**頁面上，選擇**建立工作流程**。

1. 在**建立工作流程**頁面上，輸入描述。此描述會顯示在**工作流程**頁面上。

1. 新增第一個步驟 （複製）。

   1. 在**名義步驟**區段中，選擇**新增步驟**。

   1. 選擇**複製檔案**，然後選擇**下一步**。

   1. 輸入步驟名稱，然後選取目的地儲存貯體和金鑰字首。  
![\[工作流程畫面顯示複製步驟的詳細資訊，顯示目的地儲存貯體和金鑰字首。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-step-copy-first-step.png)

   1. 選擇**下一步**，然後檢閱步驟的詳細資訊。

   1. 選擇**建立步驟**來新增步驟並繼續。

1. 新增第二個步驟 （標籤）。

   1. 在**名義步驟**區段中，選擇**新增步驟**。

   1. 選擇**標籤檔案**，然後選擇**下一步**。

   1. 輸入步驟名稱。

   1. 針對**檔案位置**，選取**標記從上一個步驟建立的檔案**。

   1. 輸入**Key** (索引鍵) 和 **Value** (值)。  
![\[標記工作流程步驟的組態畫面，並選取標記從上一個步驟建立的檔案選項按鈕。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-step-tag.png)

   1. 選擇**下一步**，然後檢閱步驟的詳細資訊。

   1. 選擇**建立步驟**以新增步驟並繼續。

1. 新增第三個步驟 （刪除）。

   1. 在**名義步驟**區段中，選擇**新增步驟**。

   1. 選擇**刪除檔案**，然後選擇**下一步**。  
![\[刪除工作流程步驟的組態畫面，並選取刪除原始來源檔案選項按鈕。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-step-delete.png)

   1. 輸入步驟名稱。

   1. 針對**檔案位置**，選取**刪除原始來源檔案**。

   1. 選擇**下一步**，然後檢閱步驟的詳細資訊。

   1. 選擇**建立步驟**以新增步驟並繼續。

1. 檢閱工作流程組態，然後選擇**建立工作流程**。

------
#### [ CLI ]

**範例標籤和移動工作流程**

1. 將下列程式碼儲存至檔案；例如 `tagAndMoveWorkflow.json`。將每個 `user input placeholder` 替換成您自己的資訊。

   ```
   [
      {
          "Type": "COPY",
          "CopyStepDetails": {
             "Name": "CopyStep",
             "DestinationFileLocation": {
                "S3FileLocation": {
                   "Bucket": "amzn-s3-demo-bucket",
                   "Key": "test/"
                }
             }
          }
      },
      {
          "Type": "TAG",
          "TagStepDetails": {
             "Name": "TagStep",
             "Tags": [
                {
                   "Key": "name",
                   "Value": "demo"
                }
             ],
             "SourceFileLocation": "${previous.file}"
          }
      },
      {
         "Type": "DELETE",
         "DeleteStepDetails":{
            "Name":"DeleteStep",
            "SourceFileLocation": "${original.file}"
         }
     }
   ]
   ```

   第一個步驟會將上傳的檔案複製到新的 Amazon S3 位置。第二個步驟會將標籤 （鍵/值對） 新增至複製到新位置的檔案 (`previous.file`)。最後，第三個步驟會刪除原始檔案 (`original.file`)。

1. 從儲存的檔案建立工作流程。將每個 `user input placeholder` 替換成您自己的資訊。

   ```
   aws transfer create-workflow --description "short-description" --steps file://path-to-file --region region-ID
   ```

   例如：

   ```
   aws transfer create-workflow --description "copy-tag-delete workflow" --steps file://tagAndMoveWorkflow.json --region us-east-1
   ```
**注意**  
如需使用檔案載入參數的詳細資訊，請參閱[如何從檔案載入參數](https://docs.aws.amazon.com//cli/latest/userguide/cli-usage-parameters-file.html)。

1. 更新現有的伺服器。
**注意**  
此步驟假設您已經有 Transfer Family 伺服器，而且您想要將工作流程與其建立關聯。如果沒有，請參閱 [設定 SFTP、FTPS 或 FTP 伺服器端點](tf-server-endpoint.md)。將每個 `user input placeholder` 替換成您自己的資訊。

   ```
   aws transfer update-server --server-id server-ID --region region-ID 
     --workflow-details '{"OnUpload":[{ "WorkflowId": "workflow-ID","ExecutionRole": "execution-role-ARN"}]}'
   ```

   例如：

   ```
   aws transfer update-server --server-id s-1234567890abcdef0 --region us-east-2 
     --workflow-details '{"OnUpload":[{ "WorkflowId": "w-abcdef01234567890","ExecutionRole": "arn:aws:iam::111111111111:role/nikki-wolf-execution-role"}]}'
   ```

------

# 使用自訂檔案處理步驟
<a name="custom-step-details"></a>

透過使用自訂檔案處理步驟，您可以使用 使用自有檔案處理邏輯 AWS Lambda。到達檔案時，Transfer Family 伺服器會叫用包含自訂檔案處理邏輯的 Lambda 函數，例如加密檔案、掃描惡意軟體或檢查不正確的檔案類型。在下列範例中，目標 AWS Lambda 函數用於處理上一個步驟的輸出檔案。

![\[自訂步驟畫面，並選取套用自訂處理至從上一個步驟建立的檔案選項按鈕，以及目標欄位中顯示的 Lambda 函數。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-step-custom.png)


**注意**  
如需 Lambda 函數的範例，請參閱[自訂工作流程步驟的範例 Lambda 函數](#example-workflow-lambda)。如需範例事件 （包括傳入 Lambda 的檔案位置），請參閱 [檔案上傳 AWS Lambda 時傳送至 的範例事件](#example-workflow-lambdas)。

使用自訂工作流程步驟時，您必須設定 Lambda 函數來呼叫 [SendWorkflowStepState](https://docs.aws.amazon.com/transfer/latest/APIReference/API_SendWorkflowStepState.html) API 操作。 會`SendWorkflowStepState`通知工作流程執行，該步驟已完成，包括成功或失敗狀態。`SendWorkflowStepState` API 操作的狀態會根據 Lambda 函數的結果，叫用線性序列中的例外處理常式步驟或名目步驟。

如果 Lambda 函數失敗或逾時，則步驟會失敗，而您會在 CloudWatch 日誌`StepErrored`中看到 。如果 Lambda 函數是名目步驟的一部分，且函數`SendWorkflowStepState`以 `Status="FAILURE"`或逾時回應 ，則流程會繼續執行例外處理常式步驟。在此情況下，工作流程不會繼續執行剩餘的 （如果有的話） 標稱步驟。如需詳細資訊，請參閱[工作流程的例外狀況處理](transfer-workflows.md#exception-workflow)。

當您呼叫 `SendWorkflowStepState` API 操作時，您必須傳送下列參數：

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

您可以從 Lambda `ExecutionId`函數執行時傳遞的`WorkflowId`輸入事件中擷取 `Token`、 和 （範例如下列各節所示）。`Status` 值可以是 `SUCCESS`或 `FAILURE`。

若要能夠從 Lambda 函數呼叫 `SendWorkflowStepState` API 操作，您必須使用[推出受管工作流程](doc-history.md#workflows-introduced)之後發佈的 AWS SDK 版本。

## 連續使用多個 Lambda 函數
<a name="multiple-lambdas"></a>

當您依序使用多個自訂步驟時，**檔案位置**選項的運作方式會與只使用單一自訂步驟不同。Transfer Family 不支援傳遞 Lambda 處理的檔案，以用作下一個步驟的輸入。因此，如果您有多個自訂步驟都設定為使用 `previous.file`選項，則它們都使用相同的檔案位置 （第一個自訂步驟的輸入檔案位置）。

**注意**  
如果您在自訂步驟之後有預先定義的步驟 （標籤、複製、解密或刪除），`previous.file`則設定的運作方式也不同。如果預先定義的步驟設定為使用 `previous.file`設定，預先定義的步驟會使用自訂步驟所使用的相同輸入檔案。來自自訂步驟的已處理檔案不會傳遞至預先定義的步驟。

## 在自訂處理之後存取檔案
<a name="process-uploaded-file"></a>

如果您使用 Amazon S3 做為儲存體，而且您的工作流程包含對原始上傳的檔案執行動作的自訂步驟，則後續步驟無法存取該已處理的檔案。也就是說，自訂步驟之後的任何步驟都無法參考來自自訂步驟輸出的更新檔案。

例如，假設您在工作流程中有下列三個步驟。
+ **步驟 1** – 上傳名為 的檔案`example-file.txt`。
+ **步驟 2** – 叫用`example-file.txt`以某種方式變更的 Lambda 函數。
+ **步驟 3** – 嘗試對更新版本的 執行進一步處理`example-file.txt`。

如果您將步驟 3 `sourceFileLocation`的 設定為 `${original.file}`，步驟 3 會使用在步驟 1 中將檔案上傳至儲存體時來自 的原始檔案位置。如果您使用 `${previous.file}`進行步驟 3，步驟 3 會重複使用步驟 2 用作輸入的檔案位置。

因此，步驟 3 會導致錯誤。例如，如果步驟 3 嘗試複製更新的 `example-file.txt`，您會收到下列錯誤：

```
{
    "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"
    },
```

發生此錯誤是因為自訂步驟修改 的實體標籤 (ETag)，`example-file.txt`使其不符合原始檔案。

**注意**  
如果您使用 Amazon EFS，則不會發生此行為，因為 Amazon EFS 不會使用實體標籤來識別檔案。

## 檔案上傳 AWS Lambda 時傳送至 的範例事件
<a name="example-workflow-lambdas"></a>

下列範例顯示檔案上傳完成 AWS Lambda 時傳送至 的事件。其中一個範例使用 Transfer Family 伺服器，其中網域是使用 Amazon S3 設定。另一個範例使用 Transfer Family 伺服器，其中網域使用 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"
    }
}
```

------

## 自訂工作流程步驟的範例 Lambda 函數
<a name="example-workflow-lambda"></a>

下列 Lambda 函數會擷取有關執行狀態的資訊，然後呼叫 [SendWorkflowStepState](https://docs.aws.amazon.com/transfer/latest/APIReference/API_SendWorkflowStepState.html) API 操作，將狀態傳回至步驟的工作流程： `SUCCESS`或 `FAILURE`。在函數呼叫 `SendWorkflowStepState` API 操作之前，您可以設定 Lambda 根據您的工作流程邏輯採取動作。

```
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)
    }
```

## 自訂步驟的 IAM 許可
<a name="custom-step-iam"></a>

若要允許呼叫 Lambda 的步驟成功，請確定工作流程的執行角色包含下列許可。

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

# 工作流程的 IAM 政策
<a name="workflow-execution-role"></a>

當您將工作流程新增至伺服器時，您必須選取執行角色。伺服器會在執行工作流程時使用此角色。如果角色沒有適當的許可， AWS Transfer Family 則無法執行工作流程。

本節說明一組可用於執行工作流程的 AWS Identity and Access Management (IAM) 許可。本主題稍後將說明其他範例。

**注意**  
如果您的 Amazon S3 檔案有標籤，您需要將一或兩個許可新增至 IAM 政策。  
`s3:GetObjectTagging` 針對未進行版本控制的 Amazon S3 檔案新增 。
`s3:GetObjectVersionTagging` 為版本控制的 Amazon S3 檔案新增 。

**為您的工作流程建立執行角色**

1. 建立新的 IAM 角色，並將 AWS 受管政策新增至`AWSTransferFullAccess`角色。如需建立新 IAM 角色的詳細資訊，請參閱 [建立 IAM 角色和政策](requirements-roles.md)。

1. 建立具有下列許可的另一個政策，並將其連接到您的角色。將每個 `user input placeholder` 替換成您自己的資訊。  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ConsoleAccess",
               "Effect": "Allow",
               "Action": "s3:GetBucketLocation",
               "Resource": "*"
           },
           {
               "Sid": "ListObjectsInBucket",
               "Effect": "Allow",
               "Action": "s3:ListBucket",
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket"
               ]
           },
           {
               "Sid": "AllObjectActions",
               "Effect": "Allow",
               "Action": "s3:*Object",
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket/*"
               ]
           },
           {
               "Sid": "GetObjectVersion",
               "Effect": "Allow",
               "Action": "s3:GetObjectVersion",
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket/*"
               ]
           },
           {
               "Sid": "Custom",
               "Effect": "Allow",
               "Action": [
                   "lambda:InvokeFunction"
               ],
               "Resource": [
                   "arn:aws:lambda:us-east-1:123456789012:function:function-name"
               ]
           },
           {
               "Sid": "Tag",
               "Effect": "Allow",
               "Action": [
                   "s3:PutObjectTagging",
                   "s3:PutObjectVersionTagging"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket/*"
               ]
           }
       ]
   }
   ```

1. 將工作流程新增至伺服器時，請儲存此角色並將其指定為執行角色。
**注意**  
當您建構 IAM 角色時， AWS 建議您盡可能限制對資源的存取工作流程。

## 工作流程信任關係
<a name="workflows-trust"></a>

工作流程執行角色也需要與 建立信任關係`transfer.amazonaws.com`。若要建立 的信任關係 AWS Transfer Family，請參閱 [建立信任關係](requirements-roles.md#establish-trust-transfer)。

當您建立信任關係時，您也可以採取步驟來避免*混淆代理人*問題。如需此問題的說明，以及如何避免此問題的範例，請參閱 [預防跨服務混淆代理人](confused-deputy.md)。

## 範例執行角色：解密、複製和標記
<a name="example-workflow-role-copy-tag"></a>

如果您有包含標記、複製和解密步驟的工作流程，您可以使用下列 IAM 政策。將每個 `user input placeholder` 替換成您自己的資訊。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CopyRead",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectTagging",
                "s3:GetObjectVersionTagging"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-source-bucket/*"
        },
        {
            "Sid": "CopyWrite",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectTagging"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
        },
        {
            "Sid": "CopyList",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-source-bucket",
                "arn:aws:s3:::amzn-s3-demo-destination-bucket"
            ]
        },
        {
            "Sid": "Tag",
            "Effect": "Allow",
            "Action": [
                "s3:PutObjectTagging",
                "s3:PutObjectVersionTagging"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:RequestObjectTag/Archive": "yes"
                }
            }
        },
        {
            "Sid": "ListBucket",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-destination-bucket"
            ]
        },
        {
            "Sid": "HomeDirObjectAccess",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObjectVersion",
                "s3:DeleteObject",
                "s3:GetObjectVersion"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
        },
        {
            "Sid": "Decrypt",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:aws/transfer/*"
        }
    ]
}
```

## 範例執行角色：執行 函數和刪除
<a name="example-workflow-role-custom-delete"></a>

在此範例中，您有一個叫用 AWS Lambda 函數的工作流程。如果工作流程刪除上傳的檔案，並具有例外狀況處理常式步驟來處理上一個步驟中失敗的工作流程執行，請使用下列 IAM 政策。將每個 `user input placeholder` 替換成您自己的資訊。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Delete",
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObject",
                "s3:DeleteObjectVersion"
            ],
            "Resource": "arn:aws:s3:::bucket-name"
        },
        {
            "Sid": "Custom",
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:us-east-1:123456789012:function:function-name"
            ]
        }
    ]
}
```

## 工作流程的例外狀況處理
<a name="exception-workflow"></a>

如果在工作流程執行期間發生任何錯誤，則會執行您指定的例外狀況處理步驟。您可以指定工作流程的錯誤處理步驟，方式與指定工作流程的標稱步驟相同。例如，假設您已在名目步驟中設定自訂處理，以驗證傳入的檔案。如果檔案驗證失敗，例外狀況處理步驟可以傳送電子郵件給管理員。

下列範例工作流程包含兩個步驟：
+ 檢查上傳檔案是否為 CSV 格式的名目步驟
+ 例外狀況處理步驟，會在上傳的檔案不是 CSV 格式且名目步驟失敗時傳送電子郵件

若要啟動例外狀況處理步驟，名目步驟中的 AWS Lambda 函數必須以 回應`Status="FAILURE"`。如需工作流程中錯誤處理的詳細資訊，請參閱 [使用自訂檔案處理步驟](custom-step-details.md)。

![\[\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflow-exception-sample.png)


# 監控工作流程執行
<a name="cloudwatch-workflow"></a>

Amazon CloudWatch AWS 雲端 會即時監控您在 中執行 AWS 的資源和應用程式。您可以使用 Amazon CloudWatch 來收集和追蹤指標，這是您可以為工作流程測量的變數。您可以使用 Amazon CloudWatch 檢視工作流程指標和合併日誌。

## 工作流程的 CloudWatch 記錄
<a name="cloudwatch-workflow-logs"></a>

CloudWatch 提供工作流程進度和結果的合併稽核和記錄。

**檢視工作流程的 Amazon CloudWatch logs**

1. 在 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 Amazon CloudWatch 主控台。

1. 在左側導覽窗格中，選擇**日誌**，然後選擇**日誌群組**。

1. 在**日誌群組**頁面上的導覽列上，為您的 AWS Transfer Family 伺服器選擇正確的區域。

1. 選擇對應至您伺服器的日誌群組。

   例如，如果您的伺服器 ID 為 `s-1234567890abcdef0`，您的日誌群組為 `/aws/transfer/s-1234567890abcdef0`。

1. 在伺服器的日誌群組詳細資訊頁面上，會顯示最新的日誌串流。您要探索的使用者有兩個日誌串流：
   + 每個 Secure Shell (SSH) 檔案傳輸通訊協定 (SFTP) 工作階段各一個。
   + 一個 用於為您的伺服器執行的工作流程。工作流程的日誌串流格式為 `username.workflowID.uniqueStreamSuffix`。

   例如，如果您的使用者是 `mary-major`，您有下列日誌串流：

   ```
   mary-major-east.1234567890abcdef0
   mary.w-abcdef01234567890.021345abcdef6789
   ```
**注意**  
 此範例中列出的 16 位數英數識別符是虛構的。您在 Amazon CloudWatch 中看到的值不同。

的**日誌事件**頁面`mary-major-usa-east.1234567890abcdef0`會顯示每個使用者工作階段的詳細資訊，而`mary.w-abcdef01234567890.021345abcdef6789`日誌串流包含工作流程的詳細資訊。

 以下是 的範例日誌串流`mary.w-abcdef01234567890.021345abcdef6789`，以包含複製步驟的工作流程 (`w-abcdef01234567890`) 為基礎。

```
{
    "type": "ExecutionStarted",
    "details": {
        "input": {
            "initialFileLocation": {
                "bucket": "amzn-s3-demo-bucket",
                "key": "mary/workflowSteps2.json",
                "versionId": "version-id",
                "etag": "etag-id"
            }
        }
    },
    "workflowId":"w-abcdef01234567890",
    "executionId":"execution-id",
    "transferDetails": {
        "serverId":"s-server-id",
        "username":"mary",
        "sessionId":"session-id"
    }
},
{
    "type":"StepStarted",
    "details": {
        "input": {
            "fileLocation": {
                "backingStore":"S3",
                "bucket":"amzn-s3-demo-bucket",
                "key":"mary/workflowSteps2.json",
                "versionId":"version-id",
                "etag":"etag-id"
            }
        },
        "stepType":"COPY",
        "stepName":"copyToShared"
    },
    "workflowId":"w-abcdef01234567890",
    "executionId":"execution-id",
    "transferDetails": {
        "serverId":"s-server-id",
        "username":"mary",
        "sessionId":"session-id"
    }
},
{
    "type":"StepCompleted",
    "details":{
        "output":{},
        "stepType":"COPY",
        "stepName":"copyToShared"
    },
    "workflowId":"w-abcdef01234567890",
    "executionId":"execution-id",
    "transferDetails":{
        "serverId":"server-id",
        "username":"mary",
        "sessionId":"session-id"
    }
},
{
    "type":"ExecutionCompleted",
    "details": {},
    "workflowId":"w-abcdef01234567890",
    "executionId":"execution-id",
    "transferDetails":{
        "serverId":"s-server-id",
        "username":"mary",
        "sessionId":"session-id"
    }
}
```

## 工作流程的 CloudWatch 指標
<a name="cloudwatch-workflows-metrics"></a>

AWS Transfer Family 為工作流程提供數個指標。您可以檢視前一分鐘有多少工作流程執行開始、成功完成和失敗的指標。Transfer Family 的所有 CloudWatch 指標如 中所述[使用 Transfer Family 伺服器的 CloudWatch 指標](metrics.md)。

# 從範本建立工作流程
<a name="workflow-template"></a>

您可以部署從範本建立工作流程和伺服器的 CloudFormation 堆疊。此程序包含您可以用來快速部署工作流程的範例。

**建立建立 AWS Transfer Family 工作流程和伺服器的 CloudFormation 堆疊**

1. 在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 將下列程式碼儲存至檔案。

------
#### [ YAML ]

   ```
   AWSTemplateFormatVersion: 2010-09-09
   Resources:
     SFTPServer:
       Type: 'AWS::Transfer::Server'
       Properties:
         WorkflowDetails:
           OnUpload:
             - ExecutionRole: workflow-execution-role-arn
               WorkflowId: !GetAtt
                 - TransferWorkflow
                 - WorkflowId
     TransferWorkflow:
       Type: AWS::Transfer::Workflow
       Properties:
         Description: Transfer Family Workflows Blog
         Steps:
           - Type: COPY
             CopyStepDetails:
               Name: copyToUserKey
               DestinationFileLocation:
                 S3FileLocation:
                   Bucket: archived-records
                   Key: ${transfer:UserName}/
               OverwriteExisting: 'TRUE'
           - Type: TAG
             TagStepDetails:
               Name: tagFileForArchive
               Tags:
                 - Key: Archive
                   Value: yes
           - Type: CUSTOM
             CustomStepDetails:
               Name: transferExtract
               Target: arn:aws:lambda:region:account-id:function:function-name
               TimeoutSeconds: 60
           - Type: DELETE
             DeleteStepDetails:
               Name: DeleteInputFile
               SourceFileLocation: '${original.file}'
         Tags:
           - Key: Name
             Value: TransferFamilyWorkflows
   ```

------
#### [ JSON ]

   ```
   {
       "AWSTemplateFormatVersion": "2010-09-09",
       "Resources": {
           "SFTPServer": {
               "Type": "AWS::Transfer::Server",
               "Properties": {
                   "WorkflowDetails": {
                       "OnUpload": [
                           {
                               "ExecutionRole": "workflow-execution-role-arn",
                               "WorkflowId": {
                                   "Fn::GetAtt": [
                                       "TransferWorkflow",
                                       "WorkflowId"
                                   ]
                               }
                           }
                       ]
                   }
               }
           },
           "TransferWorkflow": {
               "Type": "AWS::Transfer::Workflow",
               "Properties": {
                   "Description": "Transfer Family Workflows Blog",
                   "Steps": [
                       {
                           "Type": "COPY",
                           "CopyStepDetails": {
                               "Name": "copyToUserKey",
                               "DestinationFileLocation": {
                                   "S3FileLocation": {
                                       "Bucket": "archived-records",
                                       "Key": "${transfer:UserName}/"
                                   }
                               },
                               "OverwriteExisting": "TRUE"
                           }
                       },
                       {
                           "Type": "TAG",
                           "TagStepDetails": {
                               "Name": "tagFileForArchive",
                               "Tags": [
                                   {
                                       "Key": "Archive",
                                       "Value": "yes"
                                   }
                               ]
                           }
                       },
                       {
                           "Type": "CUSTOM",
                           "CustomStepDetails": {
                               "Name": "transferExtract",
                               "Target": "arn:aws:lambda:region:account-id:function:function-name",
                               "TimeoutSeconds": 60
                           }
                       },
                       {
                           "Type": "DELETE",
                           "DeleteStepDetails": {
                               "Name": "DeleteInputFile",
                               "SourceFileLocation": "${original.file}"
                           }
                       }
                   ],
                   "Tags": [
                       {
                           "Key": "Name",
                           "Value": "TransferFamilyWorkflows"
                       }
                   ]
               }
           }
       }
   }
   ```

------

1. 將下列項目取代為您的實際值。
   + 將 *`workflow-execution-role-arn`* 取代為具有實際工作流程執行角色的 ARN。例如 `arn:aws:transfer:us-east-2:111122223333:workflow/w-1234567890abcdef0`
   + `arn:aws:lambda:region:account-id:function:function-name` 將 取代為 Lambda 函數的 ARN。例如 `arn:aws:lambda:us-east-2:123456789012:function:example-lambda-idp`。

1. 遵循*AWS CloudFormation 《 使用者指南*》中的 CloudFormation 從現有範本部署[堆疊](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-using-console-create-stack-template.html)的指示。

部署堆疊之後，您可以在 CloudFormation 主控台的**輸出**索引標籤中檢視其詳細資訊。範本會建立新的 AWS Transfer Family SFTP 伺服器，使用服務受管使用者和新的工作流程，並將工作流程與新伺服器建立關聯。

## 從 Transfer Family 伺服器移除工作流程
<a name="remove-workflow-association"></a>

如果您已將工作流程與 Transfer Family 伺服器建立關聯，且現在想要移除該關聯，您可以使用主控台或以程式設計方式執行此操作。

------
#### [ Console ]

**從 Transfer Family 伺服器移除工作流程**

1. 在 https：//[https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/) 開啟 AWS Transfer Family 主控台。

1. 在左側導覽窗格中，選擇**伺服器**。

1. 在伺服器 **ID **欄中選擇伺服器的識別符。

1. 在伺服器的詳細資訊頁面上，向下捲動至**其他詳細資訊**區段，然後選擇**編輯**。

1. 在**編輯其他詳細資訊**頁面的**受管工作流程**區段中，清除所有設定的資訊：
   + 從工作流程的工作流程清單中選取破折號 (-) **以完成檔案上傳**。
   + 如果尚未清除，請從工作流程清單中選取破折號 (-) **以進行部分檔案上傳**。
   +  從**受管工作流程執行**角色的角色清單中選取破折號 (-)。

   如果您沒有看到破折號，請向上捲動直到看到它，因為它是每個選單中的第一個值。

   畫面看起來應該如下所示。  
![\[受管工作流程窗格，顯示所有參數已清除。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-remove-from-server.png)

1. 向下捲動並選擇**儲存**以儲存變更。

------
#### [ CLI ]

您可以使用 `update-server`（或 `UpdateServer` API) 呼叫，並為 `OnUpload`和 `OnPartialUpload` 參數提供空引數。

從 中 AWS CLI，執行下列命令：

```
aws transfer update-server --server-id your-server-id --workflow-details '{"OnPartialUpload":[],"OnUpload":[]}'
```

`your-server-id` 以您伺服器的 ID 取代 。例如，如果您的伺服器 ID 為 `s-01234567890abcdef`，則命令如下：

```
aws transfer update-server --server-id s-01234567890abcdef --workflow-details '{"OnPartialUpload":[],"OnUpload":[]}'
```

------

## 受管工作流程的限制
<a name="limitations-workflow"></a>

**限制**

下列限制目前適用於 的上傳後處理工作流程 AWS Transfer Family。
+ 不支援跨帳戶和跨區域 AWS Lambda 函數。不過，您可以跨帳戶複製 ，但前提是您的 AWS Identity and Access Management (IAM) 政策已正確設定。
+ 對於所有工作流程步驟，工作流程存取的任何 Amazon S3 儲存貯體都必須與工作流程本身位於相同的區域。
+ 對於解密步驟，解密目的地必須符合區域和備份存放區的來源 （例如，如果要解密的檔案存放在 Amazon S3 中，則指定的目的地也必須在 Amazon S3 中）。
+ 僅支援非同步自訂步驟。
+ 自訂步驟逾時為近似值。也就是說，逾時可能需要比指定的時間稍長。此外，工作流程取決於 Lambda 函數。因此，如果函數在執行期間延遲，則工作流程不會知道延遲。
+ 如果您超過限流限制，Transfer Family 不會將工作流程操作新增至佇列。
+ 大小為 0 的檔案不會啟動工作流程。大小大於 0 的檔案會啟動相關聯的工作流程。
+ 您可以將檔案處理工作流程連接至使用 AS2 通訊協定的 Transfer Family 伺服器：不過，AS2 訊息不會執行連接到伺服器的工作流程。

**限制**

 此外，下列功能限制適用於 Transfer Family 的工作流程：
+ 每個 帳戶每個區域的工作流程數量限制為 10 個。
+ 自訂步驟的逾時上限為 30 分鐘。
+ 工作流程中的步驟數目上限為 8。
+ 每個工作流程的標籤數量上限為 50。
+ 包含解密步驟的並行執行數目上限為每個工作流程 250 個。
+ 每個使用者每個 Transfer Family 伺服器最多可存放 3 個 PGP 私有金鑰。
+ 解密檔案的大小上限為 10 GB。
+ 我們會使用爆量容量為 100 且重新填充速率為 1 的[字符儲存貯](https://en.wikipedia.org/wiki/Token_bucket)體系統來調節新的執行速率。
+ 每當您從伺服器移除工作流程並將其取代為新的工作流程，或更新伺服器組態 （這會影響工作流程的執行角色） 時，您必須等待大約 10 分鐘，才能執行新的工作流程。Transfer Family 伺服器會快取工作流程詳細資訊，伺服器重新整理其快取需要 10 分鐘。

  此外，您必須登出任何作用中的 SFTP 工作階段，然後在 10 分鐘的等待期間之後重新登入，以查看變更。