AWS Batch で登場する IAM ロールの種類を絵に描いて整理してみた
AWS Batch に登場する IAM ロールの種類が多くて理解に苦しむ、そんな経験はありませんか。AWS Batch の中でもよく利用されるマネージド EC2 タイプと Fargate タイプの利用時に必要な IAM ロールについて整理しました。
AWS Batch を構成する要素
AWS Batch の肝となる計算リソースの部分は Amazon ECS か AWS Fargate ではあるのですが、それらに関連付く AWS Batch 独自のリソースもあります。 IAM ロールが数多く登場するマネージドタイプの EC2 を利用を前提とし説明していきます。
主要なコンポーネントを取り上げると以下の図になります。
アプリケーションの実行はコンテナで行われます。ここではユーザー、またはシステムがジョブをサブミットしてからコンテナで処理が走るまでに登場するリソースが多いことをご理解いただければ結構です。
前提知識として AWS Batch の主要コンポーネントである、ジョブキュー、ジョブ定義、コンピューティング環境は以下の記事を参考にしていただくとこの先の内容がわかりやすくなります。
AWS Batch で登場する IAM ロールの種類
コンピューティング環境はよく利用されるマネージドタイプの EC2 と Fargate タイプの 2 つのタイプを対象に絞り、AWS Batch の環境構築時に出くわす 5 種類の IAM ロールを紹介します。
- サービスにリンクされたロール(必須)
- インスタンスロール(必須)
- スポットフリートロール(配分戦略が
BEST_FIT
時のみ必要) - 実行ロール(必須)
- ジョブロール(任意)
数が多いので 1 つずつ見ていきましょう。
サービスにリンクされたロール
必須の IAM ロールです。
AWS Batch サービス自体が他の AWS サービスへアクセスするための権限です。
- マネージドタイプの EC2、Fargate 共に必須の IAM ロール
- コンピューティング環境のリソース作成時に指定する IAM ロール
- 自動作成されており、ユーザーが手動で作成する必要はない
- 規定の IAM ロール名は
AWSServiceRoleForBatch
- 日本語のマネージメントコンソール上はサービスロールと表記されているので注意
英語だと Service-linked Role と表記され、日本語ドキュメントではサービスにリンクされたロールと訳されています。ですが、AWS Batch のマネージメントコンソール 上だとサービスロールと表記されています。ドキュメント内の単語と一致せずに紛らわしいですね。
このロールは、ユーザに代わり他のサービスのリソースにアクセスする権限をサービス(今回は AWS Batch)に与え、一部のサービスだけに用意されている少し特別なロールです。
A service-linked role is a special type of service role that gives the service permission to access resources in other services on your behalf. AWS services that work with IAM - AWS Identity and Access Management
公式ドキュメントリンク
インスタンスロール
マネージドタイプの EC2 では必須の IAM ロールです。
コンテナの実行基盤(ホスト)となる EC2 インスタンスが他の AWS サービスへアクセスするための権限です。
- マネージドタイプの EC2 で必須の IAM ロール
- コンピューティング環境のリソース作成時に指定する IAM ロール
- 規定の IAM ロール名は
ecsInstanceRole
- マネージメントコンソールのウィザードで AWS Batch 環境を作成すると規定の IAM ロールを自動作成可能
- 規定の IAM ロールがなければ手動で IAM ロールを作成が必要
コンテナの実行基盤の EC2 インスタンスで使用されている IAM ロールです。オンデマンド起動、スポット起動ともに同じ IAM ロールがアタッチされます。
公式ドキュメントリンク
スポットフリートロール
マネージドタイプの EC2 でスポットインスタンス利用してかつ、配分戦略でBEST_FIT
を選択したときに必須の IAM ロールです。BEST_FIT
をあえて選ばない限り IAM ロールの作成、指定する必要はありません。
BEST_FIT
は、最も低コストのインスタンスタイプを優先して、ジョブのニーズに最も適したインスタンスタイプを選択してくれる配分戦略です。
- コンピューティング環境のリソース作成時に指定する IAM ロール
- 規定の IAM ロール名は
AmazonEC2SpotFleetTaggingRole
- 規定の IAM ロールがなければ手動で IAM ロールを作成が必要
現在のスポットインスタンス利用時の配分戦略の推奨設定はSPOT_PRICE_CAPACITY_OPTIMIZED
です。スポット価格と、中断率の両方を考慮してインスタンスタイプを自動選択してくれるため、多くのスポット利用のユースケースにおいて使いやすい配分戦略です。なので、BEST_FIT
をあえて選択するときは IAM ロールの作成、指定をお忘れなく。
公式ドキュメントリンク
実行ロール
必須の IAM ロールです。
ECS エージェント、Fargate エージェントがユーザーに代わって AWS API コールする権限です。
- マネージドタイプの EC2、Fargate 共に必須の IAM ロール
- ジョブ定義のリソース作成時に指定する IAM ロール
- 規定の IAM ロール名は
ecsTaskExecutionRole
- 規定の IAM ロールがなければ手動で IAM ロールを作成が必要
Fargate 経験者であればタスク実行ロールという呼び方がしっくりくるのではないでしょうか。それの AWS Batch 版です。
公式ドキュメントリンク
ジョブロール
コンテナから他 AWS リソースへアクセスが必要なときに任意で作成、指定する IAM ロールです。
ジョブ実行時のコンテナが他 AWS サービスへアクセスするための権限です。必要な権限を付与した IAM ロールを作成して、コンテナに権限を持たせて利用します。 例えばアプリケーションコンテナが S3 バケットからデータを取得したいときは、コンテナ自体に S3 のアクセス権限が必要になります。
- 任意で設定する IAM ロール
- ジョブ定義のリソース作成時に指定する IAM ロール
- 任意で設定するため規定の IAM ロールはありません
Fargate 経験者であればタスクロールという呼び方がしっくりくるのではないでしょうか。これもまたそれの AWS Batch 版です。
まとめ
○は必須、△は任意または、特定の条件時に必要なことを示します。
マネージド EC2 タイプ | Fargate タイプ | 備考 | |
---|---|---|---|
サービスにリンクされたロール | ○ | ○ | |
インスタンスロール | ○ | ✗ | |
スポットフリートロール | △ | ✗ | 配分戦略がBEST_FIT選択時に必要 |
実行ロール | ○ | ○ | |
ジョブロール | △ | △ | 任意 |
コンピューティング環境が Fargate タイプの場合は登場する IAM ロールは少ないです。ですが、解析処理などマシンパワーが必要なワークロードですとマネージド EC2 タイプを採用する場面も多々あるかと思います。となると急に登場する IAM ロールが増えますので、先にどこで使われる IAM ロールなのかを意識しておくと躓きにくいのではないでしょうか。
おわりに
必須の IAM ロールと、その役割についてドキュメントを読んで理解するのが辛かったので絵に書いておきました。どなたかの参考になれば幸いです。