

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

# 建立藍圖配置指令碼
<a name="developing-blueprints-code-layout"></a>

藍圖配置指令碼必須包含在工作流程中產生實體的函數。您可以根據喜好命名此功能。AWS Glue 會使用組態檔來判斷函數的完整名稱。

您的配置函數會執行下列操作：
+ (選用) 執行個體化 `Job` 類別以建立 `Job` 物件，並傳遞 `Command` 和 `Role` 等引數。這些是您使用 AWS Glue 主控台或 API 建立任務時需要指定的任務屬性。
+ (選用) 執行個體化 `Crawler` 類別以建立 `Crawler` 物件，並傳遞名稱、角色和目標引數。
+ 若要指出物件 (工作流程實體) 之間的相依性，請傳遞 `DependsOn` 和 `WaitForDependencies` 附加引數至 `Job()` 和 `Crawler()`。本節稍後會說明這些引數。
+ 執行個體化 `Workflow` 類別來建立傳回至 AWS Glue 的工作流程物件，傳遞 `Name` 引數、`Entities` 引數，以及選用的 `OnSchedule` 引數。`Entities` 引數會指定工作流程中要包含的所有任務和爬蟲程式。若要了解如何建構 `Entities` 物件的詳細資訊，請參閱本節稍後提供的範例專案。
+ 傳回 `Workflow` 物件。

如需 `Job`、`Crawler` 及 `Workflow` 類別的定義，請參閱[AWS Glue 藍圖類別參考](developing-blueprints-code-classes.md)。

配置函數必須接受以下輸入引數。


| 引數 | Description | 
| --- | --- | 
| user\$1params | 藍圖參數名稱與值的 Python 字典。如需詳細資訊，請參閱[指定藍圖參數](developing-blueprints-code-parameters.md)。 | 
| system\$1params | Python 字典包含兩個屬性：region 和 accountId。 | 

以下是名為 `Layout.py` 的檔案中的範例配置產生器指令碼：

```
import argparse
import sys
import os
import json
from awsglue.blueprint.workflow import *
from awsglue.blueprint.job import *
from awsglue.blueprint.crawler import *


def generate_layout(user_params, system_params):

    etl_job = Job(Name="{}_etl_job".format(user_params['WorkflowName']),
                  Command={
                      "Name": "glueetl",
                      "ScriptLocation": user_params['ScriptLocation'],
                      "PythonVersion": "2"
                  },
                  Role=user_params['PassRole'])
    post_process_job = Job(Name="{}_post_process".format(user_params['WorkflowName']),
                            Command={
                                "Name": "pythonshell",
                                "ScriptLocation": user_params['ScriptLocation'],
                                "PythonVersion": "2"
                            },
                            Role=user_params['PassRole'],
                            DependsOn={
                                etl_job: "SUCCEEDED"
                            },
                            WaitForDependencies="AND")
    sample_workflow = Workflow(Name=user_params['WorkflowName'],
                            Entities=Entities(Jobs=[etl_job, post_process_job]))
    return sample_workflow
```

範例指令碼會匯入所需的藍圖程式庫，並包含會產生具有兩個任務之工作流程的 `generate_layout` 函數。這是一個非常簡單的指令碼。較複雜的指令碼可以使用額外的邏輯和參數來產生包含許多任務和爬蟲程式 (甚至包含可變數量的任務和爬蟲程式) 的工作流程。

## 使用 DependsOn 引數
<a name="developing-blueprints-code-layout-depends-on"></a>

`DependsOn` 引數是此實體對工作流程中其他實體之相依性的字典表示。其具有如下格式。

```
DependsOn = {dependency1 : state, dependency2 : state, ...}
```

此字典中的索引鍵代表實體的物件參考，而不是名稱，而值是對應於要監視之狀態的字串。AWS Glue 會推斷適當的觸發程序。如需有效狀態，請參閱[條件結構](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-trigger.html#aws-glue-api-jobs-trigger-Condition)。

例如，任務可能取決於爬蟲程式是否成功完成。如果您定義名為 `crawler2` 的爬蟲程式物件，如下所示：

```
crawler2 = Crawler(Name="my_crawler", ...)
```

那麼依賴 `crawler2` 的物件將包含一個建構函數引數，例如：

```
DependsOn = {crawler2 : "SUCCEEDED"}
```

例如：

```
job1 = Job(Name="Job1", ..., DependsOn = {crawler2 : "SUCCEEDED", ...})
```

如果實體省略 `DependsOn`，則該實體取決於工作流程啟動觸發。

## 使用 WaitForDependencies 引數
<a name="developing-blueprints-code-layout-wait-for-dependencies"></a>

`WaitForDependencies` 引數定義任務或爬蟲程式實體應該等到它依賴的*所有*實體都完成，還是等到*任何*實體完成。

允許的值是「`AND`」或「`ANY`」。

## 使用 OnSchedule 引數
<a name="developing-blueprints-code-layout-on-schedule"></a>

`Workflow` 類別建構函數的 `OnSchedule` 引數是 `cron` 表達式，定義工作流程的啟動觸發定義。

如果指定此引數，AWS Glue 會建立具有對應排程的排程觸發程序。若未指定，工作流程的啟動觸發是隨需觸發。