AWS Batchで起動テンプレートを利用してEFSをマウントする

# 起動テンプレート作成

これをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/d4a785c6-79e2-af2b-6c79-e4304c656df0.png)

何もせずただ下にスクロール。以下の<strong>高度な詳細</strong>をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/a272fa89-894d-c57f-95b8-1416fcda04a3.png)



起動テンプレートのサポート公式ドキュメントページを見てコピペ！
https://docs.aws.amazon.com/ja_jp/batch/latest/userguide/launch-templates.html
ただし `file_system_id_01=fs-abcdef123` には自分のEFSのidを入れる。

```
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==
Content-Type: text/cloud-config; charset="us-ascii"

packages:
- amazon-efs-utils

runcmd:
- file_system_id_01=fs-abcdef123
- efs_directory=/mnt/efs

- mkdir -p ${efs_directory}
- echo "${file_system_id_01}:/ ${efs_directory} efs tls,_netdev" >> /etc/fstab
- mount -a -t efs defaults

--==MYBOUNDARY==--
```

私はいつも以下でやっている。

```
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==
Content-Type: text/cloud-config; charset="us-ascii"

runcmd:
- file_system_id_01=fs-abcdef123
- efs_directory=/mnt/efs

- mkdir -p ${efs_directory}
- sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport ${file_system_id_01}.efs.ap-northeast-1.amazonaws.com:/ ${efs_directory}

--==MYBOUNDARY==--
```


# コンピューティング環境作成

作成を押す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/10b0e2d1-5e6a-e29a-d2dc-85eaf9a4d413.png)


ここではマネージド型を選ぶ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/5546ca60-b398-4e85-c9c7-357f7a6f0eb5.png)


オンデマンドを選ぶ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/46134a18-4007-1042-25f0-2360620c0d61.png)


するとインスタンスロール、EC2キーペアが選べる。（ロールはなければ自動で作成される）
後でインスタンスに接続してマウントできているか確認するため、キーペア必須！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/e74f8b44-0f6b-e0c7-e94c-802c43bff534.png)


vCPUを設定する。
この設定について、現時点での自分の認識を書く。<strong>間違っている可能性大！公式ドキュメントページ参照のこと！</strong>

初めに公式ドキュメント
https://aws.amazon.com/jp/ec2/instance-types/
以下のように書いてある。

>[最小 vCPU] で、ジョブキューの需要にかかわらず、コンピューティング環境で維持する EC2 vCPU の最小数を選択します。
[最大 vCPU] で、ジョブキューの需要にかかわらず、コンピューティング環境でスケールアウトできる EC2 vCPU の最大数を選択します。
[必要な vCPU] で、コンピューティング環境の起動に必要な EC2 vCPU の数を選択します。ジョブキューの需要が増えると、AWS Batch はコンピューティング環境で必要な vCPU の数を増やし、vCPU の最大数まで EC2 インスタンスを追加できます。需要が減ると、AWS Batch はコンピューティング環境で必要な vCPU の数を減らし、vCPU の最小数までインスタンスを削減できます。


うーん。正直あまりわからない。
次に私なりの解釈。c4.largeを例に挙げて説明する。

|  インスタンス |  vCPU*  |　メモリ(GiB) | ストレージ | 
| ---- | ---- | ---- | ---- | ---- | ---- |
|  c4.large  |  2  | 3.75 | EBS のみ |

最小vCPU：この値を超えない最大個数のインスタンスが起動する。ただし0より大きい値の場合、許可されたインスタンスタイプのvCPUによらず、最低でも1個はインスタンスが起動する。
例）8にした場合：4個インスタンスが起動する（2 $\times$ 4 = 8）
最大vCPU：この値を超えない範囲のもと、jobによってインスタンスが起動する
例）20にした場合：最高で10個インスタンスが起動する(2 $\times$ 10 = 20)
必要なvCPU：わからない（Batchが最小vCPU～最大vCPUの範囲で自動で変動させる）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/eb53b06a-4820-f5ec-3050-982abfd188c8.png)

<strong>追加設定：テンプレート、ユーザー指定のAMIを起動</strong>をクリックすると起動テンプレートが選べる。
しかし！さっき作ったテンプレートがまだ表示されない！なぜ！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/47cfd8d3-dd17-1cc9-c0e5-d46b5b2207c2.png)

自分なりの解決策としては、このページのまま、再読み込みボタン（chromeなら左上にあるやつ）を押す。


# マウント確認

vCPUを1に設定すれば、jobを送信しなくても一個インスタンスが立つのでジョブやキューを作らなくても確認できる。

# 注意

コンピューティング環境を無効化していても最小vCPUが0でない限り、消しても消しても新しいインスタンスが起動する。
コンピューティング環境は無効化した状態であれば、<strong>最小vCPUを編集</strong>することができる。

# 参考記事
コンピューティング環境の作成
https://docs.aws.amazon.com/ja_jp/batch/latest/userguide/create-compute-environment.html
Amazon EC2 インスタンスタイプ
https://aws.amazon.com/jp/ec2/instance-types/
起動テンプレートのサポート
https://docs.aws.amazon.com/ja_jp/batch/latest/userguide/launch-templates.html