2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Fargate動作確認の備忘録

Posted at

はじめに

これまではチュートリアルなどを通して何となくFargateを触っていたが、今回はFargateを利用して実際にサーバーレスの仕組みを実装したく、その際に真面目に動作確認を実施したので備忘録として残す。内容はごく初心者向け。

以下の順序でFargateの動作確認までを実施した。

  1. Fargate実行用のVPCを作成。
  2. Amazon ECSからClusterを作成。
  3. 動作確認用のDockerイメージをCloud9に用意する。
  4. Amazon ECRを作成。
  5. Cloud9にあるDockerイメージをECRにプッシュ。
  6. 実際に動作させるTask定義を作成。
  7. Taskを実行する(デプロイする)。
  8. Task実行エラーを解決。
  9. 再度Taskを実行し動作確認完了。

Fargate実行用のVPCの作成

VPCコンソールからシンプルに作成していく。今回は今後の検証幅も広めたいのでMaltiAZ構成とした。一旦NAT GatewayとVPCエンドポイントは無しで作成する。
image.png

Clusterの作成

いきなりClusterという用語が出てきた。参考記事に載ってある図込みの説明がわかりやすい。文字だけ載せておくと、Clusterとは

ECSを使う際のサービス単位。
クラスターの中にコンテナを立ち上げていく。

ということである。
ECSのコンソール画面から作成していく。今回のコンテナはとりあえずPublic Subnetの中で起動するようにしておく(ゆくゆくはPrivate Subnetでの動作も確認したい。)先ほど作成したVPCとサブネットを選択する。
image.png

一旦これだけでClusterは作成できた。この時点ではまだClusterとは何ぞや、、の状態だがそのまま次に進む。
image.png

Docker Imageの用意

今回はCloud9をローカルと見立てDockerのイメージを用意する。ひとまず軽量のalpineイメージをpullして、これを使うこととする。
image.png

docker imagesとすると、ローカルにDockerイメージが用意されたことが分かる。
image.png

ECRの作成

Dockerイメージを保管・管理するためのリモートリポジトリをECRの画面から作成する。なんとなくGitリポジトリ(CodeCommitのリポジトリなど)と同じような感じだろうと思っている。
image.png

ECRにDockerイメージをプッシュ

さて、リポジトリが作成されたので先ほどpullしたDockerイメージをプッシュしていきたい。ECRのコンソール画面からリポジトリへプッシュする際のコマンド手順が確認できるので、こちらに沿って実施していく。
image.png

まずはECRへの接続認証(1番目の手順)
image.png

2番目の手順(ビルド)は今回pullしたイメージでは不要(ビルド済)なのでスキップし、3番目の手順を実施する。ビルドしたイメージにタグ付けをしている。タグ付けコマンドの後にdocker imagesとするとlatestのタグ付けされたイメージが確認できる。(イメージが追加されている)
image.png

最後にdocker push タグ付けされたDockerイメージとしてECRのリポジトリにイメージをプッシュ(4番目の手順)。
image.png

ECR側の画面でも、プッシュされたイメージが確認できた。
image.png

Task定義の作成

Task定義とは、、とまた新しい概念が出てきた。またまた参考サイトから引用させてもらうと、タスクとは

ECSにおけるタスクとは、起動するコンテナの情報を定義したもの。
1つのタスクに対し、複数のコンテナを記述できる。

ということらしい。つまりどんなコンテナ(EC2 or Fargate)で実行するかであるとか、とのコンテナのスペック(メモリやCPU)を定義する設定らしい。Task定義 = Taskの定義というイメージよりは、Task定義 = Task実行環境の定義、みたいなイメージだろうか。

今回はFargateを選択し、
image.png

OSはLinuxを選択。
image.png

Taskサイズは最小値を設定。
ん?ここでAdd containerのボタンがある。コンテナの追加?どういうこっちゃ?と思いながらボタンを押して進めてみる。
image.png

Containerの追加

(なぜかここ以降は「ですます調」になっています。(笑))
Task定義で「起動するコンテナ情報」を定義していますが、実際に「起動するコンテナ自体」を追加する必要があるということでしょうか。たしかに、「Dockerサービス」=「コンテナサービス」のイメージがあるので、コンテナを追加するということは、実行するDockerを追加する、というようなイメージを持てばすこししっくりきます。
Add Containerの画面では、利用するイメージを選択します。
image.png

ひとまず実行したかどうかをすぐに確認したいので、Commandの部分にdateとだけセットしておきます。
image.png

CloudWatch Logsにログも出力しておきたいので、Log configurationにもチェック。最後にAddボタンを押します。
image.png

Task定義の画面で作成を完了すると、どうやらTask定義が作成されたっぽい画面が表示されました。
image.png

Taskを実行する

ではTaskを実行してみます。Task定義の画面からRun TaskとすることでTaskを実行できそうです。
image.png

とここでAWS側の新しいUINew Experienceがあることに気が付いたので、今後はこちらの画面で進めていきます。同じようにタスク定義の画面からタスク実行できますが、新UIの方ではタスクのRunをDeployという概念で表しているみたいです。
image.png

Taskを実行するコンピュートオプションでLaunch typeを選択します。もう一つの選択肢のCapacity provider strategyについては参考サイトの内容が分かりやすかったので、興味のある方はそちらを参照してください。
image.png

以下はデフォルトのままにして
image.png

Networkingの項目では、作成したVPCとpublic subnetを選択します。セキュリティグループもデフォルトで選択されているPublic Subnet用のSGをそのまま利用しています。(クラスターを作成したときにもVPCやSubnetを選択しているのに、またここで選択。。なぜ?Clusterの概念がわかりづらい。Fargateだからでしょうか。クラスターを選択するような感じならまだわかりやすい気もするのですが。。)
image.png

Run

Runしました。
image.png

エラーがでました。どうやらECS(Fargate)とECR間でのやりとりがうまく行っていない様子です。
image.png

参考記事に記載されている二つの修正内容を実施します。一つ目はecsTaskExecutionRoleAmazonEC2ContainerRegistryReadOnlyポリシーをアタッチ。
image.png

そしてFargateのVersionを1.3に設定。(この方法は根本的な解決にはなっていませんが、今回は動作確認が目的なので一旦これで回避)
image.png

再度Runすると、無事にdateコマンドのログが確認できました。これで動作確認は完了しましたが、以外とステップが多く、所々理解に悩む概念などもありました。
image.png

おわりに

クラスター、コンテナー、タスク定義、タスク、サービス、ECR、イメージなど、ECSを使い始める場合には少なからずキャッチアップが必要な概念があるので、参考記事の内容であったり今後の検証を通して、自分の中で腹落ちできるように理解を進めていきます。

参考記事

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?