[Fargate 入門] ECS(Fargate)でrakeタスクを実行するまで
Fargateで単純なrakeタスクを実行するまでの手順。
タスク定義やコンテナの設定などがややこしかったため備忘録として。
準備
実行するrakeタスクとコンテナイメージを用意します。
rakeタスクの作成
今回はrakeタスク実行が確認できれば良いので単純なタスクを用意。
namespace :ecs_task do
task :hoge do
puts "task started"
end
end
コンテナイメージの用意
以下のようなDockerfileを作成し、rakeタスクが実行できる環境を用意します。
FROM ruby:2.5.3
# 環境変数
ENV LANG C.UTF-8
ENV APP_ROOT /app
# ソースをコンテナに転送
ADD ./ $APP_ROOT
# コンテナ内の作業ディレクトリの設定
WORKDIR $APP_ROOT
# gemのインストール
RUN gem update bundler
RUN bundle install
コンテナイメージをECRへプッシュする
Fargateでタスクを実行するためにDockerfileからイメージを作成してECRにプッシュします。
(Docker Hubでも良いですが今回はECRを利用)
マネジメントコンソールからリポジトリを作成しましょう。
下記のようにリポジトリが作成されたらOKです。
プッシュコマンドの表示を押すと、ECRへイメージをプッシュする手順が表示されるので、手順にしたがってプッシュします。
プッシュ後、下記のようにイメージが存在すればOKです。
準備は完了したので、ECSでクラスターとタスク定義を作成していきましょう。
ECS
マネジメントコンソール上でクラスターとタスク定義を作成していきます。
クラスターの作成
ECS > クラスターからクラスターを作成します。
今回はFargateを利用するので、ネットワーキングのみ(AWS Fargateを使用)を選択。
クラスターの名前を入れて作成。
今回は既存のVPCを利用するのでVPCは作成しませんでした。
これでクラスター作成は完了しました。
タスク定義の作成
次にクラスターで実行させるタスクを作成していきます。
起動タイプの互換性の選択で、こちらもFargateを選択します。
タスクとコンテナの設定
タスクロール
タスクを実行するコンテナに付与するIAMロールです。タスクでS3やRDSなどAWSサービスにアクセスする必要がある場合は、必要な権限を持ったロールを設定します。
今回は不要なのでスキップ。
タスクの実行IAMロール
タスクを実行(開始)するために必要なロールです。
説明にもありますが、コンテナイメージをECRからプルしたり、コンテナのログをCloudWatch Logsに吐き出すための権限を持ったロールが必要になります。
初回は新しいロールの作成
で自動的に必要なロールを作成してくれるのでこのままでOK。
タスクサイズ
タスクの実行に使用されるメモリとCPUを設定します。(Fargateでは必須)
ひとまず最小限のメモリとCPUを設定しました。
コンテナの設定
タスク実行に必要なコンテナの設定をします。
基本設定
スタンダード(基本設定) | |
---|---|
コンテナ名 | コンテナの名前 |
イメージ | コンテナのURI(ECRからコピーできます) |
プライベートレジストリの認証 | プライベートのリポジトリからイメージをプルする場合に必要(ECRを利用する場合は不要) |
メモリ制限(MiB) | コンテナに対するメモリの制限ですが、Fargateではタスクに対してサイズを設定しているので、コンテナで制限をかける意味はよくわかっていません。 |
ポートマッピング | コンテナのポートとホストインスタンスのポートを紐づける場合に設定します。 今回は単純なrake実行のみなので使用しません。 |
環境
コンテナ環境で実行したいコマンドと作業ディレクトリを以下のように指定。
その他
ヘルスチェックやネットワークの設定などがありますが今回は使用しないので入力する必要はありません。
以上でタスク定義の設定は終了です。
タスクの実行
さっそくタスクを実行していきましょう。
タスク実行時の設定を入力していきます。
起動タイプはFARGATE、タスクを実行するVPCやサブネットなどを入力し、タスクの実行をクリック。
ログの確認
ちゃんとタスクが実行されているかログを確認してみましょう。
タスクの実行ログはデフォルトではCloudWatch Logsに吐き出されます。
ロググループに/ecs/タスク名
が作成されていますのでクリック。
タスクが実行されたことがわかりました。
所感
初めてECSを触ったということもありますが、色々設定することが多く初めは手間取りました。
タスク定義(コンテナ周り)など、まだまだ今回使っていない設定項目は多数あるので、今後調べていきます。
また今回は1コンテナ、単純なrakeタスクの実行しかしていないので、複数コンテナの連携(フロント、バックエンド、DB)などをECSで行ってみようと思います。
Author And Source
この問題について([Fargate 入門] ECS(Fargate)でrakeタスクを実行するまで), 我々は、より多くの情報をここで見つけました https://qiita.com/tai_gt/items/01a5f593a489441355b1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .