LoginSignup
3
2

More than 5 years have passed since last update.

AmazonLinux以外のAMIをAWS Batchで使う

Last updated at Posted at 2018-07-31

 背景

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のアンマネージド環境まで手を出す気にはなれませんでした、、、

他にお困りの方の役に立てば!

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2