背景
OpenShot Cloud APIを使いたかったのですが、C++の組み込みライブラリを商用ライセンスで購入するか、MarketPlaceのEC2インスタンスで稼働させるかの2択でした。
しかしサーバレスに慣れてEC2の運用がだるかったことと、スパイクするタイプのサービスで利用するという背景から、AWS Batchでオンデマンドで動かせれば最高じゃ?という発想でトライしました。
手順
OpenShot設定
MarketPlaceで購入したAMIを立ち上げ、まずは迷うことなく、チュートリアルに従って設定します。
S3設定を有効にし、Server&Workerの構成で進みます。
ecs-agent導入
ここで利用しているAMIはUbuntuのため、Amazon Linux ではない EC2 インスタンスに Amazon ECS コンテナエージェントをインストールするに従ってecs-agentを頑張ってインストールする必要があります。
ステップ7までは何も迷わず言われた通りに作業します。
ただ、このマニュアルはECSのマニュアルであってAWS Batchのマニュアルでは無いため、ステップ8以降にそのまま進んでも正常に動作しません。
残るステップ10-aでecs-agentの取得までを行なった後は、以下の作業を行う必要があります。
ポイントは/etc/ecs/ecs.config
のECS_CLUSTERです。
ECS_CLUSTERの罠
このオプションは何も指定しないとdefaultというECSのクラスターが指定され、ECS側にそのクラスターが作成されてしまいます。
そのためAWS Batchで利用するECSクラスター名を設定する必要があります。
しかしAWS Batchでマネージドのコンピューティング環境を利用した場合、AMIを指定した後にコンピューティング環境に対応したクラスターが作成されるため、AMIの中にクラスター名を指定することができません。
解決策
起動時に ecs.config ファイルを Amazon S3 からロードするには
上記に従い、ecs.configをS3上に置いておき、コンピューティング環境作成後にS3後のecs.config#ECS_CLUSTERを設定することで正常に動作させることができます。
こちらを参考にして、起動スクリプトにconfigのダウンロードとecs-agentのdocker run
を記載します。
sudo aws s3 cp s3://your-bucket/ecs.config /etc/ecs/ecs.config
sudo docker run --name ecs-agent \
--detach=true \
--restart=always \
--volume=/var/run:/var/run \
--volume=/var/log/ecs/:/log \
--volume=/var/lib/ecs/data:/data \
--volume=/etc/ecs:/etc/ecs \
--net=host \
--env-file=/etc/ecs/ecs.config \
amazon/amazon-ecs-agent:latest
ecs.configにパブリックアクセス権を渡すのも忘れずに!
終わりに
おっ、意外と簡単じゃん、と思ってからが長く、なんだかんだ丸1日費やしました。
AWS BatchとECSの両方の知識が要るのでハードル高かったです。
Batchのアンマネージド環境まで手を出す気にはなれませんでした、、、
他にお困りの方の役に立てば!