

# AWS Glue でのオーケストレーション
<a name="etl-jobs"></a>

以下のセクションでは、のジョブのオーケストレーションの情報を提供しますAWS Glue。

**Topics**
+ [トリガーを使用したジョブとクローラの開始](trigger-job.md)
+ [AWS Glue で設計図とワークフローを使用して複雑な ETL アクティビティを実行する](orchestrate-using-workflows.md)
+ [AWS Glue のブループリントの開発](orchestrate-using-blueprints.md)

# トリガーを使用したジョブとクローラの開始
<a name="trigger-job"></a>

AWS Glue では、トリガーと呼ばれる Data Catalog オブジェクトを作成できます。このオブジェクトを使用して、手動または自動で 1 つ以上のクローラを開始したり、抽出、変換、ロード (ETL) ジョブを実行したりできます。トリガーを使用して、依存関係にあるジョブとクローラのチェーンを設計できます。

**注記**  
この同じことは、*ワークフロー*を定義することでも可能です。ワークフローは、複雑なマルチジョブ ETL オペレーションを作成する場合に適しています。詳しくは、「[AWS Glue で設計図とワークフローを使用して複雑な ETL アクティビティを実行する](orchestrate-using-workflows.md)」を参照してください。

**Topics**
+ [AWS Glue トリガー](about-triggers.md)
+ [トリガーの追加](console-triggers.md)
+ [トリガーの有効化と無効化](activate-triggers.md)

# AWS Glue トリガー
<a name="about-triggers"></a>

*起動*されると、トリガーは指定されたジョブとクローラを開始できます。トリガーは、オンデマンドで、スケジュールに基づいて、またはイベントの組み合わせに基づいて起動します。

**注記**  
1 つのトリガーでアクティブにできるクローラは 2 つだけです。複数のデータストアをクロールする場合は、複数のクローラを同時に実行するのではなく、クローラごとに複数のソースを使用します。

トリガーは作成されると複数の状態のいずれかになります。たとえば、`CREATED`、`ACTIVATED`、または `DEACTIVATED` になります。`ACTIVATING` などの移行状態もあります。トリガーの起動を一時的に停止するために、トリガーを無効化できます。その後、再度有効化できます。

以下の 3 種類のトリガーがあります。

**Scheduled (スケジュール済み)**  
`cron` に基づく時間ベースのトリガー。  
スケジュールに基づいて、一連のジョブまたはクローラのトリガーを作成できます。ジョブまたはクローラが実行される頻度、実行される曜日、実行される時間などの制約を指定できます。これらの制約は `cron` に基づいています。トリガーにスケジュールを設定するときは、cron の機能と制限を考慮してください。たとえば、毎月 31 日にクローラを実行することを選択した場合、いくつかの月には 31 日間はないことに注意してください。cron の詳細については、[ジョブとクローラの時間ベースのスケジュール](monitor-data-warehouse-schedule.md) を参照してください。

**条件付き**  
前のジョブまたはクローラや、複数のジョブまたはクローラが、条件のリストを満たしたときに起動するトリガー。  
 条件付きトリガーを作成するときは、監視対象のジョブとクローラのリストを指定します。監視対象のジョブまたはクローラごとに、監視するステータス (成功、失敗、タイムアウトなど) を指定します。監視対象のジョブまたはクローラが指定されたステータスで終了すると、トリガーが起動します。監視対象のイベントのいずれかまたはすべてが発生したときに起動するようにトリガーを設定できます。  
たとえば、ジョブ J1 とジョブ J2 の両方が正常に完了したときにジョブ J3 を開始するトリガー T1 を設定し、ジョブ J1 またはジョブ J2 のいずれかが失敗した場合にジョブ J4 を開始する別のトリガー T2 を設定できます。  
以下の表に、トリガーの監視対象のジョブとクローラの完了状態 (イベント) を示しています。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/about-triggers.html)

**[オンデマンド]**  
有効化されると起動するトリガー。オンデマンドトリガーが `ACTIVATED` または `DEACTIVATED` 状態になることはありません。それらのトリガーは常に `CREATED` 状態のままです。

それらのトリガーは作成されるとすぐに起動可能な状態になるように、作成時に、スケジュールトリガーと条件付きトリガーを有効化するフラグを設定できます。

**重要**  
他のジョブまたはクローラの完了の結果として実行されるジョブまたはクローラは、*依存関係にある*と言われます。依存関係にあるジョブまたはクローラは、完了したジョブまたはクローラがトリガーによって開始された場合にのみ開始されます。依存関係チェーンのすべてのジョブまたはクローラは、1 つの**スケジュール**または**オンデマンド**トリガーの子であることが必要です。

**トリガーを使用してジョブパラメータを渡す**  
トリガーは、開始するジョブにパラメータを渡すことができます。パラメータとしては、ジョブ引数、タイムアウト値、セキュリティ設定などがあります。トリガーが複数のジョブを開始する場合、パラメータは各ジョブに渡されます。

以下に示しているのは、トリガーによって渡されるジョブ引数のルールです。
+ キーと値のペアのキーがデフォルトのジョブ引数と一致する場合、渡された引数はデフォルトの引数を上書きします。キーがデフォルトの引数と一致しない場合、その引数は追加の引数としてジョブに渡されます。
+ キーと値のペアのキーが上書不可の引数と一致する場合、渡された引数は無視されます。

詳細については、AWS Glue API の「[トリガー](aws-glue-api-jobs-trigger.md)」を参照してください。

# トリガーの追加
<a name="console-triggers"></a>

トリガーは、AWS Glue コンソール、AWS Command Line Interface (AWS CLI)、または AWS Glue API を使用して追加できます。

**トリガーを追加するには (コンソール)**

1. AWS マネジメントコンソールにサインインし、AWS Glue コンソール ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)) を開きます。

1. ナビゲーションペインの [**ETL**] で、[**トリガー**] を選択します。[**トリガーを追加**] を選択します。

1. 以下のプロパティを指定します。  
**名前**  
トリガーに一意の名前を付けます。  
**トリガータイプ**  
次のいずれかを指定します。  
   + [**Schedule (スケジュール)**]: トリガーは特定の頻度と時間で起動します。
   + [**ジョブイベント**]: 条件付きトリガー。トリガーは、リスト内のいずれかまたはすべてのジョブが、指定されたステータスと一致すると起動します。トリガーを起動するには、監視されたジョブがトリガーによって開始されている必要があります。どのジョブを選択した場合でも、監視できるジョブイベントは 1 つ (完了ステータス) のみです。
   + [**オンデマンド**]: トリガーは、有効化されると起動します。

1. トリガーウィザードを完了します。[**Review**] (確認) ページで [**Schedule**] (スケジュール) および [**Job events**] (ジョブイベント) (条件付き) は、[**Enable trigger on creation**] (作成時にトリガーを有効化する) を選択すると直ちにトリガーを有効化できます。

**トリガーを追加するには (AWS CLI)**
+ 以下のようなコマンドを入力します。

  ```
  aws glue create-trigger --name MyTrigger --type SCHEDULED --schedule  "cron(0 12 * * ? *)" --actions CrawlerName=MyCrawler --start-on-creation  
  ```

  このコマンドは、`MyTrigger` という名前のスケジュールトリガーを作成します。このトリガーは、毎日 UTC 午後 12 時に実行され、`MyCrawler` という名前のクローラを開始します。トリガーは有効化された状態で作成されます。

詳細については、[AWS Glue トリガー](about-triggers.md) を参照してください。

# ジョブとクローラの時間ベースのスケジュール
<a name="monitor-data-warehouse-schedule"></a>

AWS Glue では、ジョブとクローラの時間ベースのスケジュールを定義できます。これらのスケジュールの定義は、Unix と同様の [cron](http://en.wikipedia.org/wiki/Cron) 構文を使用します。[協定世界時 (UTC)](http://en.wikipedia.org/wiki/Coordinated_Universal_Time) で時間を指定します。スケジュールの最小精度は 5 分です。

スケジュールを使用して実行するようにジョブとクローラを設定する方法の詳細については、「[トリガーを使用したジョブとクローラの開始](trigger-job.md)」を参照してください。

## cron 式
<a name="CronExpressions"></a>

cron 式には 6 つの必須フィールドがあり、それらは空白で区切られます。

**[Syntax]** (構文)

```
cron(Minutes Hours Day-of-month Month Day-of-week Year)
```


| **[フィールド]** | **値** | **ワイルドカード** | 
| --- | --- | --- | 
|  分  |  0～59  |  , - \$1 /  | 
|  時間  |  0～23  |  , - \$1 /  | 
|  日  |  1～31  |  , - \$1 ? / L W  | 
|  月  |  1～12 または JAN～DEC  |  , - \$1 /  | 
|  曜日  |  1～7 または SUN～SAT  |  , - \$1 ? / L  | 
|  年  |  1970～2199  |  , - \$1 /  | 

**ワイルドカード**
+ **,** (カンマ) のワイルドカードには、追加の値が含まれます。`Month` フィールドの、`JAN,FEB,MAR` は、1 月、2 月、3 月を含みます。
+ **-** (ダッシュ) のワイルドカードは、範囲を指定します。`Day` フィールドの、「1–15」は、指定した月の 1 日から 15 日を含みます。
+ **[\$1]** (アスタリスク) のワイルドカードには、フィールドのすべての値が含まれます。`Hours` フィールドの、**\$1** にはすべての時間が含まれています。
+ **/** (スラッシュ) のワイルドカードは、増分を指定します。`Minutes` フィールドで、「**1/10**」と入力して、その時間の最初の分から始めて、10 分毎を指定できます (11 分、21 分、31 分など)。
+ **[?]** (疑問符) のワイルドカードは、任意を意味します。`Day-of-month` フィールドで **7** と入力し、7 日が何曜日であってもかまわない場合、Day-of-week フィールドに **?** を入力できます。
+ `Day-of-month` フィールドまたは `Day-of-week` フィールドにある **[L]** のワイルドカードは、月または週の最終日を指定します。
+ `Day-of-month` フィールドの、ワイルドカード **W** は、平日を指定します。`Day-of-month` フィールドで、`3W` は月の 3 番目の平日に最も近い日を指定します。

**制限**
+ Cron 式の `Day-of-month` フィールドと `Day-of-week` フィールドを同時に指定することはできません。一方のフィールドに値を指定する場合、もう一方のフィールドで **[?]** (疑問符) を使用する必要があります。
+ 5 分より短い間隔を導き出す cron 式はサポートされていません。

**例**  
スケジュールを作成するときは、以下のサンプルの cron 文字列を使用できます。


| 分 | 時間 | 日 | 月 | 曜日 | 年 | 意味 | 
| --- | --- | --- | --- | --- | --- | --- | 
|  0  |  10  |  \$1  |  \$1  |  ?  |  \$1  |  毎日午前 10:00 (UTC) に実行  | 
|  15  |  12  |  \$1  |  \$1  |  ?  |  \$1  |  毎日午後 12:15 (UTC) に実行  | 
|  0  |  18  |  ?  |  \$1  |  MON-FRI  |  \$1  |  毎週月曜日から金曜日まで午後 6:00 (UTC) に実行  | 
|  0  |  8  |  1  |  \$1  |  ?  |  \$1  |  毎月 1 日の午前 8:00 (UTC) に実行  | 
|  0/15  |  \$1  |  \$1  |  \$1  |  ?  |  \$1  |  15 分ごとに実行  | 
|  0/10  |  \$1  |  ?  |  \$1  |  MON-FRI  |  \$1  |  月曜日から金曜日まで 10 分ごとに実行  | 
|  0/5  |  8～17  |  ?  |  \$1  |  MON-FRI  |  \$1  |  毎週月曜日から金曜日まで午前 8:00 から午後 5:55 (UTC) の間に 5 分ごとに実行  | 

たとえば、毎日 12:15 UTC のスケジュールで実行するには、次のように指定します。

```
cron(15 12 * * ? *)   
```

# トリガーの有効化と無効化
<a name="activate-triggers"></a>

トリガーは、AWS Glue コンソール、AWS Command Line Interface (AWS CLI)、または AWS Glue API を使用して有効化または無効化できます。

**トリガーを有効化または無効化するには (コンソール)**

1. AWS マネジメントコンソールにサインインし、AWS Glue コンソール ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)) を開きます。

1. ナビゲーションペインの [**ETL**] で、[**トリガー**] を選択します。

1. 目的のトリガーの横にあるチェックボックスをオンにし、[**Action (アクション)**] メニューで [**トリガーの有効化**] を選択して、トリガーを有効化します。または、[**トリガーを無効化**] を選択して、トリガーを無効化します。

**トリガーを有効化または無効化するには (AWS CLI)**
+ 以下のいずれかのコマンドを入力します。

  ```
  aws glue start-trigger --name MyTrigger  
  
  aws glue stop-trigger --name MyTrigger
  ```

  トリガーは、開始することで有効化され、停止することで無効化されます。オンデマンドトリガーは、有効化されると、すぐに起動します。

詳細については、[AWS Glue トリガー](about-triggers.md) を参照してください。

# AWS Glue で設計図とワークフローを使用して複雑な ETL アクティビティを実行する
<a name="orchestrate-using-workflows"></a>

組織が実行する複雑な抽出、変換、ロード (ETL) プロセスの中には、依存関係のある複数の AWS Glue ジョブとクローラによる実装が最適なものがあります。AWS Glue *ワークフロー*を使用すると、マルチジョブ、マルチクローラの ETL プロセスを設計でき、このプロセスは単一のエンティティとして実行と追跡が可能です。ワークフローを作成し、その中でジョブ、クローラ、トリガーを指定した後に、オンデマンドまたはスケジュールにより、そのワークフローを実行できるようになります。

**Topics**
+ [AWS Glue のワークフローの概要](workflows_overview.md)
+ [AWS Glue でワークフローを手動により作成および構築する](creating_running_workflows.md)
+ [Amazon EventBridge イベントによる AWS Glue ワークフローの開始](starting-workflow-eventbridge.md)
+ [ワークフローを開始した EventBridge イベントの表示](viewing-start-event-info.md)
+ [AWS Glue でのワークフローの実行とモニタリング](running_monitoring_workflow.md)
+ [ワークフロー実行の停止](workflow-stopping.md)
+ [ワークフロー実行の修復と再開](resuming-workflow.md)
+ [AWS Glue でのワークフローの実行プロパティの取得と設定](workflow-run-properties-code.md)
+ [AWS Glue APIを使用したワークフローのクエリ](workflows_api_concepts.md)
+ [AWS Glue での設計図とワークフローの制限](blueprint_workflow_restrictions.md)
+ [AWS Glue での設計図エラーをトラブルシューティングする](blueprint_workflow_troubleshoot.md)
+ [AWS Glue ブループリントでのペルソナおよびロール用のアクセス許可](blueprints-personas-permissions.md)

# AWS Glue のワークフローの概要
<a name="workflows_overview"></a>

AWS Glue では、複数のクローラ、ジョブ、およびトリガーを伴う複雑な ETL (抽出、変換、ロード) アクティビティを作成して可視化できます。各ワークフローは、含まれるすべてのジョブならびにクローラーの実行とモニタリングを管理します。ワークフローは、各コンポーネントについて、その実行の進捗状況とステータスを記録します。これにより、タスク全体の概要と各ステップの詳細を把握できます。AWS Glue コンソールは、ワークフローの状態をグラフで表示します。

ワークフローは、AWS Glue 設計図から作成することができます。あるいは、AWS マネジメントコンソール または AWS Glue API を使用しながら、ワークフローとコンポーネントを毎回手動で作成することも可能です。設計図の詳細については、「[AWS Glue のブループリント概要](blueprints-overview.md)」を参照してください。

ワークフロー内の*トリガー*は、ジョブおよびクローラの両方を開始でき、同時に、ジョブもしくはクローラの完了によって起動することができます。トリガーを使用することで、相互に依存するジョブとクローラの大規模なチェーンを作成できます。ワークフロー内でジョブとクローラの依存関係を定義するトリガーに加えて、各ワークフローには*開始トリガー*もあります。開始トリガーには、以下の 3 種類があります。
+ **スケジュール** – 定義したスケジュールに基づいて、ワークフローが開始されます。スケジュールは、日次、週次、月次その他に設定することも、`cron` 式に基づきカスタムスケジュールを構成することも可能です。
+ **オンデマンド** – ワークフローは、AWS Glue コンソール、API、あるいは AWS CLI から手動で開始されます。
+ **EventBridge イベント** – ワークフローは、単一の Amazon EventBridge イベントまたは、バッチ化された Amazon EventBridge イベントの発生時に開始されます。このトリガータイプでは、AWS Glue はイベント駆動型アーキテクチャのイベントコンシューマとして機能します。すべての EventBridge イベントタイプがワークフローを開始できます。一般的なユースケースとしては、Amazon S3 バケット に新しいオブジェクトが保存された(S3 の `PutObject` オペレーション) 場合が挙げられます。

  イベントのバッチにより開始される場合、ワークフローは、指定された数のイベントを受信するか、指定された時間が経過するまで待機します。EventBridge イベントトリガーを作成する際には、オプションでバッチ条件を指定できます。バッチ条件を指定する際には、バッチサイズ (イベント数) を指定する必要があります。また、オプションでバッチウィンドウ (秒数) を指定することもできます。デフォルトで、バッチウィンドウは最大長である 900 秒 (15 分) に設定されています。ワークフローは、最初に満たされたバッチ条件によって開始されます。バッチウィンドウは、最初のイベントが受信された時点で開始されます。トリガーの作成時にバッチ条件を指定しない場合、バッチサイズはデフォルトで 1 に設定されます。

  ワークフローが開始されると、バッチ条件はリセットされます。イベントトリガーは、ワークフローを再度開始するために、後続のバッチ条件が満たされるかどうかの監視を開始します。

  次の表は、バッチサイズとバッチウィンドウが連携して、ワークフローをトリガーする様子を示しています。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/workflows_overview.html)

  `GetWorkflowRun` API オペレーションは、ワークフローをトリガーしたバッチ条件を返します。

ワークフローの作成時は、ワークフローの開始方法に関係なく、ワークフローの同時実行の最大数を指定できます。

イベントまたはイベントのバッチが実行を開始したワークフローが最終的に失敗した場合、対象のイベントまたはイベントのバッチは、以後ワークフロー実行のためには使用されなくなります。新しいワークフローの実行は、次のイベントまたはイベントのバッチを受信した場合にのみ開始されます。

**重要**  
ワークフロー内のジョブ、クローラ、トリガーの総数を、100 以下に制限します。100 を超える値を含めると、ワークフローの実行を再開または停止しようとしたときにエラーが発生する場合があります。

ワークフローに設定された同時実行の上限数を超過している場合は、仮にイベント条件が満たされていても、ワークフローの実行は開始されません。ワークフローの同時実行の制限は、想定されるイベントボリュームに基づいて調整することをお勧めします。AWS Glue は、同時実行の制限を超えたために失敗したワークフローの実行を再試行しません。同様に、想定されるイベント量に基づいて、ワークフロー内のジョブとクローラの同時実行の制限を調整することをお勧めします。

**ワークフロー実行のプロパティ**  
ワークフローの実行全体の状態を共有して管理するには、ワークフローのデフォルトの実行プロパティを定義できます。これらのプロパティ (名前と値のペア) は、ワークフローのすべてのジョブで使用できます。AWS Glue API を使用すると、ジョブはワークフローの実行プロパティを取得し、これらのプロパティを変更してワークフローの以降のジョブで使用できます。

**ワークフローのグラフ**  
次の図に、AWS Glue コンソールが表示する、ワークフローの基本的なグラフを示します。ワークフローには、いくつものコンポーネントが含まれている場合があります。

![\[コンソールに表示されるワークフローの [Graph] (グラフ) タブのスクリーンショット。このグラフは、スケジュールトリガー、2 つのジョブ、イベント成功トリガー、スキーマを更新するクローラを表す、5 つのアイコンで構成されています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/graph-complete-with-tabs.png)


このワークフローは、スケジュールトリガー `Month-close1` により開始されます。このトリガーは、2 つのジョブ (`De-duplicate` および `Fix phone numbers`) を開始します。これら 2 つのジョブが正常に完了すると、イベントトリガー `Fix/De-dupe succeeded` によってクローラ `Update schema` が開始されます。

**ワークフローの静的ビューと動的ビュー**  
各ワークフローには、*静的ビュー*と*動的ビュー*の表記があります。静的ビューは、ワークフローの設計を示します。動的ビューは、各ジョブや各クローラに関する最新の実行情報を含むランタイムビューです。実行情報には、成功ステータスとエラーの詳細が含まれます。

ワークフローの実行中は、その動的ビューがコンソールに表示されます。また、完了済みのジョブと未実行のジョブがグラフで示されます。実行中のワークフローの動的ビューは、AWS Glue API を使用して取得することもできます。(詳細については、[AWS Glue APIを使用したワークフローのクエリ](workflows_api_concepts.md) を参照してください)。

**関連情報**  
[AWS Glue で設計図からワークフローを作成する](creating_workflow_blueprint.md)
[AWS Glue でワークフローを手動により作成および構築する](creating_running_workflows.md)
[ワークフロー](aws-glue-api-workflow.md) (ワークフロー API 用)

# AWS Glue でワークフローを手動により作成および構築する
<a name="creating_running_workflows"></a>

AWS Glue コンソールにより、ワークフローのノードを一度に 1 つずつ手動で作成し構築できます。

ワークフローは、ジョブ、クローラ、トリガーで構成されます。ワークフローの手動作成を開始する前に、ワークフローに含めるジョブとクローラを作成します。ワークフローのクローラは、オンデマンドで実行するように指定するのが最適です。トリガーは、ワークフローの構築中に新規作成できます。または、既存のトリガーをワークフロー内に *複製*することもできます。トリガーをクローンすると、トリガーに関連付けられたすべてのカタログオブジェクト (トリガーを起動するジョブまたはクローラ、トリガーにより開始されるジョブまたはクローラ) がワークフローに追加されます。

**重要**  
ワークフロー内のジョブ、クローラ、トリガーの総数を 100 以下に制限します。100 を超える値を含めると、ワークフローの実行を再開または停止しようとしたときにエラーが発生することがあります。

ワークフローを構築するには、ワークフローのグラフにトリガーを追加し、トリガーごとに監視対象のイベントやアクションを定義します。まず、*開始トリガー*としてオンデマンドトリガーまたはスケジュールトリガーを追加し、次にイベント (条件付き) トリガーを追加してグラフを完成します。

## ステップ 1: ワークフローを作成する
<a name="workflow-step1"></a>

1. AWS マネジメントコンソール にサインインし、AWS Glue コンソール ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)) を開きます。

1. ナビゲーションペインの [**ETL**] で、[**ワークフロー**] を選択します。

1. [**ワークフロー**] を選択し、[**Add a new ETL workflow (新しい ETL ワークフローの追加)]** フォームに入力します。

   オプションとして追加したデフォルトの実行プロパティは、ワークフローのすべてのジョブに対する引数として使用できます。詳細については、[AWS Glue でのワークフローの実行プロパティの取得と設定](workflow-run-properties-code.md) を参照してください。

1. [**Add workflow (ワークフローの追加)**] を選択します。

   新しいワークフローが [**ワークフロー**] ページのリストに表示されます。

## ステップ 2: 開始トリガーを追加する
<a name="workflow-step2"></a>

1. [**ワークフロー**] ページで、新しいワークフローを選択します。次に、ページの下部で [**Graph**] (グラフ) タブが選択されていることを確認します。

1. [**トリガーを追加**] を選択し、[**トリガーを追加**] ダイアログボックスで、次のいずれかの操作を行います。
   + [**Clone existing (既存の複製)**] を選択し、複製するトリガーを選択します。その後、**[Add]** (追加) を選択します。

     トリガーがグラフに表示されます。トリガーで監視するジョブやクローラおよびトリガーで開始するジョブやクローラも表示されます。

     トリガーを間違えて選択した場合は、そのトリガーをグラフで選択し、[**削除**] を選択します。
   + [**Add new (新規追加)**] を選択し、[**トリガーを追加**] フォームに入力します。

     1. [**Trigger type**] (トリガータイプ) で、[**Schedule**] (スケジュール)、[**On demand**] (オンデマンド)、または [**EventBridge event**] (EventBridge イベント) のいずれかを選択します。

        トリガータイプを [**Schedule**] (スケジュール) にした場合、[**Frequency**] (頻度) オプションの中から 1 つを選択します。`cron` 式を入力するには、[**Custom**] (カスタム) をクリックします。

        トリガータイプに [**EventBridge event**] (EventBridge イベント) を選択した場合は、[**Number of events**] (イベント数) (バッチサイズ) を入力し、オプションで [**Time delay**] (遅延時間) (バッチウィンドウ) を入力します。[**Time delay**] (遅延時間) を省略した場合、デフォルトでバッチウィンドウには 15 分が指定されます。詳細については、[AWS Glue のワークフローの概要](workflows_overview.md) を参照してください。

     1. **[Add]** (追加) を選択します。

     トリガーがグラフ上に表示されます。プレースホルダーノード ([**Add node (ノードの追加)**] というラベルが付いたノード) も一緒に表示されます。以下の例では、開始トリガーは `Month-close1` という名前のスケジュールされたトリガーです。

     この段階では、トリガーは保存されていません。  
![\[2 つの長方形のノード (トリガーとプレースホルダーノード) を示すグラフ。矢印が、トリガーノードからプレースホルダーノードを指しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/graph-start-trigger.png)

1. 新しいトリガーを追加した場合は、以下のステップを実行します。

   1. 次のいずれかを行います。
      + プレースホルダーノード ([**Add node (ノードの追加**]) を選択します。
      + 開始トリガーが選択されていることを確認し、 [**アクション**] メニューの [**Add jobs/crawlers to trigger (トリガーにジョブ/クローラを追加)**] を選択します。

   1. **Add job(s) and crawler(s) to trigger (トリガーにジョブおよびクローラを追加)**] ダイアログボックスで、1 つ以上のジョブまたはクローラを選択し、 [**追加**] を選択します。

      トリガーが保存されます。選択したジョブまたはクローラが、トリガーからのコネクタと共にグラフに表示されます。

      ジョブやクローラを間違って追加した場合は、トリガーまたはコネクタを選択して、[**削除**] を選択できます。

## ステップ 3: さらにトリガーを追加する
<a name="workflow-step3"></a>

[**Event**] (イベント) タイプのトリガーをさらに追加して、ワークフローの構築を続けます。グラフのキャンバスを拡大または縮小するには、グラフの右側にあるアイコンを使用します。追加するトリガーごとに、以下の手順を実行します。

**注記**  
ワークフローの保存のために、行うべきアクションはありません。最後のトリガーを追加し、そのトリガーにアクションを割り当てると、ワークフローが完了し保存されます。後の任意のタイミングでこの作業に戻り、さらにノードを追加することができます。

1. 次のいずれかを行います。
   + 既存のトリガーを複製するには、グラフで選択されているノードがないことを確認し、 [**アクション**] メニューの [**トリガーを追加**] を選択します。
   + グラフ上の特定のジョブまたはクローラを監視する新しいトリガーを追加するには、そのジョブまたはクローラのノードを選択し、[**トリガーを追加**] プレースホルダーノードを選択します。

     後のステップで、このトリガーで監視するジョブやクローラをさらに追加できます。

1.  [**トリガーを追加**] ダイアログボックスで、次のいずれかの操作を行います。
   + [**Add new (新規追加)**] を選択し、[**トリガーを追加**] フォームに入力します。その後、**[Add]** (追加) を選択します。

     トリガーがグラフに表示されます。後のステップでトリガーを完了します。
   + [**Clone existing (既存の複製)**] を選択し、複製するトリガーを選択します。その後、**[Add]** (追加) を選択します。

     トリガーがグラフに表示されます。トリガーで監視するジョブやクローラおよびトリガーで開始するジョブやクローラも表示されます。

     トリガーを間違って選択した場合は、そのトリガーをグラフで選択し、[**削除**] を選択します。

1. 新しいトリガーを追加した場合は、以下のステップを実行します。

   1. 新しいトリガーを選択します。

      次のように、トリガー `De-dupe/fix succeeded` が選択された状態のグラフが表示され、プレースホルダーノードが (1) イベント用、ならびに (2) アクション用として表示されます。  
![\[数字の 1 と 2 の吹き出しが付いた 2 つのプレースホルダーノードを含む、複数のノードを示すグラフ。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/graph-dual-placeholders.png)

   1. (トリガーでイベントを既に監視しており、監視対象のジョブやクローラをを追加する場合のオプション) 監視対象イベントのプレースホルダーノードを選択し、[**Add job(s) and crawler(s) to watch (監視するジョブやクローラの追加)**] ダイアログボックスで 1 つ以上のジョブまたはクローラを選択します。監視対象のイベント (成功、失敗など) を選択して、 [**追加**] を選択します。

   1. トリガーが選択されていることを確認し、アクション用のプレースホルダーノードを選択します。

   1. [**Add job(s) and crawler(s) to watch (監視対象のジョブやクローラの追加)**] ダイアログボックスで 1 つ以上のジョブまたはクローラを選択し、[**追加**] を選択します。

      選択したジョブやクローラがグラフに表示されます。トリガーからのコネクタも表示されます。

Express ワークフローと サービス統合の詳細については、以下を参照してください。
+ [AWS Glue のワークフローの概要](workflows_overview.md)
+ [AWS Glue でのワークフローの実行とモニタリング](running_monitoring_workflow.md)
+ [AWS Glue で設計図からワークフローを作成する](creating_workflow_blueprint.md)

# Amazon EventBridge イベントによる AWS Glue ワークフローの開始
<a name="starting-workflow-eventbridge"></a>

Amazon EventBridge (別名 CloudWatch Events) を使用すると、AWS サービスを自動化して、アプリケーションの可用性の問題やリソースの変更などのシステム的なイベントに自動的に対応できます。AWS のサービスからのイベントは、ほぼリアルタイムに EventBridge に提供されます。簡単なルールを記述して、注目するイベントと、イベントがルールに一致した場合に自動的に実行するアクションを指定できます。

EventBridge の機能を使用することで、AWS Glue は、イベント駆動型アーキテクチャにおけるイベントのプロデューサおよびコンシューマとして動作します。ワークフローに対して AWS Glue では、コンシューマーとして、あらゆるタイプの EventBridge イベントをサポートしています。このための最も一般的なユースケースとしては、Amazon S3 バケットが新しいオブジェクトを受け取る場合が挙げられます。データが、不規則または定義されていない間隔で到着した際には、可能なかぎり素早くそれを処理できます。

**注記**  
AWS Glue は、EventBridge メッセージの配信を保証していません。EventBridge により重複したメッセージが配信された場合にも、AWS Glue は、重複の排除を行いません。対応すべき処理は、ユースケースに基づいて管理する必要があります。  
不要なイベントが送信されないように、EventBridge ルール適切に設定します。

**[開始する前に]**  
Amazon S3 データイベントを使用してワークフローを開始する場合は、対象の S3 バケットのイベントが AWS CloudTrail および EventBridge にログ記録されたことを確認します。そのためには、CloudTrail の証跡を作成する必要があります。詳細については、「[Creating a trail for your AWS account](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)」を参照してください。

**EventBridge イベントを使用してワークフローを開始するには**
**注記**  
以下のコマンドで、下記のような置き換えを行います。  
*<workflow-name>* には、ワークフローに割り当てる名前。
*<trigger-name>* には、トリガーに割り当てる名前。
*<bucket-name>* には、Amazon S3 バケットの名前。
*<account-id>* には、有効な AWS アカウント ID。
*<region>* には、リージョン名 (例: `us-east-1`)
*<rule-name>* には、EventBridge ルールに割り当てる名前。

1. EventBridge ルールとターゲットを作成および表示するための、AWS Identity and Access Management (IAM) アクセス許可があることを確認します。以下は、アタッチできるサンプルのポリシーです。オペレーションとリソースを制限するために、このポリシーの範囲を狭めたい場合もあります。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "events:PutRule",
           "events:DisableRule",
           "events:DeleteRule",
           "events:PutTargets",
           "events:RemoveTargets",
           "events:EnableRule",
           "events:List*",
           "events:Describe*"
         ],
         "Resource": "*"
       }
     ]
   }
   ```

------

1. AWS Glue にイベントが渡される際に、EventBridge サービスが引き受けることができる IAM ロールを作成します。

   1. IAM コンソールの [**Create role**] (ロールの作成) ページで、[**AWS Service**] を選択します。次に、[**CloudWatch Events**] (CloudWatch イベント) サービスを選択します。

   1. [**Create role**] (ロールの作成) ウィザードを完了します。ポリシー `CloudWatchEventsBuiltInTargetExecutionAccess` および `CloudWatchEventsInvocationAccess` が、ウィザードにより自動的にアタッチされます。

   1. 次のインラインポリシーをロールにアタッチします。このポリシーにより、EventBridge サービスはイベントを AWS Glue に送れるようになります。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "glue:notifyEvent"
            ],
            "Resource": [
              "arn:aws:glue:us-east-1:111122223333:workflow/workflow-name"
            ]
          }
        ]
      }
      ```

------

1. 次のコマンドを入力して、ワークフローを作成します。

   この他のオプションのコマンドラインパラメータについては、*AWS CLI コマンドリファレンス*の「[create-workflow](https://docs.aws.amazon.com/cli/latest/reference/glue/create-workflow.html)」を参照してください。

   ```
   aws glue create-workflow --name <workflow-name>
   ```

1. 次のコマンドを入力して、ワークフローのための EventBridge イベントトリガーを作成します。これがワークフローの開始トリガーになります。*<actions>*は、実行するアクション (開始するジョブとクローラ) に置き換えます。

   引数 `actions` の記述方法については、*AWS CLIコマンドリファレンス*の「[create-trigger](https://docs.aws.amazon.com/cli/latest/reference/glue/create-trigger.html)」を参照してください。

   ```
   aws glue create-trigger --workflow-name <workflow-name> --type EVENT --name <trigger-name> --actions <actions>
   ```

   単一の EventBridge イベントではなく、バッチされたイベントによってワークフローをトリガーする場合は、代わりに次のコマンドを入力します。

   ```
   aws glue create-trigger --workflow-name <workflow-name> --type EVENT --name <trigger-name> --event-batching-condition BatchSize=<number-of-events>,BatchWindow=<seconds> --actions <actions>
   ```

   `event-batching-condition` 引数の `BatchSize` は必須であり、`BatchWindow` はオプションです。`BatchWindow` が省略された場合、ウィンドウはデフォルトで (最大ウィンドウサイズの) 900 秒に設定されます。  
**Example**  

   次の例では、3 つの EventBridge イベントを受信した後、または最初のイベントが到着してから 5 分経過後の、いずれか早いタイミングで `eventtest` ワークフロー開始するトリガーを作成しています。

   ```
   aws glue create-trigger --workflow-name eventtest --type EVENT --name objectArrival --event-batching-condition BatchSize=3,BatchWindow=300 --actions JobName=test1
   ```

1. Amazon EventBridge でルールを作成します。

   1. 任意のテキストエディタで JSON オブジェクトを作成し、ルールの詳細を記述します。

      次の例では、イベントソースとして Amazon S3 を、イベント名として `PutObject` を、リクエストパラメータとしてバケット名を、それぞれ指定しています。このルールは、新しいオブジェクトがバケットで受信された場合にワークフローを開始します。

      ```
      {
        "source": [
          "aws.s3"
        ],
        "detail-type": [
          "AWS API Call via CloudTrail"
        ],
        "detail": {
          "eventSource": [
            "s3.amazonaws.com"
          ],
          "eventName": [
            "PutObject"
          ],
          "requestParameters": {
            "bucketName": [
              "<bucket-name>"
            ]
          }
        }
      }
      ```

      新しいオブジェクトがバケット内のフォルダに到着した際にワークフローを開始させるには、次のコードを `requestParameters` に置き換えます。

      ```
          "requestParameters": {
            "bucketName": [
              "<bucket-name>"
            ]
            "key" : [{ "prefix" : "<folder1>/<folder2>/*"}}]
        }
      ```

   1. 任意のツールを使用して、ルールを記述した JSON オブジェクトの文字列をエスケープします。

      ```
      {\n  \"source\": [\n    \"aws.s3\"\n  ],\n  \"detail-type\": [\n    \"AWS API Call via CloudTrail\"\n  ],\n  \"detail\": {\n    \"eventSource\": [\n      \"s3.amazonaws.com\"\n    ],\n    \"eventName\": [\n      \"PutObject\"\n    ],\n    \"requestParameters\": {\n      \"bucketName\": [\n        \"<bucket-name>\"\n      ]\n    }\n  }\n}
      ```

   1. 次のコマンドを実行して、JSON パラメータテンプレートを作成します。このテンプレートを編集して、後続の `put-rule` コマンドの入力パラメータを指定します。出力をファイルに保存します。この例では、`ruleCommand` というファイルに保存しています。

      ```
      aws events put-rule --name <rule-name> --generate-cli-skeleton >ruleCommand
      ```

      `--generate-cli-skeleton` パラメータの詳細については、「*AWS Command Line Interface ユーザーガイド*」の「[Generating AWS CLI skeleton and input parameters from a JSON or YAML input file](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-skeleton.html)」を参照してください。

      出力ファイルは以下のようになります。

      ```
      {
          "Name": "",
          "ScheduleExpression": "",
          "EventPattern": "",
          "State": "ENABLED",
          "Description": "",
          "RoleArn": "",
          "Tags": [
              {
                  "Key": "",
                  "Value": ""
              }
          ],
          "EventBusName": ""
      }
      ```

   1. このファイルを編集して、少なくとも `Name`、`EventPattern`、および `State` パラメータを指定しながら、必要に応じて他のパラメータを削除します。`EventPattern` パラメータでは、前のステップで作成したルール詳細のために、エスケープされた文字列を指定します。

      ```
      {
          "Name": "<rule-name>",
          "EventPattern": "{\n  \"source\": [\n    \"aws.s3\"\n  ],\n  \"detail-type\": [\n    \"AWS API Call via CloudTrail\"\n  ],\n  \"detail\": {\n    \"eventSource\": [\n      \"s3.amazonaws.com\"\n    ],\n    \"eventName\": [\n      \"PutObject\"\n    ],\n    \"requestParameters\": {\n      \"bucketName\": [\n        \"<bucket-name>\"\n      ]\n    }\n  }\n}",
          "State": "DISABLED",
          "Description": "Start an AWS Glue workflow upon new file arrival in an Amazon S3 bucket"
      }
      ```
**注記**  
ワークフローの構築が完了するまで、ルールを無効にしたままにしておくことをお勧めします。

   1. 次の `put-rule` コマンドを入力し、ファイル `ruleCommand` から入力パラメータを読み取ります。

      ```
      aws events put-rule --name <rule-name> --cli-input-json file://ruleCommand
      ```

      次の出力は、正しく処理されたことを示しています。

      ```
      {
          "RuleArn": "<rule-arn>"
      }
      ```

1. 次のコマンドを入力して、ターゲットにルールをアタッチします。ターゲットは、AWS Glue のワークフローです。*<role-name>*は、この手順の最初に作成したロールに置き換えます。

   ```
   aws events put-targets --rule <rule-name> --targets "Id"="1","Arn"="arn:aws:glue:<region>:<account-id>:workflow/<workflow-name>","RoleArn"="arn:aws:iam::<account-id>:role/<role-name>" --region <region>
   ```

   次の出力は、正しく処理されたことを示しています。

   ```
   {
       "FailedEntryCount": 0,
       "FailedEntries": []
   }
   ```

1. 次のコマンドを入力して、ルールとターゲットの接続が正常に行われたことを確認します。

   ```
   aws events list-rule-names-by-target --target-arn arn:aws:glue:<region>:<account-id>:workflow/<workflow-name>
   ```

   接続に成功した場合は次のような出力になります。*<rule-name>* は作成したルールの名前です。

   ```
   {
       "RuleNames": [
           "<rule-name>"
       ]
   }
   ```

1. AWS マネジメントコンソール にサインインし、AWS Glue コンソール ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)) を開きます。

1. ワークフローを選択し、ワークフローグラフで、開始トリガーとそのアクション (ワークフローが開始するジョブまたはクローラ) の表示を確認します。その後、[ステップ 3: さらにトリガーを追加する](creating_running_workflows.md#workflow-step3) の手順に進みます。または、AWS Glue API か AWS Command Line Interface を使用して、ワークフローに他のコンポーネントを追加します。

1. ワークフローの指定を完了したら、ルールを有効にします。

   ```
   aws events enable-rule --name <rule-name>
   ```

   これで、EventBridge イベントまたはイベントのバッチによって、ワークフローを開始する準備が整いました。

**関連情報**  
[Amazon EventBridge ユーザーガイド](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html)
[AWS Glue のワークフローの概要](workflows_overview.md)
[AWS Glue でワークフローを手動により作成および構築する](creating_running_workflows.md)

# ワークフローを開始した EventBridge イベントの表示
<a name="viewing-start-event-info"></a>

ワークフローを開始した Amazon EventBridge イベントのイベント ID を表示できます。ワークフローがバッチされたイベントによって開始された場合は、そのバッチ内のすべてのイベントの、イベント ID を表示することが可能です。

バッチサイズが 1 より大きいワークフローでは、どのバッチ条件 (バッチサイズでのイベントの到着数、またはバッチウィンドウの有効期限) によってワークフローが開始されたかを確認することもできます。。

**ワークフローを開始した EventBridge イベントを表示するには (コンソール)**

1. AWS マネジメントコンソール にサインインし、AWS Glue コンソール ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)) を開きます。

1. ナビゲーションペインで、[**Workflows**] (ワークフロー) をクリックします。

1. ワークフローを選択します。下部で [**History**] (履歴) タブを選択します。

1. ワークフロー実行を選択し、[**View run details**] (実行の詳細を表示する) をクリックします。

1. 実行の詳細ページにある [**Run properties**] (実行プロパティ) フィールドで、[**aws:eventIds**] キーを検索します。

   このキーの値は、EventBridge イベント ID のリストです。

**ワークフローを開始した EventBridge イベントを表示するには (AWS API)**
+ Python スクリプトに次のコードを含めます。

  ```
  workflow_params = glue_client.get_workflow_run_properties(Name=workflow_name,RunId=workflow_run_id)
  batched_events = workflow_params['aws:eventIds']
  ```

  `batched_events` は、それぞれがイベント ID である文字列のリストです。

**関連情報**  
[Amazon EventBridge ユーザーガイド](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html)
[AWS Glue のワークフローの概要](workflows_overview.md)

# AWS Glue でのワークフローの実行とモニタリング
<a name="running_monitoring_workflow"></a>

ワークフローの開始トリガーがオンデマンドトリガーである場合は、AWS Glue コンソールからワークフローを開始できます。ワークフローの実行とモニタリングを行うには、以下の手順を完了します。ワークフローが失敗した場合は、実行グラフを表示し、どのノードで失敗したのかを判断します。ワークフローが設計図から作成された場合は、その設計図の実行を表示して、ワークフローの作成に使用された設計図パラメータ値を確認することで、トラブルシューティングの助けになります。(詳細については、[AWS Glue でブループリントの実行を表示する](viewing_blueprint_runs.md) を参照してください)。

ワークフローを実行およびモニタリングするには、AWS Glue コンソール、API、あるいは AWS Command Line Interface (AWS CLI) を使用します

**ワークフローを実行およびモニタリングするには (コンソール)**

1. [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) で AWS Glue コンソール を開きます。

1. ナビゲーションペインの [**ETL**] で、[**ワークフロー**] を選択します。

1. ワークフローを選択します。[**アクション**] メニューの [**実行**] を選択します。

1. ワークフローのリストで、[**Last run status**] (最終実行ステータス) 列を確認します。進行中のワークフローのステータスを表示するには、[Refresh] (更新) ボタンをクリックします。

1. ワークフローの実行中、もしくはワークフローが完了 (または失敗) した後、以下の手順を実行して実行の詳細を表示します。

   1. ワークフローが選択されていることを確認し、[**History**] (履歴) タブを選択します。

   1. 現在の、または最も新しいワークフロー実行を選択し、[**View run details**] (実行の詳細を表示する) をクリックします。

      ワークフローの実行グラフが、現在の実行ステータスを表示します。

   1. グラフ内の任意のノードを選択して、ノードの詳細とステータスを表示します。  
![\[実行グラフに、ジョブを開始する開始トリガーが表示されます。他のトリガーは、ジョブの完了を監視しています。ジョブノード (クリップボードアイコンとジョブ名を囲む長方形) が選択され、右側のペインにジョブの詳細が表示されます。ジョブの詳細には、ジョブの実行 ID とステータスが含まれています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/workflow-pre-select-resume.png)

**ワークフローを実行およびモニタリングするには (AWS CLI)**

1. 次のコマンドを入力します。*<workflow-name>* は、実行するワークフローに置き換えます。

   ```
   aws glue start-workflow-run --name <workflow-name>
   ```

   ワークフローが正常に開始されると、コマンドから実行 ID が返されます。

1. `get-workflow-run` コマンドを実行して、ワークフロー実行の状態を表示します。ワークフロー名と実行 ID を指定します。

   ```
   aws glue get-workflow-run --name myWorkflow --run-id wr_d2af14217e8eae775ba7b1fc6fc7a42c795aed3cbcd8763f9415452e2dbc8705
   ```

   以下に、このコマンドの出力例を示します。

   ```
   {
       "Run": {
           "Name": "myWorkflow",
           "WorkflowRunId": "wr_d2af14217e8eae775ba7b1fc6fc7a42c795aed3cbcd8763f9415452e2dbc8705",
           "WorkflowRunProperties": {
               "run_state": "COMPLETED",
               "unique_id": "fee63f30-c512-4742-a9b1-7c8183bdaae2"
           },
           "StartedOn": 1578556843.049,
           "CompletedOn": 1578558649.928,
           "Status": "COMPLETED",
           "Statistics": {
               "TotalActions": 11,
               "TimeoutActions": 0,
               "FailedActions": 0,
               "StoppedActions": 0,
               "SucceededActions": 9,
               "RunningActions": 0,
               "ErroredActions": 0
           }
       }
   }
   ```

**以下も参照してください。**  
[AWS Glue のワークフローの概要](workflows_overview.md)
[AWS Glue のブループリント概要](blueprints-overview.md)

# ワークフロー実行の停止
<a name="workflow-stopping"></a>

ワークフロー実行を停止するには、AWS Glue コンソール、AWS Command Line Interface (AWS CLI)、または AWS Glue API を使用できます。ワークフロー実行を停止すると、すべての実行中のジョブとクローラーは即座に終了され、まだ開始されていないジョブとクローラーは開始されることがありません。すべての実行中のジョブとクローラーが停止するまでに最大 1 分かかる場合があります。ワークフロー実行のステータスは [**実行中**] から [**停止中**] に変わり、ワークフロー実行が完全に停止すると、ステータスは [**停止済み**] になります。

ワークフロー実行の停止後に実行グラフを表示し、完了したジョブとクローラー、および開始しなかったジョブとクローラーを確認できます。これにより、データの整合性を確保するためのステップを実行する必要があるかどうかを判断できます。ワークフロー実行を停止すると、自動ロールバックオペレーションは実行されません。

**ワークフロー実行を停止するには (コンソール)**

1. [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) で AWS Glue コンソール を開きます。

1. ナビゲーションペインの [**ETL**] で、[**ワークフロー**] を選択します。

1. 実行中のワークフローを選択し、[**履歴**] タブを選択します。

1. ワークフロー実行を選択し、[**実行の停止**] を選択します。

   実行ステータスが [**停止中**] に変わります。

1. (オプション) ワークフロー実行を選択し、[**実行の詳細を表示する**] を選択して、実行グラフを確認します。

**ワークフロー実行を停止するには (AWS CLI)**
+ 次のコマンドを入力します。*<workflow-name>* はワークフローの名前に置き換え、*<run-id>* は停止するワークフロー実行の実行 ID に置き換えます。

  ```
  aws glue stop-workflow-run --name <workflow-name> --run-id <run-id>
  ```

  次に **stop-workflow-run** コマンドの例を示します。

  ```
  aws glue stop-workflow-run --name my-workflow --run-id wr_137b88917411d128081069901e4a80595d97f719282094b7f271d09576770354
  ```

# ワークフロー実行の修復と再開
<a name="resuming-workflow"></a>

 ワークフロー内の 1 つ以上のノード (ジョブまたはクローラ) が正常に完了しない場合、ワークフローは部分的にしか実行されなかったことを意味します。この根本原因を見つけて修正した上で、ワークフローの実行を再開するノードを 1 つ以上選択し、対象のワークフローを再開します。選択したノードと、それらのノードの下流にあるすべてのノードが実行されます。

**Topics**
+ [ワークフロー実行の再開の仕組み](#resume-workflow-howitworks)
+ [ワークフロー実行を再開する](#how-to-resume-workflow)
+ [ワークフロー実行の再開に関する注意と制限事項](#resume-workflow-notes)

## ワークフロー実行の再開の仕組み
<a name="resume-workflow-howitworks"></a>

次の図にある、ワークフロー W1 について考えてみます。

![\[ここでは、トリガーは長方形内に表示され、ジョブは円内に表示されています。左側にあるトリガー T1 は、ジョブ J1 を実行することでワークフローを開始します。後続にもトリガーとジョブがありますが、ジョブ J2 と J3 が失敗するため、その下流にあるトリガーとジョブは実行されていないことが分かります。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/workflow_W1.png)


ワークフロー実行は以下のように進行します。

1. トリガー T1 が、ジョブ J1 を開始します。

1. J1 が正常に完了すると、T2 と T3 がトリガーされ、それぞれジョブ J2 と J3 が実行されます。

1. ジョブ J2 と J3 が失敗します。

1. トリガー T4 と T5 は、J2 と J3 の正常な完了に依存するため、これらのトリガーは起動せずジョブ J4 と J5 も実行されません。ワークフロー W1 は部分的にのみ実行されます。

ここで、J2 と J3 の失敗の原因となった問題が修正されたとします。ワークフローの実行を再開する開始点として、J2 および J3 が選択されます。

![\[ジョブ J2 と J3 には、再開するノードとしてフラグが付けられます。下流にあるトリガーとジョブが正常に実行されたことが表示されます。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/workflow_W1_resumed.png)


ワークフローの実行は以下のように再開されます。

1. ジョブ J2 および J3 が正常に実行されます。

1. T4 と T5 がトリガーされます。

1. ジョブ J4 および J5 が正常に実行されます。

実行が再開されたワークフローは、新しい実行 ID を持つ別のワークフローとして追跡されます。ワークフロー履歴を表示することで、以前に行われたすべてのワークフロー実行の実行 ID を表示できます。次のスクリーンショットの例では、実行 ID `wr_c7a22...` (2 行目) を持つワークフローには、完了できなかったノードがあります。ユーザーが問題を解決し、ワークフローの実行を再開しました。その結果が、実行 ID `wr_a07e55...` (1 行目) として示されています。

![\[ワークフローの [History] (履歴) タブの下にあるテーブルには、ワークフロー実行ごとに 1 つずつ、2 つの行が表示されています。1 行目には、実行 ID と、以前の実行 ID の両方が含まれています。2 行目に表示されているのは、実行 ID のみです。最初の行にある以前の実行 ID は、2 行目での実行 ID と同じです。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/previous-run-id.png)


**注記**  
この説明の残りの部分では、「再開されたワークフロー実行」という表現は、以前のワークフロー実行が再開された際に作成されたワークフロー実行のことを指します。「元のワークフロー実行」とは、部分的にしか実行されず、再開する必要があったワークフロー実行を指します。

**再開されたワークフロー実行のグラフ**  
再開されたワークフロー実行では、ノードのサブセットのみが実行されますが、実行のグラフは完全な形で表示されます。つまり、再開されたワークフローで実行されなかったノードは、元のワークフロー実行の実行グラフからコピーされています。元のワークフロー実行で実行され、グラフにコピーされたジョブおよびクローラーのノードには、実行の詳細が含まれます。

前の図のワークフロー W1 について、もう一度考えてみます。ワークフロー実行が J2 および J3 から再開されると、再開されたワークフロー実行の実行グラフには、すべてのジョブ (J1 ～ J5)、およびすべてのトリガー (T1 ～ T5) が表示されます。J1 の実行に関する詳細が、元のワークフロー実行からコピーされます。

**ワークフロー実行のスナップショット**  
ワークフローの実行が開始されると、AWS Glue は、その時点でのワークフロー設計グラフのスナップショットを作成します。スナップショットの使用期間は、ワークフローの実行中です。実行の開始後にトリガーを変更した場合、その変更は、実行中のワークフローには影響しません。スナップショットを使用すると、ワークフローの実行を一貫した方法で行うことができます。

スナップショットでは、トリガーのみが不変になります。ワークフローの実行中に下流のジョブとクローラに加えた変更は、その時点の実行に対しても有効になります。

## ワークフロー実行を再開する
<a name="how-to-resume-workflow"></a>

ワークフローの実行を再開するには、以下の手順に従います。ワークフロー実行は、AWS Glue コンソール、API、または AWS Command Line Interface (AWS CLI) により再開させることができます。

**ワークフロー実行を再開するには (コンソール)**

1. [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) で AWS Glue コンソール を開きます。

   ワークフローを表示し、その実行を再開するためのアクセス許可を持つユーザーとして、サインインします。
**注記**  
ワークフローの実行を再開するには、`glue:ResumeWorkflowRun` AWS Identity and Access Management(IAM) のアクセス許可が必要です。

1. ナビゲーションペインで、[**Workflows**] (ワークフロー) をクリックします。

1. ワークフローを選択し、[**History**] (履歴) タブを選択します。

1. 部分的にしか実行されていないワークフロー実行を選択し、[**View run details**] (実行の詳細を表示する) をクリックします。

1. 実行グラフで、再起動しワークフロー実行の再開ポイントとする、最初の (または唯一の) ノードを選択します。

1. グラフの右側にある詳細ペインで、[**Resume**] (再開) チェックボックスをオンにします。  
![\[実行グラフには、失敗したジョブノードを含む 3 つのノードが表示されます。右側のジョブ詳細ペインには、[Resume] (再開) チェックボックスが表示されます。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/workflow-pre-select-resume.png)

   ノードの色が変わり、右上に小さな [Resume] (再開) アイコンが表示されます。  
![\[実行グラフへの変更点に関し、説明するテキストが表示されます。[Resume ] (再開) チェックボックスはオンになっています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/workflow-post-select-resume.png)

1. 再起動する追加のノードについて、前述の 2 つのステップを完了します。

1. [**Resume run**] (実行を再開) をクリックします。

**ワークフロー実行を再開するには (AWS CLI)**

1. `glue:ResumeWorkflowRun` IAM アクセス許可が付与されていることを確認します。

1. 再起動するノードのノード ID を取得します。

   1.  元のワークフロー実行のために、`get-workflow-run` コマンドを実行します。ワークフロー名と実行 ID を指定し、次の例に示すように、`--include-graph` オプションを追加します。コンソールの [**History**] (履歴) タブから実行 ID を取得します。もしくは `get-workflow` コマンドを実行し取得します。

      ```
      aws glue get-workflow-run --name cloudtrailtest1 --run-id wr_a07e55f2087afdd415a404403f644a4265278f68b13ba3da08c71924ebe3c3a8 --include-graph
      ```

      このコマンドは、グラフのノードとエッジを大きな JSON オブジェクトとして返します。

   1. ノードオブジェクトの `Type` および `Name` プロパティごとに、対象としているノードを見つけます。

      次に、出力されるノードオブジェクトの例を示します。

      ```
      {
          "Type": "JOB",
          "Name": "test1_post_failure_4592978",
          "UniqueId": "wnode_d1b2563c503078b153142ee76ce545fe5ceef66e053628a786ddd74a05da86fd",
          "JobDetails": {
              "JobRuns": [
                  {
                      "Id": "jr_690b9f7fc5cb399204bc542c6c956f39934496a5d665a42de891e5b01f59e613",
                      "Attempt": 0,
                      "TriggerName": "test1_aggregate_failure_649b2432",
                      "JobName": "test1_post_failure_4592978",
                      "StartedOn": 1595358275.375,
                      "LastModifiedOn": 1595358298.785,
                      "CompletedOn": 1595358298.785,
                      "JobRunState": "FAILED",
                      "PredecessorRuns": [],
                      "AllocatedCapacity": 0,
                      "ExecutionTime": 16,
                      "Timeout": 2880,
                      "MaxCapacity": 0.0625,
                      "LogGroupName": "/aws-glue/python-jobs"
                  }
              ]
          }
      }
      ```

   1. ノードオブジェクトの `UniqueId` プロパティから、ノード ID を取得します。

1. `resume-workflow-run` コマンドを実行します。次の例に示すように、ワークフロー名、実行 ID、およびノード ID のスペース区切りのリストを指定します。

   ```
   aws glue resume-workflow-run --name cloudtrailtest1 --run-id wr_a07e55f2087afdd415a404403f644a4265278f68b13ba3da08c71924ebe3c3a8 --node-ids wnode_ca1f63e918fb855e063aed2f42ec5762ccf71b80082ae2eb5daeb8052442f2f3  wnode_d1b2563c503078b153142ee76ce545fe5ceef66e053628a786ddd74a05da86fd
   ```

   このコマンドは、再開された (新しい) ワークフローの実行の ID と、開始されるノードのリストを出力します。

   ```
   {
       "RunId": "wr_2ada0d3209a262fc1156e4291134b3bd643491bcfb0ceead30bd3e4efac24de9",
       "NodeIds": [
           "wnode_ca1f63e918fb855e063aed2f42ec5762ccf71b80082ae2eb5daeb8052442f2f3"
       ]
   }
   ```

   この例での `resume-workflow-run` コマンドでは再起動するノード 2 つをリストしていますが、出力例では 1 つのノードのみが再起動されると表示していることに注意してください。これは、1 つのノードが他のノードの下流にあり、いずれにせよ、この下流のノードはワークフローの通常のフローによって再開されるためです。

## ワークフロー実行の再開に関する注意と制限事項
<a name="resume-workflow-notes"></a>

ワークフロー実行を再開する場合には、次の注意事項と制限事項に留意してください。
+ 実行を再開できるのは、`COMPLETED` 状態のワークフローのみです。
**注記**  
ワークフロー実行の中で 1 つ以上のノードが未完了の場合でも、ワークフロー実行の状態は `COMPLETED` となります。実行グラフをチェックして、正常に完了しなかったノードを見つける必要があります。
+ 元のワークフロー実行により実行が試みられた任意のジョブまたはクローラのノードから、ワークフロー実行を再開することができます。トリガーノードからは、ワークフロー実行を再開することはできません。
+ ノードを再起動しても、その状態はリセットされません。処理が部分的に完了しているデータのロールバックは行われません。
+ 失敗したワークフロー実行は複数回再開できます。ただし、再開された実行を再開できるのは、もう 1 回だけです。再試行を 1 回以上行う場合は、元の失敗した実行を再開してください。
+ 再起動のために 2 つのノードを選択し、それらが互いに依存している場合には、上流にあるノードが下流ノードより先に実行されます。実際、下流にあるノードはワークフローの通常のフローによって実行されるため、このノードを選択することは冗長的となります。

# AWS Glue でのワークフローの実行プロパティの取得と設定
<a name="workflow-run-properties-code"></a>

ワークフローの実行プロパティを使用して、AWS Glue ワークフローのジョブ間の状態を共有して管理します。デフォルトの実行プロパティは、ワークフローの作成時に設定できます。次に、ジョブの実行時に、ジョブは実行プロパティの値を取得して必要に応じて変更し、ワークフローの以降のジョブに対する入力として使用できます。ジョブが実行プロパティを変更した場合、新しい値が有効なのはワークフローの実行中に限られます。デフォルトの実行プロパティは影響を受けません。

AWS Glue ジョブがワークフローに含まれていない場合、これらのプロパティは設定されません。

次の Python コード例は抽出、変換、ロード (ETL) ジョブの一部で、ワークフローの実行プロパティを取得する方法を示しています。

```
import sys
import boto3
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from awsglue.context import GlueContext
from pyspark.context import SparkContext

glue_client = boto3.client("glue")
args = getResolvedOptions(sys.argv, ['JOB_NAME','WORKFLOW_NAME', 'WORKFLOW_RUN_ID'])
workflow_name = args['WORKFLOW_NAME']
workflow_run_id = args['WORKFLOW_RUN_ID']
workflow_params = glue_client.get_workflow_run_properties(Name=workflow_name,
                                        RunId=workflow_run_id)["RunProperties"]

target_database = workflow_params['target_database']
target_s3_location = workflow_params['target_s3_location']
```

次のコードは、`target_format` 実行プロパティを `'csv'` に設定することで続行します。

```
workflow_params['target_format'] = 'csv'
glue_client.put_workflow_run_properties(Name=workflow_name, RunId=workflow_run_id, RunProperties=workflow_params)
```

詳細については次を参照してください: 
+ [GetWorkflowRunProperties アクション (Python: get\$1workflow\$1run\$1properties)](aws-glue-api-workflow.md#aws-glue-api-workflow-GetWorkflowRunProperties)
+ [PutWorkflowRunProperties アクション (Python: put\$1workflow\$1run\$1properties)](aws-glue-api-workflow.md#aws-glue-api-workflow-PutWorkflowRunProperties)

# AWS Glue APIを使用したワークフローのクエリ
<a name="workflows_api_concepts"></a>

AWS Glue には、ワークフローを管理するための高度な API が用意されています。AWS Glue API を使用してワークフローの静的ビューまたは実行中のワークフローの動的ビューを取得できます。詳細については、[ワークフロー](aws-glue-api-workflow.md)を参照してください。

**Topics**
+ [静的ビューのクエリ](#workflows_api_concepts_static)
+ [動的ビューのクエリ](#workflows_api_concepts_dynamic)

## 静的ビューのクエリ
<a name="workflows_api_concepts_static"></a>

`GetWorkflow` API オペレーションを使用して、ワークフローの設計を示す静的ビューを取得します。このオペレーションは、ノードおよびエッジで構成される有向グラフを返します。ノードは、トリガー、ジョブ、またはクローラを表します。エッジは、ノード間の関係を定義します。AWS Glue コンソールのグラフでは、エッジがコネクタ (矢印) で表されます。

このオペレーションは、NetworkX、igraph、JGraphT、Java Universal Network/Graph (JUNG) Framework などの一般的なグラフ処理ライブラリでも使用できます。これらのライブラリが表すグラフはすべてが類似しているため、必要な変換は最小限です。

この API から返される静的ビューは、ワークフローに関連付けられているトリガーの最新の定義に基づく最新のビューです。

### グラフ定義
<a name="workflows_api_concepts_static_graph"></a>

ワークフローのグラフ G は順序付きペア (N、E) で、N はノードのセットを表し、E はエッジのセットを表します。*ノード* はグラフ内の頂点で、一意の数値で識別されます。ノードのタイプは、トリガー、ジョブ、またはクローラです。例: `{name:T1, type:Trigger, uniqueId:1}, {name:J1, type:Job, uniqueId:2}`。

*エッジ* は、2 タプルの形式(`src, dest`) です。 `src` と `dest` はノードで、`src` から `dest`への有向エッジがあります。

### 静的ビューのクエリの例を示します。
<a name="workflows_api_concepts_static_example"></a>

ジョブ J1 の完了時にジョブ J2 をトリガーする条件付きのトリガー T を考えます。

```
J1 ---> T ---> J2
```

ノード: J1、T、J2 

エッジ: (J1、T)、(T、J2)

## 動的ビューのクエリ
<a name="workflows_api_concepts_dynamic"></a>

`GetWorkflowRun` API オペレーションを使用して、実行中のワークフローの動的ビューを取得します。このオペレーションは、グラフの同じ静的ビューを、ワークフローの実行に関連するメタデータと共に返します。

実行の際、`GetWorkflowRun` 呼び出しのジョブを表すノードでは、最新のワークフロー実行の一部として開始されたジョブ実行のリストを含んでいます。このリストを使用して、各ジョブの実行ステータスをグラフ自体に表示できます。まだ実行されていないダウンストリームの依存関係の場合、このフィールドは `null` に設定されます。グラフ化された情報により、任意の時点における任意のワークフローの現在の状態を確認できます。

この API から返される動的ビューは、ワークフローの実行が開始された時点における静的ビューに基づいています。

*ランタイムノードの例:* `{name:T1, type: Trigger, uniqueId:1}`、`{name:J1, type:Job, uniqueId:2, jobDetails:{jobRuns}}`、`{name:C1, type:Crawler, uniqueId:3, crawlerDetails:{crawls}}`

### 例 1: 動的ビュー
<a name="workflows_api_concepts_dynamic_examples"></a>

次の例は、単純な 2 トリガーワークフローを示しています。
+ ノード: t1、j1、t2、j2 
+ エッジ: (t1, j1)、(j1, t2)、(t2, j2)

`GetWorkflow` レスポンスの内容は次のとおりです。

```
{
    Nodes : [
        {
            "type" : Trigger,
            "name" : "t1",
            "uniqueId" : 1
        },
        {
            "type" : Job,
            "name" : "j1",
            "uniqueId" : 2
        },
        {
            "type" : Trigger,
            "name" : "t2",
            "uniqueId" : 3
        },
        {
            "type" : Job,
            "name" : "j2",
            "uniqueId" : 4
        }
    ],
    Edges : [
        {
            "sourceId" : 1,
            "destinationId" : 2
        },
        {
            "sourceId" : 2,
            "destinationId" : 3
        },
        {
            "sourceId" : 3,
            "destinationId" : 4
        }
}
```

`GetWorkflowRun` レスポンスの内容は次のとおりです。

```
{
    Nodes : [
        {
            "type" : Trigger,
            "name" : "t1",
            "uniqueId" : 1,
            "jobDetails" : null,
            "crawlerDetails" : null
        },
        {
            "type" : Job,
            "name" : "j1",
            "uniqueId" : 2,
            "jobDetails" : [
                {
                    "id" : "jr_12334",
                    "jobRunState" : "SUCCEEDED",
                    "errorMessage" : "error string"
                }
            ],
            "crawlerDetails" : null
        },
        {
            "type" : Trigger,
            "name" : "t2",
            "uniqueId" : 3,
            "jobDetails" : null,
            "crawlerDetails" : null
        },
        {
            "type" : Job,
            "name" : "j2",
            "uniqueId" : 4,
            "jobDetails" : [
                {
                    "id" : "jr_1233sdf4",
                    "jobRunState" : "SUCCEEDED",
                    "errorMessage" : "error string"
                }
            ],
            "crawlerDetails" : null
        }
    ],
    Edges : [
        {
            "sourceId" : 1,
            "destinationId" : 2
        },
        {
            "sourceId" : 2,
            "destinationId" : 3
        },
        {
            "sourceId" : 3,
            "destinationId" : 4
        }
}
```

### 例 2: 複数のジョブと 1 つの条件付きのトリガー
<a name="workflows_api_concepts_dynamic_example_2"></a>

次の例は、複数のジョブと 1 つの条件付きのトリガー (t3) を持つワークフローを示しています。

```
Consider Flow:
T(t1) ---> J(j1) ---> T(t2) ---> J(j2)
             |                    |
             |                    |
             >+------> T(t3) <-----+
                        |
                        |
                      J(j3)

Graph generated:
Nodes: t1, t2, t3, j1, j2, j3
Edges: (t1, j1), (j1, t2), (t2, j2), (j1, t3), (j2, t3), (t3, j3)
```

# AWS Glue での設計図とワークフローの制限
<a name="blueprint_workflow_restrictions"></a>

設計図とワークフローについての制限を次に示します。

## 設計図での制限
<a name="bluprint-restrictions"></a>

設計図については、以下の制限に注意してください。
+ 設計図は、Amazon S3 バケットが置かれているのと同じ AWS リージョンに登録される必要があります。
+ 設計図を AWS アカウント間で共有する場合は、Amazon S3 内で設計図の ZIP アーカイブに対する読み取りを許可する必要があります。設計図の ZIP アーカイブに対する読み取り許可を持つユーザーは、自分の AWS アカウントに設計図を登録し、それを使用することができます。
+ 設計図のパラメータセットは、単一の JSON オブジェクトとして格納されます。このオブジェクトの最大長は 128 KB です。
+ 設計図の ZIP アーカイブにおける非圧縮状態での最大サイズは 5 MB です。圧縮状態での最大サイズは 1 MB です。
+ ワークフロー内のジョブ、クローラ、トリガーの総数を、100 以下に制限します。100 を超える値を含めると、ワークフローの実行を再開または停止しようとした場合にエラーが発生することがあります。

## ワークフローの制限
<a name="workflow-restrictions"></a>

ワークフローについては、以下の制限に注意してください。これらのコメントの中には、ワークフローを手動で作成しているユーザーに直接関係するものがあります。
+ Amazon EventBridge のイベントトリガーの最大バッチサイズは 100 です。最大ウィンドウサイズは 900 秒 (15 分) です。
+ トリガーは 1 つのワークフローにのみ関連付けることができます。
+ 1 つの開始トリガー (オンデマンドまたはスケジュール) のみが許可されます。
+ ワークフロー内のジョブまたはクローラがワークフロー外のトリガーによって開始された場合、ジョブまたはクローラの完了 (成功またはその他) に依存するワークフロー内のトリガーは起動されません。
+ 同様に、ワークフロー内のジョブまたはクローラに、ワークフロー内とワークフロー外の両方でジョブまたはクローラの完了 (成功またはそれ以外) に依存するトリガーがあり、さらにジョブまたはクローラがワークフロー内から開始されている場合には、ジョブまたはクローラの完了時、ワークフロー内のトリガーのみが起動されます。

# AWS Glue での設計図エラーをトラブルシューティングする
<a name="blueprint_workflow_troubleshoot"></a>

AWS Glue の設計図を使用する際にエラーが発生した場合は、次の解決策を参照しながら問題の原因を突き止め、それを修正してください。

**Topics**
+ [エラー: PySpark モジュールが見つからない](#blueprint-workflow-error-1)
+ [エラー: 設計図の設定ファイルが見つからない](#blueprint-workflow-error-2)
+ [エラー:インポートされたファイルが見つからない](#blueprint-workflow-error-3)
+ [エラー:リソースでの iamPassRole の実行が承認されない](#blueprint-workflow-error-4)
+ [エラー: cron スケジュールが無効](#blueprint-workflow-error-5)
+ [エラー: 既存のものと同じ名前を使用してのトリガー](#blueprint-workflow-error-6)
+ [エラー:名前:foo という名前のワークフローが既に存在する](#blueprint-workflow-error-7)
+ [エラー: 指定された layoutGenerator のパスにモジュールが見つからない](#blueprint-workflow-error-8)
+ [エラー: Connections フィールドの検証エラー](#blueprint-workflow-error-9)

## エラー: PySpark モジュールが見つからない
<a name="blueprint-workflow-error-1"></a>

AWS Glue が、「Unknown error executing layout generator function ModuleNotFoundError: No module named 'pyspark'」というエラーを返します。

設計図アーカイブを解凍すると、以下のいずれかのようになります。

```
$ unzip compaction.zip 
Archive:  compaction.zip
   creating: compaction/
  inflating: compaction/blueprint.cfg  
  inflating: compaction/layout.py    
  inflating: compaction/README.md    
  inflating: compaction/compaction.py   
  
$ unzip compaction.zip
Archive:  compaction.zip
  inflating: blueprint.cfg           
  inflating: compaction.py           
  inflating: layout.py               
  inflating: README.md
```

1 つ目のケースでは、設計図に関連するすべてのファイルが compaction という名前のフォルダの下に配置され、その後で *compaction.zip* という名前の zip ファイルに変換されています。

2 つ目のケースでは、設計図に必要なすべてのファイルをフォルダに配置せずに、zip ファイル *compaction.zip* に対しルートファイルとして追加しています。

上記の形式のどちらを使用しても、ファイルを作成することができます。ただし、`blueprint.cfg` の中には、レイアウトを生成するスクリプト内の関数名を指す正しいパスが必要です。

**例**  
ケース 1 の場合、`blueprint.cfg` には以下のように `layoutGenerator` が必要です

```
layoutGenerator": "compaction.layout.generate_layout"
```

ケース 2 の場合、`blueprint.cfg` には以下のように `layoutGenerator` が必要です

```
layoutGenerator": "layout.generate_layout" 
```

このパスが正しく指定されていない場合は、次のようなエラーが表示されることがあります。例えば、フォルダをケース 2 で説明した構造としながら、ケース 1 で示した `layoutGenerator` が使用されている場合、上記のようなエラーが発生する場合があります。

## エラー: 設計図の設定ファイルが見つからない
<a name="blueprint-workflow-error-2"></a>

AWS Glue が、「Unknown error executing layout generator function FileNotFoundError: [Errno 2] No such file or directory: '/tmp/compaction/blueprint.cfg」というエラーを返します。

blueprint.cfg ファイルは、ZIP アーカイブのルートレベルか、ZIP アーカイブと同じ名前のフォルダ内に配置する必要があります。

設計図の ZIP アーカイブを抽出すると、通常、blueprint.cfg は、下記のいずれかのパスで見つかります。以下のパスのいずれかに配置されていない場合には、上記のエラーが表示されます。

```
$ unzip compaction.zip 
Archive:  compaction.zip
   creating: compaction/
  inflating: compaction/blueprint.cfg  
  
$ unzip compaction.zip
Archive:  compaction.zip
  inflating: blueprint.cfg
```

## エラー:インポートされたファイルが見つからない
<a name="blueprint-workflow-error-3"></a>

AWS Glue が、「Unknown error executing layout generator function FileNotFoundError: [Errno 2] No such file or directory:\$1 \$1'demo-project/foo.py」というエラーを返します。

レイアウト生成スクリプトに他のファイルを読み込む機能がある場合は、インポートするファイルの完全なパスを指定する必要があります。例えば、Conversion.py スクリプトは Layout.py から参照されることがあります。詳細については、「[Sample Blueprint Project](https://docs.aws.amazon.com/glue/latest/dg/developing-blueprints-sample.html)」を参照してください。

## エラー:リソースでの iamPassRole の実行が承認されない
<a name="blueprint-workflow-error-4"></a>

AWS Glue が、「User: arn:aws:sts::123456789012:assumed-role/AWSGlueServiceRole/GlueSession is not authorized to perform: iam:PassRole on resource: arn:aws:iam::123456789012:role/AWSGlueServiceRole」というエラーを返します。

ワークフロー内のジョブとクローラが、設計図からワークフローを作成するために渡されたロールと同じロールを引き受ける場合、設計図のロールには、それ自体に対する `iam:PassRole` アクセス許可を含める必要があります。

ワークフロー内のジョブとクローラが、設計図からワークフローのエンティティを作成するために渡されたロール以外のロールを引き受ける場合、設計図のロールには、それ自体のロールではなく引き受けたロールに対する、`iam:PassRole` アクセス許可を含める必要があります。

詳細については、「[Permissions for Blueprint Roles](https://docs.aws.amazon.com/glue/latest/dg/blueprints-personas-permissions.html#blueprints-role-permissions)」を参照してください。

## エラー: cron スケジュールが無効
<a name="blueprint-workflow-error-5"></a>

AWS Glue が、「The schedule cron(0 0 \$1 \$1 \$1 \$1) is invalid.」というエラーを返します。

有効な [cron](https://en.wikipedia.org/wiki/Cron) 式を指定します。詳細については、「[Time-Based Schedules for Jobs and Crawlers](https://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html)」を参照してください。

## エラー: 既存のものと同じ名前を使用してのトリガー
<a name="blueprint-workflow-error-6"></a>

AWS Glue が、「Trigger with name 'foo\$1starting\$1trigger' already submitted with different configuration」というエラーを返します。

設計図でワークフローを作成するために、レイアウトスクリプトの中でトリガーを定義する必要はありません。トリガーの作成は、2 つのアクション間に定義された依存関係に基づいて、設計図ライブラリによって管理されます。

トリガーの名前は、次のように決定されます。
+ ワークフローの開始トリガーの場合は、<workflow\$1name>\$1starting\$1trigger のような名前になります。
+ ワークフロー内のノード (ジョブ/クローラ) で、1 つまたは複数の上流ノードの完了に依存している場合、AWS Glue はトリガーを、<workflow\$1name>\$1<node\$1name>\$1trigger のような名前で定義します

このエラーは、既に存在するものと同じ名前で、トリガーが発生したことを意味します。既存のトリガーを削除すれば、ワークフローの作成を再実行できます。

**注記**  
ワークフローを削除しても、ワークフロー内のノードは削除されません。ワークフローが削除されても、トリガーが残されている場合があります。このため、作成したワークフローを削除した後に、同じ名前で同じ設計図から再作成しようとすると、ワークフローが既に存在していることを知らせるエラーは表示されずに、トリガーが既に存在している、というエラーが出力されることがあります。

## エラー:名前:foo という名前のワークフローが既に存在する
<a name="blueprint-workflow-error-7"></a>

ワークフロー名は一意である必要があります。別の名前で再試行してください。

## エラー: 指定された layoutGenerator のパスにモジュールが見つからない
<a name="blueprint-workflow-error-8"></a>

AWS Glue が、「Unknown error executing layout generator function ModuleNotFoundError: No module named 'crawl\$1s3\$1locations'」というエラーを返します。

```
layoutGenerator": "crawl_s3_locations.layout.generate_layout"
```

例えば、上記の LayoutGenerator パスを指定しながら設計図アーカイブを解凍する際には、次のようにする必要があります。

```
$ unzip crawl_s3_locations.zip 
Archive:  crawl_s3_locations.zip
   creating: crawl_s3_locations/
  inflating: crawl_s3_locations/blueprint.cfg  
  inflating: crawl_s3_locations/layout.py    
  inflating: crawl_s3_locations/README.md
```

アーカイブの解凍時に、設計図アーカイブが次のようになっている場合は、上記のエラーが発生することがあります。

```
$ unzip crawl_s3_locations.zip
Archive:  crawl_s3_locations.zip
  inflating: blueprint.cfg           
  inflating: layout.py               
  inflating: README.md
```

`crawl_s3_locations` という名前のフォルダがなく、`layoutGenerator` パスがモジュール `crawl_s3_locations` を介してレイアウトファイルを参照している場合に、上記のエラーが発生する可能性があります。

## エラー: Connections フィールドの検証エラー
<a name="blueprint-workflow-error-9"></a>

AWS Glue が、「Unknown error executing layout generator function TypeError: Value ['foo'] for key Connections should be of type <class 'dict'>\$1」というエラーを返します。

これは検証に関するエラーです。`Job` クラス内の `Connections` フィールドはディクショナリの使用を想定しており、代わりに値のリストが提供された場合には、エラーの原因となります。

```
User input was list of values
Connections= ['string']

Should be a dict like the following
Connections*=*{'Connections': ['string']}
```

設計図からワークフローを作成する際に発生する、これらの実行時エラーを回避するには、「[Testing a Blueprint](https://docs.aws.amazon.com/glue/latest/dg/developing-blueprints-testing.html)」に概略されているとおりに、ワークフロー、ジョブ、およびクローラの定義を検証します。

レイアウトスクリプト内での AWS Glue ジョブ、クローラ、ワークフローの定義に関しては、「[AWS Glue Blueprint Classes Reference](https://docs.aws.amazon.com/glue/latest/dg/developing-blueprints-code-classes.html)」にある構文を参照してください。

# AWS Glue ブループリントでのペルソナおよびロール用のアクセス許可
<a name="blueprints-personas-permissions"></a>

以下は、AWS Identity and Access Management ブループリントのための典型的なペルソナと、ペルソナおよびロール用に提案されている AWS Glue(IAM) アクセス許可ポリシーです。

**Topics**
+ [設計図のペルソナ](#blueprints-personas)
+ [設計図のペルソナ用のアクセス許可](#blueprints-permssions)
+ [設計図のロール用のアクセス許可](#blueprints-role-permissions)

## 設計図のペルソナ
<a name="blueprints-personas"></a>

以下は、一般的に、AWS Glue ブループリントのライフサイクルに関与するペルソナです


| ペルソナ | 説明 | 
| --- | --- | 
| AWS Glue 開発者 | 設計図を開発、テスト、公開します。 | 
| AWS Glue 管理者 | 設計図を登録および保守し、アクセス許可を付与します。 | 
| データアナリスト | 設計図を実行してワークフローを作成します。 | 

(詳細については、[AWS Glue のブループリント概要](blueprints-overview.md) を参照してください)。

## 設計図のペルソナ用のアクセス許可
<a name="blueprints-permssions"></a>

設計図のペルソナごとに、提案されているアクセス許可を以下に示します。



### ブループリントのための AWS Glue デベロッパー権限
<a name="bp-persona-dev"></a>

AWS Glue デベロッパーには設計図の公開に使用される Amazon S3 バケットに対する、書き込みのアクセス許可が必要です。多くの場合、デベロッパーはアップロードした後に設計図を登録します。その場合、デベロッパーには [ブループリントのための AWS Glue 管理者のアクセス許可](#bp-persona-admin) に一覧表示されているアクセス許可が必要です。さらに、デベロッパーが登録後に設計図をテストする場合は、[設計図のためのデータアナリストの権限](#bp-persona-analyst) に一覧表示されているアクセス許可も必要となります。

### ブループリントのための AWS Glue 管理者のアクセス許可
<a name="bp-persona-admin"></a>

次のポリシーでは、AWS Glue ブループリントを登録、表示、保守するためのアクセス許可が付与されます。

**重要**  
次のポリシーでは、*<s3-bucket-name>* および *<prefix>* を、登録のためにアップロードされた設計図の ZIP アーカイブを指す Amazon S3 パスに置き換えます。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:CreateBlueprint",
        "glue:UpdateBlueprint",
        "glue:DeleteBlueprint",
        "glue:GetBlueprint",
        "glue:ListBlueprints",
        "glue:BatchGetBlueprints"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/*"
    }
  ]
}
```

------

### 設計図のためのデータアナリストの権限
<a name="bp-persona-analyst"></a>

次のポリシーは、設計図を実行し、結果のワークフローとワークフローコンポーネントを表示するアクセス許可を付与します。また、ワークフローおよびワークフローコンポーネントを作成するために `PassRole` が引き受ける、AWS Glue というロールを付与ます。

このポリシーでは、任意のリソースに対するアクセス許可が付与されます。個々の設計図へのきめ細かなアクセスを構成する場合は、設計図の ARN に次の形式を使用します。

```
arn:aws:glue:<region>:<account-id>:blueprint/<blueprint-name>
```

**重要**  
次のポリシーでは、*<account-id>* を有効な AWS アカウントに置き換え、*<role-name>* を設計図の実行に使用するロールの名前に置き換えます。このロールに必要なアクセス許可については、「[設計図のロール用のアクセス許可](#blueprints-role-permissions)」を参照してください。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListBlueprints",
        "glue:GetBlueprint",
        "glue:StartBlueprintRun",
        "glue:GetBlueprintRun",
        "glue:GetBlueprintRuns",
        "glue:GetCrawler",
        "glue:ListTriggers",
        "glue:ListJobs",
        "glue:BatchGetCrawlers",
        "glue:GetTrigger",
        "glue:BatchGetWorkflows",
        "glue:BatchGetTriggers",
        "glue:BatchGetJobs",
        "glue:BatchGetBlueprints",
        "glue:GetWorkflowRun",
        "glue:GetWorkflowRuns",
        "glue:ListCrawlers",
        "glue:ListWorkflows",
        "glue:GetJob",
        "glue:GetWorkflow",
        "glue:StartWorkflowRun"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iam:PassRole",
      "Resource": "arn:aws:iam::111122223333:role/role-name"
    }
  ]
}
```

------

## 設計図のロール用のアクセス許可
<a name="blueprints-role-permissions"></a>

設計図からワークフローを作成するために、IAM ロール用として提案されているアクセス許可を次に示します。このロールには `glue.amazonaws.com` との信頼関係が必要です。

**重要**  
次のポリシーでは、*<account-id>* を有効な AWS アカウントに置き換え、*<role-name>* をロールの名前に置き換えます。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:CreateJob",
        "glue:GetCrawler",
        "glue:GetTrigger",
        "glue:DeleteCrawler",
        "glue:CreateTrigger",
        "glue:DeleteTrigger",
        "glue:DeleteJob",
        "glue:CreateWorkflow",
        "glue:DeleteWorkflow",
        "glue:GetJob",
        "glue:GetWorkflow",
        "glue:CreateCrawler"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iam:PassRole",
      "Resource": "arn:aws:iam::111122223333:role/role-name"
    }
  ]
}
```

------

**注記**  
ワークフロー内のジョブとクローラが、このロール以外のロールを引き受ける場合、このポリシーには、設計図のロールのものではなく引き受けたロールでの `iam:PassRole` アクセス許可を付与する必要があります。

# AWS Glue のブループリントの開発
<a name="orchestrate-using-blueprints"></a>

組織が、類似した一連の ETL ユースケースを実行する場合、それらすべてをパラメータ化した単一のワークフローで処理することでメリットが得られます。このようなニーズに応えるため、AWS Glue では、*設計図*を定義して、ワークフローの生成に使用できるようになってます。設計図にはパラメータを渡すことができるので、データアナリストは単一の設計図からさまざまなワークフローを作成して、類似の ETL ユースケースを処理できます。作成した設計図は、別の部門、チーム、プロジェクトでの再利用が可能です。

**Topics**
+ [AWS Glue のブループリント概要](blueprints-overview.md)
+ [AWS Glue のブループリントの開発](developing-blueprints.md)
+ [AWS Glue でブループリントを登録する](registering-blueprints.md)
+ [AWS Glue でブループリントを表示する](viewing_blueprints.md)
+ [AWS Glue でブループリントを更新する](updating_blueprints.md)
+ [AWS Glue で設計図からワークフローを作成する](creating_workflow_blueprint.md)
+ [AWS Glue でブループリントの実行を表示する](viewing_blueprint_runs.md)

# AWS Glue のブループリント概要
<a name="blueprints-overview"></a>

**注記**  
ブループリント機能は、現在、AWS Glue コンソールの次のリージョンではご利用いただけません。アジアパシフィック (ジャカルタ)、中東 (UAE)。

AWS Glue ブループリントにより、AWS Glue ワークフローを作成ならびに共有する手段が提供されます。複雑な ETL プロセスで、使用できるユースケースが類似している場合には、ユースケースごとに AWS Glue ワークフローを作成する代わりにブループリントを 1 つ作成します。

設計図では、ワークフローに含めるジョブとクローラを指定し、ワークフローを作成するために設計図が実行される際にワークフローのユーザーから提供すべきパラメータも指定します。パラメータを使用することで、単一のブループリントにより、類似したさまざまなユースケースのワークフローを生成できるようになります。ワークフローの詳細については、「[AWS Glue のワークフローの概要](workflows_overview.md)」を参照してください。

設計図に関するユースケースの例を次に示します。
+ 既存のデータセットを分割する場合。Amazon Simple Storage Service (Amazon S3) のソースならびにターゲットへのパス、およびパーティション列のリストが、設計図への入力パラメータとなります。
+ Amazon DynamoDB テーブルのスナップショットを、Amazon Redshift のような SQL データストア内に作成する場合。ブループリントへの入力パラメータは、DynamoDB テーブル名と AWS Glue の接続となります。このパラメータにより、Amazon Redshift クラスターと送信先のデータベースを指定します。
+ 複数の Amazon S3 パスの CSV データを Parquet に変換する場合。AWS Glue ワークフローに、パスごとの個別のクローラとジョブを含める必要があります。AWS Glue Data Catalog 内の送信先データベースと、Amazon S3 パスのコンマ区切りのリストが入力パラメーターとなります。この場合、ワークフローが作成するクローラおよびジョブの数は可変であることに注意してください。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/s3Bm8ay53Ms/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/s3Bm8ay53Ms)


**設計図のコンポーネント**  
設計図は、以下のコンポーネントを含む ZIP アーカイブです。
+ Python レイアウトジェネレータスクリプト

  ワークフローの*レイアウト* (ワークフロー用に作成するジョブとクローラ、ジョブとクローラのプロパティ、およびジョブとクローラの依存関係) を指定する関数が含まれています。この関数はブループリントのパラメータを受け取り、AWS Glue がワークフロー生成のために使用するワークフロー構造 (JSON オブジェクト) を返します。ワークフローの生成には Python スクリプトを使用するので、ユースケースに適した独自のロジックを追加できます。
+ 設定ファイル

  ワークフローのレイアウトを生成する Python 関数の完全な修飾名を指定します。スクリプトで使用されるすべての設計図パラメータの名前、データタイプ、およびその他のプロパティも指定します。
+ (オプション) ETL スクリプトとサポートファイル

  高度なユースケースとして、ジョブで使用する ETL スクリプトの場所をパラメータ化できます。ZIP アーカイブにジョブスクリプトファイルを含め、スクリプトのコピー先となる Amazon S3 ロケーションを設計図パラメータとして指定できます。レイアウトジェネレータスクリプトは、指定された場所に ETL スクリプトをコピーし、そのコピー先をジョブスクリプトの場所プロパティとして指定します。スクリプトで処理するための、ライブラリやその他のサポートファイルを含めることもできます。

![\[[Blueprint] (設計図) のラベルが付いたボックスには、[Python Script] (Python スクリプト) というラベルが付いたボックスと、[Config File] (設定ファイル) というラベルが付いた、類似のボックスが 2 つ含まれます。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/blueprint.png)


**設計図の実行**  
ブループリントからワークフローを作成すると、AWS Glue でブループリントが実行され、ワークフローがカプセル化するジョブ、クローラー、およびトリガーを作成する非同期プロセスが開始します。AWS Glue でブループリントの実行を使用して、ワークフローとそのコンポーネントの作成をオーケストレートします。設計図の実行ステータスを表示すると、作成プロセスのステータスを知ることができます。設計図の実行では、設計図パラメータに指定した値の保存も行われます。

![\[[Blueprint run] (設計図実行) というラベルの付いたボックスに、[Workflow ] (ワークフロー) および [Parameter Value] (パラメータ値) のラベルが付いたアイコンが表示されます。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/blueprint-run.png)


ブループリントの実行は、AWS Glue コンソールまたは AWS Command Line Interface (AWS CLI) を使用して表示できます。ワークフローを表示またはトラブルシューティングする場合には、いつでも設計図の実行に戻り、ワークフローの作成に使用された設計図のパラメータ値を確認できます。

**設計図のライフサイクル**  
ブループリントは、AWS Glue により開発、テスト、登録が行われ、これを実行することでワークフローが作成されます。設計図のライフサイクルには、通常 3 つのペルソナが関与します。


| ペルソナ | タスク | 
| --- | --- | 
| AWS Glue デベロッパー |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/blueprints-overview.html)  | 
| AWS Glue 管理者 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/blueprints-overview.html)  | 
| データアナリスト |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/blueprints-overview.html)  | 

**関連情報**  
[AWS Glue のブループリントの開発](developing-blueprints.md)
[AWS Glue で設計図からワークフローを作成する](creating_workflow_blueprint.md)
[AWS Glue ブループリントでのペルソナおよびロール用のアクセス許可](blueprints-personas-permissions.md)

# AWS Glue のブループリントの開発
<a name="developing-blueprints"></a>

AWS Glue デベロッパーは、データアナリストがワークフローを生成するための設計図を作成および公開できます。

**Topics**
+ [設計図の開発の概要](developing-blueprints-overview.md)
+ [設計図の開発のための前提条件](developing-blueprints-prereq.md)
+ [設計図コードを記述する](developing-blueprints-code.md)
+ [設計図プロジェクト例](developing-blueprints-sample.md)
+ [設計図をテストする](developing-blueprints-testing.md)
+ [設計図を公開する](developing-blueprints-publishing.md)
+ [AWS Glue ブループリントクラスリファレンス](developing-blueprints-code-classes.md)
+ [設計図の例](developing-blueprints-samples.md)

**関連情報**  
[AWS Glue のブループリント概要](blueprints-overview.md)

# 設計図の開発の概要
<a name="developing-blueprints-overview"></a>

開発プロセスの最初のステップは、設計図からのメリットが活かせるような、共通点のあるユースケースを特定することです。典型的なユースケースとしては、一般化した方法での解決が想定される、反復的な ETL の問題が考えられます。次に、その一般化されたユースケースを実装するために設計図を構成します。一般化されたユースケースを使用して特定のユースケースを定義できるように、設計図の入力パラメータを定義します。

設計図は、その設計図のパラメータ構成ファイルを含むプロジェクトと、生成するワークフローの*レイアウト*を定義するスクリプトにより構成されます。レイアウトは、作成するジョブとクローラ (または設計図の用語における*エンティティ*) を定義します。

レイアウトスクリプトでは、トリガーを直接指定しません。その代わり、スクリプトが作成するジョブやクローラー間の依存関係を指定するコードを書き込みます。AWS Glue は依存関係の指定に基づき、トリガーを生成します。レイアウトスクリプトからは、すべてのワークフローエンティティの仕様を含む、ワークフローオブジェクトが出力されます。

ワークフローオブジェクトの構築には、以下に示す AWS Glue のブループリントライブラリを使用します。
+ `awsglue.blueprint.base_resource` – ライブラリで使用される基本リソースのライブラリ。
+ `awsglue.blueprint.workflow` – `Workflow` クラスを定義するためのライブラリ。
+ `awsglue.blueprint.job` – `Job` クラスを定義するためのライブラリ。
+ `awsglue.blueprint.crawler` – `Crawler` クラスを定義するためのライブラリ。

上記の他には、Python シェルで使用できるライブラリのみが、レイアウト生成用のライブラリとしてサポートされています。

設計図ライブラリで定義されたメソッドを使用することで、公開前の設計図をローカルでテストできます。

設計図をデータアナリストに提供する準備ができたら、スクリプト、パラメータ設定ファイル、および追加のスクリプトやライブラリなどのサポートファイルを、単一のデプロイ可能なアセットの中にパッケージ化します。次に、このアセットを Amazon S3 にアップロードし、AWS Glue への登録を管理者に依頼します。

その他の設計図プロジェクトの例については、「[設計図プロジェクト例](developing-blueprints-sample.md)」および「[設計図の例](developing-blueprints-samples.md)」を参照してください。

# 設計図の開発のための前提条件
<a name="developing-blueprints-prereq"></a>

ブループリントを開発するには、AWS Glue と Apache Spark ETL ジョブや Python シェルジョブのスクリプト記述に関する知識が必要です。また、以下のセットアップタスクも完了する必要があります。
+ 設計図レイアウトスクリプトで使用する 4 個の AWS Python ライブラリのダウンロード
+ AWS SDK のセットアップ。
+ AWS CLI のセットアップ。

## Python ライブラリをダウンロードする
<a name="prereqs-get-libes"></a>

以下のライブラリを GitHub からダウンロードし、自分のプロジェクトにインストールします。
+ [https://github.com/awslabs/aws-glue-blueprint-libs/tree/master/awsglue/blueprint/base\$1resource.py](https://github.com/awslabs/aws-glue-blueprint-libs/tree/master/awsglue/blueprint/base_resource.py)
+ [https://github.com/awslabs/aws-glue-blueprint-libs/tree/master/awsglue/blueprint/workflow.py](https://github.com/awslabs/aws-glue-blueprint-libs/tree/master/awsglue/blueprint/workflow.py)
+ [https://github.com/awslabs/aws-glue-blueprint-libs/tree/master/awsglue/blueprint/crawler.py](https://github.com/awslabs/aws-glue-blueprint-libs/tree/master/awsglue/blueprint/crawler.py)
+ [https://github.com/awslabs/aws-glue-blueprint-libs/tree/master/awsglue/blueprint/job.py](https://github.com/awslabs/aws-glue-blueprint-libs/tree/master/awsglue/blueprint/job.py)

## AWS Java SDK のセットアップ
<a name="prereqs-java-preview-sdk"></a>

AWS Java SDK に対しては、設計図の API を含む `jar` ファイルを追加する必要があります。

1. まだ追加していない場合には、AWS SDK for Java のセットアップを行います。
   + Java 1.x の場合は、「AWS SDK for Java デベロッパーガイド」の「[AWS SDK for Java の入手方法](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-install.html)」にある手順に従ってください。
   + Java 2.x の場合は、「AWS SDK for Java 2.x デベロッパーガイド」の「[AWS SDK for Java 2.x のセットアップ](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html)」にある手順に従ってください。

1. 設計図の API へのアクセス許可が付与されている、クライアント `jar` ファイルをダウンロードします。
   + Java 1.x 用ファイル: s3://awsglue-custom-blueprints-preview-artifacts/awsglue-java-sdk-preview/AWSGlueJavaClient-1.11.x.jar
   + Java 2.x 用ファイル: s3://awsglue-custom-blueprints-preview-artifacts/awsglue-java-sdk-v2-preview/AwsJavaSdk-Glue-2.0.jar

1. Java クラスパスの先頭にクライアント `jar` を追加して、AWS Java SDK で提供された AWS Glue クライアントをオーバーライドします。

   ```
   export CLASSPATH=<path-to-preview-client-jar>:$CLASSPATH
   ```

1. (オプション) 次の Java アプリケーションを使用して SDK をテストします。このアプリケーションは空のリストを出力するように設定されています。

   `accessKey` および `secretKey` は自分の認証情報に置き換え、`us-east-1` は使用しているリージョンに置き換えます。

   ```
   import com.amazonaws.auth.AWSCredentials;
   import com.amazonaws.auth.AWSCredentialsProvider;
   import com.amazonaws.auth.AWSStaticCredentialsProvider;
   import com.amazonaws.auth.BasicAWSCredentials;
   import com.amazonaws.services.glue.AWSGlue;
   import com.amazonaws.services.glue.AWSGlueClientBuilder;
   import com.amazonaws.services.glue.model.ListBlueprintsRequest;
   
   public class App{
       public static void main(String[] args) {
           AWSCredentials credentials = new BasicAWSCredentials("accessKey", "secretKey");
           AWSCredentialsProvider provider = new AWSStaticCredentialsProvider(credentials);
           AWSGlue glue = AWSGlueClientBuilder.standard().withCredentials(provider)
                   .withRegion("us-east-1").build();
           ListBlueprintsRequest request = new ListBlueprintsRequest().withMaxResults(2);
           System.out.println(glue.listBlueprints(request));
       }
   }
   ```

## AWS Python SDK をセットアップする
<a name="prereqs-python-preview-sdk"></a>

次の手順では、Python バージョン 2.7 以降、またはバージョン 3.9 以降が、コンピュ―タ上にインストールされていることを前提としています。

1. 次の boto3 wheel ファイルをダウンロードします。ファイルを開くか保存することを促された場合は、次のファイルを保存します。s3://awsglue-custom-blueprints-preview-artifacts/aws-python-sdk-preview/boto3-1.17.31-py2.py3-none-any.whl

1. 次の botocore wheel ファイルをダウンロードします。s3://awsglue-custom-blueprints-preview-artifacts/aws-python-sdk-preview/botocore-1.20.31-py2.py3-none-any.whl

1. 使用している Python のバージョンを確認します。

   ```
   python --version
   ```

1. Python のバージョンに応じて、以下のコマンドを入力します (Linux の場合)。
   + Python 2.7 以降の場合。

     ```
     python3 -m pip install --user virtualenv
     source env/bin/activate
     ```
   + Python 3.9 以降の場合。

     ```
     python3 -m venv python-sdk-test
     source python-sdk-test/bin/activate
     ```

1. botocore wheel ファイルをインストールします。

   ```
   python3 -m pip install <download-directory>/botocore-1.20.31-py2.py3-none-any.whl
   ```

1. boto3 wheel ファイルをインストールします。

   ```
   python3 -m pip install <download-directory>/boto3-1.17.31-py2.py3-none-any.whl
   ```

1. `~/.aws/credentials` および `~/.aws/config` ファイル内で、認証情報およびデフォルトのリージョンを指定します。詳細については、「[AWS CLI ユーザーガイド](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)」の「*AWS Command Line Interface の設定*。」を参照してください。

1. (オプション) セットアップをテストします。次のコマンドは、空のリストを返すように設定されています。

   `us-east-1` は、実際のリージョンに置き換えます。

   ```
   $ python
   >>> import boto3
   >>> glue = boto3.client('glue', 'us-east-1')
   >>> glue.list_blueprints()
   ```

## プレビュー AWS CLI をセットアップする
<a name="prereqs-setup-cli"></a>

1. まだの場合は、コンピュータ上で AWS Command Line Interface (AWS CLI) のインストールおよび (または)更新を行ってください。この作業は、Python インストーラユーティリティの `pip` を使用することで、最も簡単に完了できます。

   ```
   pip install awscli --upgrade --user
   ```

   AWS CLI を使用したインストールに関する完全な手順は、「[nstalling the AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)」でご確認いただけます。

1. 次の AWS CLI wheel ファイルをダウンロードします。s3://awsglue-custom-blueprints-preview-artifacts/awscli-preview-build/awscli-1.19.31-py2.py3-none-any.whl

1. AWS CLI wheel ファイルをインストールする。

   ```
   python3 -m pip install awscli-1.19.31-py2.py3-none-any.whl
   ```

1. `aws configure` コマンドを実行します。AWS 認証情報 (アクセスキー、シークレットキーを含む) と AWS リージョンを設定します。AWS CLI の設定に関する情報は、「[Configuring the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)」でご確認ください。

1. AWS CLI をテストします。次のコマンドは、空のリストを返すように設定されています。

   `us-east-1` は、実際のリージョンに置き換えます。

   ```
   aws glue list-blueprints --region us-east-1
   ```

# 設計図コードを記述する
<a name="developing-blueprints-code"></a>

作成する各設計図プロジェクトには、少なくとも以下のファイルを含む必要があります。
+ ワークフローを定義する Python レイアウトスクリプト。このスクリプトには、ワークフロー内のエンティティ (ジョブとクローラ)、および、それらの間の依存関係を定義する関数が含まれています。
+ 以下を定義する設定ファイル `blueprint.cfg`。
  + ワークフローレイアウト定義関数を指す完全なパス。
  + 設計図が受け取るパラメータ。

**Topics**
+ [設計図レイアウトスクリプトを作成する](developing-blueprints-code-layout.md)
+ [設定ファイルを作成する](developing-blueprints-code-config.md)
+ [設計図パラメータを指定する](developing-blueprints-code-parameters.md)

# 設計図レイアウトスクリプトを作成する
<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)」を参照してください。

レイアウト関数は、以下の引数を受け取る必要があります。


| 引数 | 説明 | 
| --- | --- | 
| user\$1params | 設計図パラメータの名前と値に関する Python ディクショナリ。詳細については、[設計図パラメータを指定する](developing-blueprints-code-parameters.md) を参照してください。 | 
| system\$1params | 2 つのプロパティ (region および accountId) を含む Python ディクショナリ。 | 

次に、`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
```

このサンプルスクリプトは、必要な設計図ライブラリをインポートし、2 つのジョブを含むワークフローを生成する `generate_layout` 関数をインクルードします。これは非常にシンプルなスクリプトです。より複雑なスクリプトでは、追加のロジックとパラメータを使用して、多数のジョブとクローラを含むワークフローを生成できます。さらに、ジョブとクローラの数を可変にすることも可能です

## DependsOn 引数を使用する
<a name="developing-blueprints-code-layout-depends-on"></a>

引数 `DependsOn` は、このエンティティがワークフロー内の他のエンティティに対し維持する依存関係を、ディクショナリ向けに表現したものです。これには、以下の形式が使用されます。

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

このディクショナリーのキーはエンティティの名前ではなく、オブジェクトリファレンスを表し、値は監視すべき状態に対応する文字列です。AWS Glue 適切なトリガーを推測します。有効な状態については、「[Condition Structure](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 はスケジュールと対応付けながら、スケジュールトリガーを作成します。特に指定されていない場合は、ワークフローの開始トリガーはオンデマンドトリガーになります。

# 設定ファイルを作成する
<a name="developing-blueprints-code-config"></a>

設計図の設定ファイルは必須のファイルで、ワークフローを生成するためのスクリプトエントリポイントと、設計図が受け取るパラメータを定義します。ファイル名は、`blueprint.cfg` とする必要があります。

設定ファイルの例を次に示します。

```
{
    "layoutGenerator": "DemoBlueprintProject.Layout.generate_layout",
    "parameterSpec" : {
           "WorkflowName" : {
                "type": "String",
                "collection": false
           },
           "WorkerType" : {
                "type": "String",
                "collection": false,
                "allowedValues": ["G1.X", "G2.X"],
                "defaultValue": "G1.X"
           },
           "Dpu" : {
                "type" : "Integer",
                "allowedValues" : [2, 4, 6],
                "defaultValue" : 2
           },
           "DynamoDBTableName": {
                "type": "String",
                "collection" : false
           },
           "ScriptLocation" : {
                "type": "String",
                "collection": false
    	}
    }
}
```

`layoutGenerator` プロパティでは、レイアウトを生成するスクリプト内の関数について、完全な修飾名を指定します。

`parameterSpec` プロパティでは、この設計図が受け取るパラメータを指定します。詳細については、[設計図パラメータを指定する](developing-blueprints-code-parameters.md) を参照してください。

**重要**  
設定ファイルに設計図パラメータとしてワークフロー名を含めるか、あるいはレイアウトスクリプトにより一意のワークフロー名を生成する必要があります。

# 設計図パラメータを指定する
<a name="developing-blueprints-code-parameters"></a>

設定ファイルには、`parameterSpec` JSON オブジェクトの設計図パラメータの仕様が含まれます。`parameterSpec` には、1 つ以上のパラメータオブジェクトが含まれます。

```
"parameterSpec": {
    "<parameter_name>": {
      "type": "<parameter-type>",
      "collection": true|false, 
      "description": "<parameter-description>",
      "defaultValue": "<default value for the parameter if value not specified>"
      "allowedValues": "<list of allowed values>" 
    },
    "<parameter_name>": {    
       ...
    }
  }
```

以下は、各パラメータオブジェクトでのコーディング規則です。
+ パラメータ名と `type` は必須です。その他のプロパティはすべてオプションです。
+ `defaultValue` プロパティを指定する場合のパラメータはオプションです。それ以外の場合、パラメータは必須であり、この設計図からワークフローを作成するデータアナリストは、その値を提供する必要があります。
+ `collection` プロパティに `true` を設定した場合、このパラメータは値のコレクションを参照できます。コレクションは、任意のデータ型にすることができます。
+ `allowedValues` を指定すると、ブループリントからワークフローを作成する際にデータアナリストが選択する、値のドロップダウンリストが AWS Glue コンソールに表示されます。

`type` で使用可能な値を以下に示します。


| パラメータのデータ型 | 注意事項 | 
| --- | --- | 
| String | - | 
| Integer | - | 
| Double | - | 
| Boolean | 指定できる値は true および false です。AWS Glue コンソールの [Create a workflow from <blueprint>] (<blueprint> からのワークフローの作成) ページで、チェックボックスを生成します。 | 
| S3Uri | s3:// で開始する Amazon S3 パスを完成させます。[Create a workflow from <blueprint>] (<blueprint> からのワークフローの作成) ページで、テキストフィールドおよび [Browse] (参照) ボタンを生成します。 | 
| S3Bucket | Amazon S3 バケット名のみ。[Create a workflow from <blueprint>] (<blueprint> からのワークフローの作成) ページで、バケットピッカーを生成します。 | 
| IAMRoleArn | AWS Identity and Access Management (IAM ロール) の Amazon リソースネーム (ARN)。[Create a workflow from <blueprint>] (<blueprint> からのワークフローの作成) ページで、ロールピッカーを生成します。 | 
| IAMRoleName | IAM ロールの名前。[Create a workflow from <blueprint>] (<blueprint> からのワークフローの作成) ページで、ロールピッカーを生成します。 | 

# 設計図プロジェクト例
<a name="developing-blueprints-sample"></a>

データ形式の変換は、抽出、変換、ロード (ETL) で頻繁に行われるユースケースです。一般的な分析ワークロードでは、CSV や JSON などのテキスト形式よりも、Parquet や ORC などの列ベースのファイル形式の使用が好まれます。このサンプル設計図を使用すると、Amazon S3 上のファイルで、CSV/JSON/その他のデータを Parquet に変換できます。

この設計図では、設計図パラメータで定義された S3 パスのリストを取得し、そのデータを Parquet 形式に変換した上で、別の設計図パラメータで指定された S3 のロケーションに書き込んでいます。このレイアウトスクリプトは、パスごとにクローラとジョブを作成します。また、このレイアウトスクリプトでは、`Conversion.py` 内の ETL スクリプトを、別の設計図パラメータで指定された S3 バケットにアップロードしています。その後、このレイアウトスクリプトは、アップロードされたスクリプトを各ジョブの ETL スクリプトとして指定します。プロジェクト用の ZIP アーカイブには、レイアウトスクリプト、ETL スクリプト、および設計図の設定ファイルが含まれています。

その他の設計図プロジェクトの例については、「[設計図の例](developing-blueprints-samples.md)」を参照してください。

以下は、`Layout.py` ファイル内にあるレイアウトスクリプトです。

```
from awsglue.blueprint.workflow import *
from awsglue.blueprint.job import *
from awsglue.blueprint.crawler import *
import boto3

s3_client = boto3.client('s3')

# Ingesting all the S3 paths as Glue table in parquet format
def generate_layout(user_params, system_params):
    #Always give the full path for the file
    with open("ConversionBlueprint/Conversion.py", "rb") as f:
        s3_client.upload_fileobj(f, user_params['ScriptsBucket'], "Conversion.py")
    etlScriptLocation = "s3://{}/Conversion.py".format(user_params['ScriptsBucket'])    
    crawlers = []
    jobs = []
    workflowName = user_params['WorkflowName']
    for path in user_params['S3Paths']:
      tablePrefix = "source_" 
      crawler = Crawler(Name="{}_crawler".format(workflowName),
                        Role=user_params['PassRole'],
                        DatabaseName=user_params['TargetDatabase'],
                        TablePrefix=tablePrefix,
                        Targets= {"S3Targets": [{"Path": path}]})
      crawlers.append(crawler)
      transform_job = Job(Name="{}_transform_job".format(workflowName),
                         Command={"Name": "glueetl",
                                  "ScriptLocation": etlScriptLocation,
                                  "PythonVersion": "3"},
                         Role=user_params['PassRole'],
                         DefaultArguments={"--database_name": user_params['TargetDatabase'],
                                           "--table_prefix": tablePrefix,
                                           "--region_name": system_params['region'],
                                           "--output_path": user_params['TargetS3Location']},
                         DependsOn={crawler: "SUCCEEDED"},
                         WaitForDependencies="AND")
      jobs.append(transform_job)
    conversion_workflow = Workflow(Name=workflowName, Entities=Entities(Jobs=jobs, Crawlers=crawlers))
    return conversion_workflow
```

以下は、対応する設計図の設定ファイル `blueprint.cfg` です。

```
{
    "layoutGenerator": "ConversionBlueprint.Layout.generate_layout",
    "parameterSpec" : {
        "WorkflowName" : {
            "type": "String",
            "collection": false,
            "description": "Name for the workflow."
        },
        "S3Paths" : {
            "type": "S3Uri",
            "collection": true,
            "description": "List of Amazon S3 paths for data ingestion."
        },
        "PassRole" : {
            "type": "IAMRoleName",
            "collection": false,
            "description": "Choose an IAM role to be used in running the job/crawler"
        },
        "TargetDatabase": {
            "type": "String",
            "collection" : false,
            "description": "Choose a database in the Data Catalog."
        },
        "TargetS3Location": {
            "type": "S3Uri",
            "collection" : false,
            "description": "Choose an Amazon S3 output path: ex:s3://<target_path>/."
        },
        "ScriptsBucket": {
            "type": "S3Bucket",
            "collection": false,
            "description": "Provide an S3 bucket name(in the same AWS Region) to store the scripts."
        }
    }
}
```

以下に示す、ファイル `Conversion.py` 内のスクリプトは、アップロードされた ETL スクリプトです。ここでは、変換中にパーティション分割スキームが保持されることに注意してください。

```
import sys
from pyspark.sql.functions import *
from pyspark.context import SparkContext
from awsglue.transforms import *
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.utils import getResolvedOptions
import boto3

args = getResolvedOptions(sys.argv, [
    'JOB_NAME',
    'region_name',
    'database_name',
    'table_prefix',
    'output_path'])
databaseName = args['database_name']
tablePrefix = args['table_prefix']
outputPath = args['output_path']

glue = boto3.client('glue', region_name=args['region_name'])

glue_context = GlueContext(SparkContext.getOrCreate())
spark = glue_context.spark_session
job = Job(glue_context)
job.init(args['JOB_NAME'], args)

def get_tables(database_name, table_prefix):
    tables = []
    paginator = glue.get_paginator('get_tables')
    for page in paginator.paginate(DatabaseName=database_name, Expression=table_prefix+"*"):
        tables.extend(page['TableList'])
    return tables

for table in get_tables(databaseName, tablePrefix):
    tableName = table['Name']
    partitionList = table['PartitionKeys']
    partitionKeys = []
    for partition in partitionList:
        partitionKeys.append(partition['Name'])

    # Create DynamicFrame from Catalog
    dyf = glue_context.create_dynamic_frame.from_catalog(
        name_space=databaseName,
        table_name=tableName,
        additional_options={
            'useS3ListImplementation': True
        },
        transformation_ctx='dyf'
    )

    # Resolve choice type with make_struct
    dyf = ResolveChoice.apply(
        frame=dyf,
        choice='make_struct',
        transformation_ctx='resolvechoice_' + tableName
    )

    # Drop null fields
    dyf = DropNullFields.apply(
        frame=dyf,
        transformation_ctx="dropnullfields_" + tableName
    )

    # Write DynamicFrame to S3 in glueparquet
    sink = glue_context.getSink(
        connection_type="s3",
        path=outputPath,
        enableUpdateCatalog=True,
        partitionKeys=partitionKeys
    )
    sink.setFormat("glueparquet")

    sink.setCatalogInfo(
        catalogDatabase=databaseName,
        catalogTableName=tableName[len(tablePrefix):]
    )
    sink.writeFrame(dyf)

job.commit()
```

**注記**  
このサンプルの設計図に対し、入力として提供できる Amazon S3 パスは 2 つだけです。これは、AWS Glue トリガーが呼び出すことができるクローラアクションが、2 つだけに制限されているためです。

# 設計図をテストする
<a name="developing-blueprints-testing"></a>

コードの開発時には、ローカルなテストを実行して、ワークフローのレイアウトに誤りがないことを確認する必要があります。

ローカルテストでは AWS Glue ジョブ、クローラ、トリガーは生成されません。代わりに、レイアウトスクリプトをローカルで実行し、`to_json()` および `validate()` メソッドによりオブジェクトを画面表示し、エラーを発見します。これらのメソッドは、ライブラリで定義されている 3 つのクラスすべてで使用できます。

`user_params` がレイアウト関数に渡す、引数 `system_params` および AWS Glue を処理するには 2 つの方法があります。テストベンチコードでは、サンプル設計図パラメータ値のディクショナリを作成し、それを引数 `user_params` としてレイアウト関数に渡すことができます。または、`user_params` への参照を削除し、その部分をハードコーディングのための文字列に置き換えます。

コードの引数 `system_params` の中で、`region` および `accountId` プロパティを利用している場合には、`system_params` を独自の辞書に含めて渡すことができます。

**設計図をテストするには**

1. Python インタプリタをライブラリのあるディレクトリで起動するか、設計図ファイルならびに提供されたライブラリを、希望の統合開発環境 (IDE) にロードします。

1. コードによって提供されたライブラリがインポートされていることを確認します。

1. 任意のエンティティまたは `Workflow` オブジェクトで `validate()` または `to_json()` 呼び出すためのコードを、レイアウト関数に追加します。例えば、コードが `mycrawler` という名前の `Crawler` オブジェクトを作成する場合には、以下のように `validate()` を呼び出せます。

   ```
   mycrawler.validate()
   ```

   `mycrawler` は以下のように表示できます。

   ```
   print(mycrawler.to_json())
   ```

   オブジェクトで `to_json` を呼び出す場合、別途 `validate()` を呼び出す必要はありません。`validate()` は ` to_json()` により呼び出されます。

   これにより、ワークフローオブジェクトでのこれらのメソッドの呼び出しが、最も効率的に行えます。スクリプトで、ワークフローオブジェクトに `my_workflow` と名前を付けているのであれば、次のようにワークフローオブジェクトを検証して画面表示します。

   ```
   print(my_workflow.to_json())
   ```

   `to_json()` と `validate()` の詳細については、「[クラスメソッド](developing-blueprints-code-classes.md#developing-blueprints-code-methods)」を参照してください。

   また、このセクションの後半の例に示すように、`pprint` をインポートし、ワークフローオブジェクトを書式を設定しながら表示することも可能です。

1. コードを実行し、エラーを修正した上で、最後に `validate()` または `to_json()` の呼び出しを削除します。

**Example**  
次の例では、サンプルの設計図パラメータのディクショナリを構築し、それをレイアウト関数 `generate_compaction_workflow` の引数 `user_params` に渡す方法を示しています。また、生成されたワークフローオブジェクトを、書式を指定しながら印刷するための方法も示しています。  

```
from pprint import pprint
from awsglue.blueprint.workflow import *
from awsglue.blueprint.job import *
from awsglue.blueprint.crawler import *
 
USER_PARAMS = {"WorkflowName": "compaction_workflow",
               "ScriptLocation": "s3://amzn-s3-demo-bucket/scripts/threaded-compaction.py",
               "PassRole": "arn:aws:iam::111122223333:role/GlueRole-ETL",
               "DatabaseName": "cloudtrial",
               "TableName": "ct_cloudtrail",
               "CoalesceFactor": 4,
               "MaxThreadWorkers": 200}
 
 
def generate_compaction_workflow(user_params: dict, system_params: dict) -> Workflow:
    compaction_job = Job(Name=f"{user_params['WorkflowName']}_etl_job",
                         Command={"Name": "glueetl",
                                  "ScriptLocation": user_params['ScriptLocation'],
                                  "PythonVersion": "3"},
                         Role="arn:aws:iam::111122223333:role/AWSGlueServiceRoleDefault",
                         DefaultArguments={"DatabaseName": user_params['DatabaseName'],
                                           "TableName": user_params['TableName'],
                                           "CoalesceFactor": user_params['CoalesceFactor'],
                                           "max_thread_workers": user_params['MaxThreadWorkers']})
 
    catalog_target = {"CatalogTargets": [{"DatabaseName": user_params['DatabaseName'], "Tables": [user_params['TableName']]}]}
 
    compacted_files_crawler = Crawler(Name=f"{user_params['WorkflowName']}_post_crawl",
                                      Targets = catalog_target,
                                      Role=user_params['PassRole'],
                                      DependsOn={compaction_job: "SUCCEEDED"},
                                      WaitForDependencies="AND",
                                      SchemaChangePolicy={"DeleteBehavior": "LOG"})
 
    compaction_workflow = Workflow(Name=user_params['WorkflowName'],
                                   Entities=Entities(Jobs=[compaction_job],
                                                     Crawlers=[compacted_files_crawler]))
    return compaction_workflow
 
generated = generate_compaction_workflow(user_params=USER_PARAMS, system_params={})
gen_dict = generated.to_json()
 
pprint(gen_dict)
```

# 設計図を公開する
<a name="developing-blueprints-publishing"></a>

作成した設計図は、Amazon S3 にアップロードする必要があります。これには、設計図を公開するために使用する Amazon S3 バケットに対する、書き込みアクセス許可が必要です。また、ブループリントの登録を行う AWS Glue 管理者には、Amazon S3 バケットからの読み取りアクセスが許可されている必要があります。AWS Identity and Access Management 設計図でのペルソナおよびロールのために提案されている、AWS Glue (IAM) アクセス許可ポリシーについては、「[AWS Glue ブループリントでのペルソナおよびロール用のアクセス許可](blueprints-personas-permissions.md)」を参照してください。

**設計図を公開するには**

1. 必要なスクリプト、リソース、および設計図の設定ファイルを作成します。

1. すべてのファイルを ZIP アーカイブに追加し、その ZIP ファイルを Amazon S3 にアップロードします。設計図を登録し実行するリージョンと、同じリージョンにある S3 バケットを使用します。

   ZIP ファイルは、次のコマンドを使用して、コマンドラインから作成することができます。

   ```
   zip -r folder.zip folder
   ```

1. AWS での希望するアカウントに読み取りアクセス許可を付与する、バケットポリシーを追加します。次に、そのポリシー例を示します。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "AWS": "arn:aws:iam::111122223333:root"
         },
         "Action": "s3:GetObject",
         "Resource": "arn:aws:s3:::my-blueprints/*"
       }
     ]
   }
   ```

------

1. Amazon S3 バケットに対する IAM の `s3:GetObject` の許可を、AWS Glue 管理者またはブループリントを登録する任意のユーザーに付与します。管理者に付与するポリシーの例については、「[ブループリントのための AWS Glue 管理者のアクセス許可](blueprints-personas-permissions.md#bp-persona-admin)」を参照してください。

ブループリントに関するローカルでのテストが完了したら、AWS Glue 上でもブループリントをテストします。ブループリントを AWS Glue 上でテストするには、登録が完了している必要があります。登録された設計図を表示できるユーザーを制限するには、IAM 認可を使用するか、テスト用に分離されたアカウントを使用します。

**以下も参照してください。**  
[AWS Glue でブループリントを登録する](registering-blueprints.md)

# AWS Glue ブループリントクラスリファレンス
<a name="developing-blueprints-code-classes"></a>

AWS Glue ブループリント用のライブラリでは、ワークフローレイアウトスクリプトで使用する 3 つのクラス (`Job`、`Crawler`、および `Workflow`) を定義します。

**Topics**
+ [Job クラス](#developing-blueprints-code-jobclass)
+ [Crawler クラス](#developing-blueprints-code-crawlerclass)
+ [Workflow クラス](#developing-blueprints-code-workflowclass)
+ [クラスメソッド](#developing-blueprints-code-methods)

## Job クラス
<a name="developing-blueprints-code-jobclass"></a>

`Job` クラスは、AWS Glue での ETL ジョブを表します。

**必須のコンストラクター引数**  
`Job` クラスのコンストラクタに必須な引数を、以下に示します。


| 引数名 | 型 | 説明 | 
| --- | --- | --- | 
| Name | str | ジョブに割り当てる名前。AWS Glue では他のブループリントの実行で作成されたジョブとの区別するため、名前にはランダムに生成されるサフィックスを付けています。 | 
| Role | str | ジョブが実行中に引き受けるロールの Amazon リソースネーム (ARN)。 | 
| Command | dict | API ドキュメントの [JobCommand 構造](aws-glue-api-jobs-job.md#aws-glue-api-jobs-job-JobCommand) に掲載されている Job コマンド。 | 

**オプションのコンストラクター引数**  
`Job` クラスのコンストラクタで、オプションとなっている引数を以下に示します。


| 引数名 | 型 | 説明 | 
| --- | --- | --- | 
| DependsOn | dict | ジョブが依存するワークフローエンティティの一覧。詳細については、[DependsOn 引数を使用する](developing-blueprints-code-layout.md#developing-blueprints-code-layout-depends-on) を参照してください。 | 
| WaitForDependencies | str | 実行前のジョブが、依存するすべてのエンティティが完了するまで待機するのか、あるいは任意のエンティティが完了することを待つのかを示します。詳細については、[WaitForDependencies 引数を使用する](developing-blueprints-code-layout.md#developing-blueprints-code-layout-wait-for-dependencies) を参照してください。ジョブが 1 つのエンティティのみに依存する場合は、この設定は省略します。 | 
| (ジョブプロパティ) | - | [Job 構造](aws-glue-api-jobs-job.md#aws-glue-api-jobs-job-Job) API ドキュメント (AWS Glue と CreatedOn 以外)LastModifiedOn の一覧に掲載されている、いずれかのジョブのプロパティ。 | 

## Crawler クラス
<a name="developing-blueprints-code-crawlerclass"></a>

`Crawler` クラスは、AWS Glue でのクローラーを表します。

**必須のコンストラクター引数**  
`Crawler` クラスのコンストラクタに必須な引数を、以下に示します。


| 引数名 | 型 | 説明 | 
| --- | --- | --- | 
| Name | str | AWS Glue は、ランダムに生成されたサフィックスをクローラーの名前に付加することで、異なるブループリントの実行によって作成されたクローラを区別します。 | 
| Role | str | クローラが実行中に引き受ける必要のあるロールの ARN。 | 
| Targets | dict | クロールするターゲットのコレクション。Targets クラスコンストラクターの引数は、API ドキュメントの [CrawlerTargets 構造](aws-glue-api-crawler-crawling.md#aws-glue-api-crawler-crawling-CrawlerTargets) に定義されています。Targets コンストラクタの引数はすべてオプションです。ただし、少なくとも 1 つを渡す必要があります。 | 

**オプションのコンストラクター引数**  
`Crawler` クラスのコンストラクタで、オプションとなっている引数を以下に示します。


| 引数名 | 型 | 説明 | 
| --- | --- | --- | 
| DependsOn | dict | クローラが依存するワークフローエンティティのリスト。詳細については、[DependsOn 引数を使用する](developing-blueprints-code-layout.md#developing-blueprints-code-layout-depends-on) を参照してください。 | 
| WaitForDependencies | str | 実行前のクローラが、依存するすべてのエンティティが完了するまで待機するのか、任意のエンティティが完了することを待つのかを示します。詳細については、[WaitForDependencies 引数を使用する](developing-blueprints-code-layout.md#developing-blueprints-code-layout-wait-for-dependencies) を参照してください。クローラが 1 つのエンティティのみに依存する場合は、この設定は省略します。 | 
| (クローラのプロパティ) | - | [Crawler 構造](aws-glue-api-crawler-crawling.md#aws-glue-api-crawler-crawling-Crawler) API ドキュメントの AWS Glue の一覧に掲載されている、いずれかのクローラのプロパティ (以下のものを除く)。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/developing-blueprints-code-classes.html) | 

## Workflow クラス
<a name="developing-blueprints-code-workflowclass"></a>

`Workflow` クラスは、AWS Glue の ワークフローを表します。ワークフローレイアウトスクリプトは、`Workflow` オブジェクト。AWS Glue でこのオブジェクトに基づいてワークフローを作成します。

**必須のコンストラクター引数**  
`Workflow` クラスのコンストラクタに必須な引数を、以下に示します。


| 引数名 | 型 | 説明 | 
| --- | --- | --- | 
| Name | str | ワークフローに割り当てる名前。 | 
| Entities | Entities | ワークフローに含めるエンティティ (ジョブおよびクローラ) のコレクション。Entities クラスのコンストラクタは、引数 Jobs (Job オブジェクトのリスト)、および、Crawlers 引数 (Crawler オブジェクトのリスト) を受け取ります。 | 

**オプションのコンストラクター引数**  
`Workflow` クラスのコンストラクタで、オプションとなっている引数を以下に示します。


| 引数名 | 型 | 説明 | 
| --- | --- | --- | 
| Description | str | 「[Workflow 構造](aws-glue-api-workflow.md#aws-glue-api-workflow-Workflow)」を参照してください | 
| DefaultRunProperties | dict | 「[Workflow 構造](aws-glue-api-workflow.md#aws-glue-api-workflow-Workflow)」を参照してください | 
| OnSchedule | str | cron 式 | 

## クラスメソッド
<a name="developing-blueprints-code-methods"></a>

上記の 3 つのクラスには、以下のメソッドが含まれています。

**validate()**  
オブジェクトのプロパティを検証し、エラーが見つかった場合はメッセージを出力して終了します。エラーが発見されない場合は、出力を生成しません。`Workflow` クラスでは、ワークフロー内のすべてのエンティティで、自分自身を呼び出します。

**to\$1json()**  
オブジェクトを JSON としてシリアル化します。また、`validate()` を呼び出します。`Workflow` クラスでは、この JSON オブジェクトにはジョブとクローラのリストと、ジョブとクローラの依存関係の仕様によって生成されたトリガーのリストが含まれます。

# 設計図の例
<a name="developing-blueprints-samples"></a>

[AWS Glue ブループリント の Githubリポジトリ](https://github.com/awslabs/aws-glue-blueprint-libs/tree/master/samples)には、設計図プロジェクトの例が多数提供されています。これらのサンプルは参考用であり、本番での使用は意図されていません。

これらのサンプルプロジェクトのタイトルを以下に示します。
+ Compaction: この設計図では、必要なファイルサイズに基づいて、複数の入力ファイルをより大きなチャンクの中に圧縮するジョブを作成します。
+ Conversion: この設計図では、さまざまな標準ファイル形式の入力ファイルを、分析ワークロード向けに最適化された Apache Parquet 形式に変換します。
+ Crawling Amazon S3 locations:この設計図は、複数の Amazon S3 ロケーションをクロールして、Data Catalog にメタデータテーブルを追加します。
+ Custom connection to Data Catalog: この設計図では、AWS Glue のカスタムコネクタを使用しデータストアにアクセスします。レコードを読み取り、レコードスキーマに基づいて AWS Glue データカタログのテーブル定義を設定します。
+ Encoding: この設計図では、UTF 以外のファイルを UTF エンコードされたファイルに変換します。
+ Partitioning: この設計図では、パーティショニングジョブを作成します。特定のパーティションキーに基づいて出力ファイルをパーティションに配置します。
+ Importing Amazon S3 data into a DynamoDB table: この設計図では、Amazon S3 から DynamoDB テーブルにデータをインポートします。
+ Standard table to governed: この設計図では、Lake Formation テーブルに AWS Glue データカタログテーブルをインポートします。

# AWS Glue でブループリントを登録する
<a name="registering-blueprints"></a>

AWS Glue デベロッパーが設計図をコーディングして、Amazon Simple Storage Service (Amazon S3) に ZIP アーカイブをアップロードした後、AWS Glue 管理者はその設計図を登録する必要があります。設計図は、登録されることで使用が可能になります。

ブループリントを登録すると、AWS Glue はブループリントアーカイブを予約済みの Amazon S3 ロケーションにコピーします。その後、アーカイブは、アップロードした場所から削除できます。

設計図を登録するには、アップロードされたアーカイブが保存される Amazon S3 ロケーションに対する、読み取りアクセス許可が必要です。また、AWS Identity and Access Management (IAM) のアクセス許可 `glue:CreateBlueprint` も必要です。ブループリントの登録、表示、および保守を行う必要がある AWS Glue 管理者のために、提案されているアクセス許可については、[ブループリントのための AWS Glue 管理者のアクセス許可](blueprints-personas-permissions.md#bp-persona-admin) を参照してください。

ブループリントは AWS Glue コンソール、AWS Glue API、または AWS Command Line Interface (AWS CLI) を使用して登録できます。

**設計図を登録するには (コンソール)**

1. Amazon S3 にある設計図の ZIP アーカイブに対する、読み取りアクセス許可 (`s3:GetObject`) が付与されていることを確認します。

1. [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) で AWS Glue コンソール を開きます。

   設計図を登録するための、アクセス許可が付与されたユーザーとしてサインインします。設計図の ZIP アーカイブを含む Amazon S3 バケットと同じ、AWS リージョンに切り替えます。

1. ナビゲーションペインで **[Blueprints]** (ブループリント) を選択します。次に、[**Blueprints**] (設計図) ページで [**Add blueprint**] (設計図を追加) をクリックします。

1. 設計図の名前と、必要に応じて説明を入力します。

1. [**ZIP archive location (S3)**] (ZIP アーカイブの場所 (S3))に、アップロードされた設計図の ZIP アーカイブがある Amazon S3 パスを入力します。パスの先頭は `s3://` で開始し、またアーカイブのファイル名を含めます。

1. (オプション) 1 つ以上のタグを追加します。

1. [**Add blueprint**] (設計図を追加) をクリックします。

   [**Blueprints**] (設計図) ページが再び開き、設計図のステータスが「`CREATING`」となっていることを表示します。ステータスが「`ACTIVE`」または「`FAILED`」に変わるまで、[Refresh] (更新) ボタンをクリックします。

1. ステータスが「`FAILED`」となった場合は、設計図を選択した上で、[**Actions**] (アクション) メニューで [**View**] (表示) をクリックします。

   詳細ページに、失敗の理由が表示されます。エラーメッセージが、「Unable to access object at location...」または「Access denied on object at location...」となっている場合は、以下の要件を確認してください。
   + サインインしているユーザーには、Amazon S3 内にある設計図の ZIP アーカイブに対する読み取りアクセス許可が必要です。
   + ZIP アーカイブを含む Amazon S3 バケットには、オブジェクトに対する読み取りアクセス許可を AWS アカウント ID に付与するためのバケットポリシーが必要です。(詳細については、[AWS Glue のブループリントの開発](developing-blueprints.md) を参照してください)。
   + 使用している Amazon S3 バケットは、コンソールでサインインしているリージョンと同じリージョンにあることが必要です。

1. データアナリストに、設計図へのアクセス許可が付与されていることを確認します。

   データアナリストのために提案された IAM ポリシーは、「[設計図のためのデータアナリストの権限](blueprints-personas-permissions.md#bp-persona-analyst)」で確認できます。このポリシーでは、任意のリソースに `glue:GetBlueprint` を付与します。リソースレベルでポリシーをより細かく設定している場合には、その新しく作成したリソースに対するアクセス許可をデータアナリストに付与します。

**設計図を登録するには (AWS CLI)**

1. 次のコマンドを入力します。

   ```
   aws glue create-blueprint --name <blueprint-name> [--description <description>] --blueprint-location s3://<s3-path>/<archive-filename>
   ```

1. 設計図のステータスを確認するには、次のコマンドを入力します。ステータスが `ACTIVE` または `FAILED` に変化するまで、このコマンドを繰り返します。

   ```
   aws glue get-blueprint --name <blueprint-name>
   ```

   ステータスが `FAILED` となり、エラーメッセージに「Unable to access object at location...」または「Access denied on object at location...」が出力された場合は、以下の要件を確認してください。
   + サインインしているユーザーには、Amazon S3 内にある設計図の ZIP アーカイブに対する読み取りアクセス許可が必要です。
   + ZIP アーカイブを含む Amazon S3 バケットには、オブジェクトに対する読み取りアクセス許可を AWS アカウント ID に付与するためのバケットポリシーが必要です。詳細については、[設計図を公開する](developing-blueprints-publishing.md) を参照してください。
   + 使用している Amazon S3 バケットは、コンソールでサインインしているリージョンと同じリージョンにあることが必要です。

**以下も参照してください。**  
[AWS Glue のブループリント概要](blueprints-overview.md)

# AWS Glue でブループリントを表示する
<a name="viewing_blueprints"></a>

設計図を表示して、その説明とステータスおよびパラメータ仕様を確認し、設計図の ZIP アーカイブをダウンロードします。

ブループリントを表示するには、AWS Glue コンソール、AWS Glue API、または AWS Command Line Interface (AWS CLI) を使用します。

**設計図を表示するには (コンソール)**

1. [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) で AWS Glue コンソール を開きます。

1. ナビゲーションペインで **[Blueprints]** (ブループリント) を選択します。

1. [**Blueprints**] (設計図) ページで、設計図を選択します。次に、[**Actions**] (アクション) メニューで [**View**] (表示) をクリックします。

**設計図を表示するには (AWS CLI)**
+ 設計図の名前、説明、ステータスのみを表示するには、次のコマンドを入力します。*<blueprint-name>*は、表示する設計図の名前に置き換えます。

  ```
  aws glue get-blueprint --name <blueprint-name>
  ```

  次のような出力が表示されます。

  ```
  {
      "Blueprint": {
          "Name": "myDemoBP",
          "CreatedOn": 1587414516.92,
          "LastModifiedOn": 1587428838.671,
          "BlueprintLocation": "s3://amzn-s3-demo-bucket1/demo/DemoBlueprintProject.zip",
          "Status": "ACTIVE"
      }
  }
  ```

  以下のコマンドを入力することで、パラメータの仕様も表示できます。

  ```
  aws glue get-blueprint --name <blueprint-name>  --include-parameter-spec
  ```

  次のような出力が表示されます。

  ```
  {
      "Blueprint": {
          "Name": "myDemoBP",
          "CreatedOn": 1587414516.92,
          "LastModifiedOn": 1587428838.671,
          "ParameterSpec": "{\"WorkflowName\":{\"type\":\"String\",\"collection\":false,\"description\":null,\"defaultValue\":null,\"allowedValues\":null},\"PassRole\":{\"type\":\"String\",\"collection\":false,\"description\":null,\"defaultValue\":null,\"allowedValues\":null},\"DynamoDBTableName\":{\"type\":\"String\",\"collection\":false,\"description\":null,\"defaultValue\":null,\"allowedValues\":null},\"ScriptLocation\":{\"type\":\"String\",\"collection\":false,\"description\":null,\"defaultValue\":null,\"allowedValues\":null}}",
          "BlueprintLocation": "s3://awsexamplebucket1/demo/DemoBlueprintProject.zip",
          "Status": "ACTIVE"
      }
  }
  ```

  引数 `--include-blueprint` を使用して、出力に URL を含めることもできます。この URL をブラウザに貼り付けて、AWS Glue に保存されているブループリントの zip アーカイブをダウンロードできます。

**以下も参照してください。**  
[AWS Glue のブループリント概要](blueprints-overview.md)

# AWS Glue でブループリントを更新する
<a name="updating_blueprints"></a>

レイアウトスクリプトの改訂、設計図のパラメータセットの改訂、またはサポートファイルの改訂が行われた場合は、設計図を更新できます。更新により、新しいバージョンの設計図が作成されます。

設計図を更新した場合でも、その設計図から作成された既存のワークフローに影響は与えません。

設計図の更新には、AWS Glue コンソール、AWS Glue API、または AWS Command Line Interface (AWS CLI) を使用します。

以下に示す手順では、AWS Glue デベロッパーが、設計図の ZIP アーカイブを Amazon S3 で作成およびアップロードし、その更新を行うと想定しています。

**設計図を更新するには (コンソール)**

1. Amazon S3 にある設計図の ZIP アーカイブに対する、読み取りアクセス許可 (`s3:GetObject`) が付与されていることを確認します。

1. [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) で AWS Glue コンソール を開きます。

   設計図を更新するためのアクセス許可が付与されたユーザーとしてサインインします。設計図の ZIP アーカイブを含む Amazon S3 バケットと同じ、AWS リージョンに切り替えます。

1. ナビゲーションペインで **[Blueprints]** (ブループリント) を選択します。

1. [**Blueprints**] (設計図) ページで設計図を選択し、[**Actions**] (アクション) メニューで、[**Edit**] (編集) をクリックします。

1. [**Edit a blueprint**] (設計図の編集) ページで、設計図の [**Description**] (説明)、もしくは [**ZIP archive location (S3)**] (ZIP アーカイブの場所 (S3)) を更新します。パスにはアーカイブのファイル名を含める必要があります。

1. **[保存]** を選択します。

   [**Blueprints**] (設計図) ページが再び開き、設計図のステータスが「`UPDATING`」となっていることを表示します。ステータスが「`ACTIVE`」または「`FAILED`」に変わるまで、[Refresh] (更新) ボタンをクリックします。

1. ステータスが「`FAILED`」となった場合は、設計図を選択した上で、[**Actions**] (アクション) メニューで [**View**] (表示) をクリックします。

   詳細ページに、失敗の理由が表示されます。エラーメッセージが、「Unable to access object at location...」または「Access denied on object at location...」となっている場合は、以下の要件を確認してください。
   + サインインしているユーザーには、Amazon S3 内にある設計図の ZIP アーカイブに対する読み取りアクセス許可が必要です。
   + ZIP アーカイブを含む Amazon S3 バケットには、オブジェクトに対する読み取りアクセス許可を AWS アカウント ID に付与するためのバケットポリシーが必要です。詳細については、[設計図を公開する](developing-blueprints-publishing.md) を参照してください。
   + 使用している Amazon S3 バケットは、コンソールでサインインしているリージョンと同じリージョンにあることが必要です。
**注記**  
更新が失敗した場合、次回の設計図実行では、正常に登録または更新された設計図の最新バージョンが使用されます。

**設計図を更新するには (AWS CLI)**

1. 次のコマンドを入力します。

   ```
   aws glue update-blueprint --name <blueprint-name> [--description <description>] --blueprint-location s3://<s3-path>/<archive-filename>
   ```

1. 設計図のステータスを確認するには、次のコマンドを入力します。ステータスが `ACTIVE` または `FAILED` に変化するまで、このコマンドを繰り返します。

   ```
   aws glue get-blueprint --name <blueprint-name>
   ```

   ステータスが `FAILED` となり、エラーメッセージに「Unable to access object at location...」または「Access denied on object at location...」が出力された場合は、以下の要件を確認してください。
   + サインインしているユーザーには、Amazon S3 内にある設計図の ZIP アーカイブに対する読み取りアクセス許可が必要です。
   + ZIP アーカイブを含む Amazon S3 バケットには、オブジェクトに対する読み取りアクセス許可を AWS アカウント ID に付与するためのバケットポリシーが必要です。詳細については、[設計図を公開する](developing-blueprints-publishing.md) を参照してください。
   + 使用している Amazon S3 バケットは、コンソールでサインインしているリージョンと同じリージョンにあることが必要です。

**関連情報**  
[AWS Glue のブループリント概要](blueprints-overview.md)

# AWS Glue で設計図からワークフローを作成する
<a name="creating_workflow_blueprint"></a>

AWS Glue ワークフローはコンポーネントを 1 つずつ手動で作成したり、AWS Glue[ ブループリント](blueprints-overview.md)からワークフローを作成することもできます。AWS Glue には一般的なユースケースのブループリントが含まれます。AWS Glue デベロッパーが、追加の設計図を作成することも可能です。

**重要**  
ワークフロー内のジョブ、クローラ、トリガーの総数を 100 以下に制限します。100 を超える値を含めると、ワークフローの実行を再開または停止しようとしたときにエラーが発生することがあります。

設計図を使用すると、設計図で定義されている一般化されたユースケースをベースにしながら、特定のユースケース向けのワークフローをすばやく生成できます。設計図パラメータの値を指定することで、特定のユースケースを定義します。例えば、データセットをパーティション化する設計図では、パラメータとして Amazon S3 のソースとターゲットのパスを使用します。

AWS Glue は、ブループリントを*実行*することで、そのブループリントからワークフローを作成します。設計図の実行では、指定したパラメータ値が保存されます。このパラメータは、ワークフローとそのコンポーネントの作成に関する進行状況と結果を追跡するためにも使用されます。ワークフローをトラブルシューティングする場合は、設計図の実行を表示して、ワークフローの作成に使用された設計図のパラメータ値を確認します。

ワークフローを作成および表示するには、特定の IAM アクセス許可が必要です。提案されている IAM ポリシーについては、「[設計図のためのデータアナリストの権限](blueprints-personas-permissions.md#bp-persona-analyst)」を参照してください。

ブループリントからワークフローを作成するには、AWS Glue コンソール、AWS Glue API、または AWS Command Line Interface (AWS CLI) を使用します。

**設計図からワークフローを作成するには (コンソール)**

1. [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) で AWS Glue コンソール を開きます。

   ワークフローを作成するための、アクセス許可が付与されたユーザーとしてサインインします。

1. ナビゲーションペインで **[Blueprints]** (ブループリント) を選択します。

1. 設計図を選択し、[**Actions**] (アクション) メニューで、[**Create workflow**] (ワークフローの作成) をクリックします。

1. [**Create a workflow from <blueprint-name>**] (<blueprint-name> からのワークフローの作成) ページで、以下の情報を入力します。  
**設計図パラメータ**  
これらのパラーメータは、設計図の構成によって異なります。パラメータについては、デベロッパーにお問い合わせください。設計図には、通常、ワークフロー名がパラメータとして含まれています。  
**IAM ロール**  
ワークフローとそのコンポーネントを作成するために、AWS Glue が引き受けるロールです。ロールには、ワークフロー、ジョブ、クローラ、トリガーを作成および削除するための、アクセス許可が付与されている必要があります。提案されているロールのポリシーについては、「[設計図のロール用のアクセス許可](blueprints-personas-permissions.md#blueprints-role-permissions)」を参照してください。

1. [**Submit**] を選択してください。

   [**Blueprint Details**] (設計図の詳細) ページが表示され、その下部に設計図の実行が一覧表示されます。

1. 設計図の実行の一覧で、最上位にある設計図の実行から、ワークフローの作成ステータスを確認します。

   初期ステータスは`RUNNING` です。ステータスが `SUCCEEDED` または `FAILED` に遷移するまで、[Refresh] (更新) ボタンをクリックします。

1. 次のいずれかを行います。
   + 完了ステータスが `SUCCEEDED` であれば、[**Workflows**] (ワークフロー) ページを開き、新しく作成したワークフローを選択して実行できます。ワークフローを実行する前に、設計グラフを確認することができます。
   + 完了ステータスが `FAILED` の場合には、設計図実行を選択した上で [**Actions**] (アクション) メニューで [**View**] (表示) をクリックし、エラーメッセージを表示します。

Express ワークフローと サービス統合の詳細については、以下を参照してください。
+ [AWS Glue のワークフローの概要](workflows_overview.md)
+ [AWS Glue でブループリントを更新する](updating_blueprints.md)
+ [AWS Glue でワークフローを手動により作成および構築する](creating_running_workflows.md)

# AWS Glue でブループリントの実行を表示する
<a name="viewing_blueprint_runs"></a>

設計図の実行を表示して、次の情報を表示します。
+ 作成されたワークフローの名前。
+ ワークフローの作成に使用された設計図のパラメータ値。
+ ワークフロー作成オペレーションのステータス。

ブループリントを表示するには、AWS Glue コンソール、AWS Glue API、または AWS Command Line Interface (AWS CLI) を使用します。

**設計図の実行を表示するには (コンソール)**

1. [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) で AWS Glue コンソール を開きます。

1. ナビゲーションペインで **[Blueprints]** (ブループリント) を選択します。

1. [**Blueprints**] (設計図) ページで、設計図を選択します。次に、[**Actions**] (アクション) メニューで [**View**] (表示) をクリックします。

1. [**Blueprint Details**] (設計図の詳細) ページの最下部で、設計図の実行を選択し、[**Actions**] (アクション) メニューから [**View**] 表示を選択します。

**設計図の実行を表示するには (AWS CLI)**
+ 次のコマンドを入力します。*<blueprint-name>* を設計図の名前に置き換えます。*<blueprint-run-id>* を設計図の実行の ID に置き換えます。

  ```
  aws glue get-blueprint-run --blueprint-name <blueprint-name> --run-id <blueprint-run-id>
  ```

**以下も参照してください。**  
[AWS Glue のブループリント概要](blueprints-overview.md)