

# 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)」にある構文を参照してください。