AWS BatchのMulti Containerを試してみた

# はじめに
最近、AWS BatchでMulti Containerの機能が追加されたことを知りました。

https://aws.amazon.com/jp/about-aws/whats-new/2024/02/aws-batch-multi-container-jobs/

https://aws.amazon.com/jp/blogs/news/run-large-scale-simulations-with-aws-batch-multi-container-jobs/


以前、AWS BatchでAWS X-Rayによりトレースするためにいくつか試行錯誤したことがあったため、こちらのMulti Containerを利用してX-Rayデーモンも同時に起動ができるのかを試してみました。

https://qiita.com/dsy/items/be81fcc9c788f1edafa1

:::note warn
あくまで試行錯誤した結果なので、実際に試す場合は自己責任でお願いします。
:::


## AWS Batchの作成

以前に作ったものと同様に簡単なAWS BatchのJobを作成しました。以下の文献などを参考にDocker imageをECRにPushしてFargate環境で動かすようにします。また、AWS LambdaからAWS BatchのJobを起動するようにしました。

https://docs.aws.amazon.com/ja_jp/batch/latest/userguide/getting-started-fargate.html


作成したDockerfileとPythonスクリプトは以下のとおりです。
```Dockerifle:Dockerfile
FROM amazonlinux:2

RUN yum install -y python3 python3-pip
RUN python3 -m pip install aws_xray_sdk

COPY test.py test.py
CMD ["python3", "test.py"]
```

```python:test.py
from aws_xray_sdk.core import xray_recorder

xray_recorder.begin_segment("Test　Multi　Container")
print ("Hello, World!")
xray_recorder.end_segment()
```

```python:AWS Lambda
import json
import boto3

def lambda_handler(event, context):
    
    client = boto3.client('batch')

    JOB_NAME = 'test'
    JOB_QUEUE = "arn:aws:batch:ap-northeast-1:<account id>:job-queue/<queue name>"
    JOB_DEFINITION = "arn:aws:batch:ap-northeast-1:<acount id>:job-definition/<job-definition-name>"

    response = client.submit_job(
        jobName = JOB_NAME,
        jobQueue = JOB_QUEUE,
        jobDefinition = JOB_DEFINITION,
    )
    
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

```

このコンテナ単体のJobを起動してもAWS X-Rayのコンソールで、TestMultiContainerと名のついたノードがないことを改めて確認しました（AWS Lambdaのノードだけでした）。

![スクリーンショット 2023-05-28 19.18.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118168/7bcf8455-9113-646f-2f35-fbb335ea56db.png)


## Multi Containerの機能を使ってサイドカーにX-Ray Daemonを指定する。

コンソール上から作成してみます。新しく（？）以下の画像のような表示が出ていました。今回はマルチコンテナジョブを使いたいのでこちらのチェックを外します。


![スクリーンショット 2024-08-16 14.14.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118168/90c33a1b-a58a-20e9-86c6-cb7808126a45.png)

続けていくとコンテナの設定があります。
![スクリーンショット 2024-08-22 10.34.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118168/52f62e99-b94d-ddbf-8b90-fa3f66dace4b.png)

コンテナの追加ができるようになっていたため、新しいコンテナを追加します。

![スクリーンショット 2024-08-22 10.34.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118168/777ba42b-d1c0-bea1-e841-39bef23d199d.png)

2つ目のコンテナに、X-Ray Daemonを設定します。
![スクリーンショット 2024-08-22 10.35.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118168/d2e7d019-b9ec-80c1-6ff4-362c638b47d3.png)

X-Ray DaemonはAWSのドキュメントから以下のURIを使いました。

```
public.ecr.aws/xray/aws-xray-daemon:3.x
```

https://docs.aws.amazon.com/ja_jp/xray/latest/devguide/xray-daemon.html#xray-daemon-downloading

コンソールから確認するとJob定義上で2つのコンテナが設定できていることが確認できました。

![スクリーンショット 2024-08-22 10.33.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118168/9f80b972-71be-531c-43aa-a39a2d9e32cb.png)

このJobを実行するとAWS X-Rayのコンソールからノードが確認できました。Batch上のアプリケーションからサイドカーのX-Ray Daemonを通してX-Rayにデータを送信できているのかなと思います。

![スクリーンショット 2024-08-26 9.47.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118168/3759208c-bd13-8675-3bdd-dcdba6b0c148.png)

![スクリーンショット 2024-08-26 9.48.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118168/43a690c1-174d-4697-385b-f84cb7972bda.png)

## 終わりに

色々新機能が増えており、前にできなかったことがやりやすくなっていて嬉しいですね。色々試行錯誤して遊んでいるだけなのでもう少しちゃんと触ってみようと思います。