はじめに
最近、AWS BatchでMulti Containerの機能が追加されたことを知りました。
以前、AWS BatchでAWS X-Rayによりトレースするためにいくつか試行錯誤したことがあったため、こちらのMulti Containerを利用してX-Rayデーモンも同時に起動ができるのかを試してみました。
あくまで試行錯誤した結果なので、実際に試す場合は自己責任でお願いします。
AWS Batchの作成
以前に作ったものと同様に簡単なAWS BatchのJobを作成しました。以下の文献などを参考にDocker imageをECRにPushしてFargate環境で動かすようにします。また、AWS LambdaからAWS BatchのJobを起動するようにしました。
作成したDockerfileとPythonスクリプトは以下のとおりです。
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"]
from aws_xray_sdk.core import xray_recorder
xray_recorder.begin_segment("Test Multi Container")
print ("Hello, World!")
xray_recorder.end_segment()
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のノードだけでした)。
Multi Containerの機能を使ってサイドカーにX-Ray Daemonを指定する。
コンソール上から作成してみます。新しく(?)以下の画像のような表示が出ていました。今回はマルチコンテナジョブを使いたいのでこちらのチェックを外します。
コンテナの追加ができるようになっていたため、新しいコンテナを追加します。
X-Ray DaemonはAWSのドキュメントから以下のURIを使いました。
public.ecr.aws/xray/aws-xray-daemon:3.x
コンソールから確認するとJob定義上で2つのコンテナが設定できていることが確認できました。
このJobを実行するとAWS X-Rayのコンソールからノードが確認できました。Batch上のアプリケーションからサイドカーのX-Ray Daemonを通してX-Rayにデータを送信できているのかなと思います。
終わりに
色々新機能が増えており、前にできなかったことがやりやすくなっていて嬉しいですね。色々試行錯誤して遊んでいるだけなのでもう少しちゃんと触ってみようと思います。