AWS の ECS 使っていますか?
コンテナって「すぐ動いて楽ちん」ってイメージがありますが、実際どうでしょうか?
私にとっては、
- なんか知らんけど動かない!!
- よく分からんエラー出た・・・
- やっぱ仮想マシンでいいや・・・
のシロモノでした。
実際動いてしまえばこれほど管理が楽なものはないんですけどね・・・勝手に復旧してくれるの最高だし。
今回は、コンテナ導入に挫折仕掛けている同志の方々に向けて、簡単に動かすところまでをまとめてみたいと思います。
AWSには色々なコンテナサービスがありますが、その中で一番メジャーで簡単だと思われる、ECS Fargateを動かしてみたいと思います。
AWS ECS Fargateのための事前準備
dockerやaws cli はcloud shellで動かそうと思うので、cloud shellを起動しておきます。
AWS CloudShell とは - AWS CloudShell
AWS CloudShell について紹介します。
- AWS のマネジメントコンソールを開き、cloud shellを起動します。
- 適当なディレクトリを作成し、その中にDockerfileを配置しておきます。
$ mkdir docker && cd $_
$ mkdir docker && cd $_
$ cat Dockerfile FROM alpine:3.19 CMD ["echo", "I'm really sleepy..."]
WEBサーバやらDBやら動かすためには色々と設定が必要なので、今回は今の自分の心の声を呟くだけのコンテナを作成します。
AWS ECR(Elastic Container Registry)を作成する
作成するイメージを格納するためのECRを作成します。
私は何故かよくECRでドツボにハマります(ECRだけじゃないけど)。今回はどうでしょうか。
Amazon Elastic Container Registry とは - Amazon ECR
Amazon ECR は、AWS マネージドコンテナイメージレジストリサービスです。
- Elastic Container Registryに移動し、「作成」をクリックします。
cloud shellを開いているブラウザのタブとは別の新しいタブで開いた方がこの後操作しやすいです。 - 任意のリポジトリ名を入力し、後はデフォルトのまま「リポジトリを作成」をクリックします。
- ECRのタブに戻り、作成したリポジトリにチェックを入れ、「プッシュコマンドを表示」をクリックします。
- 画面上に詳細な手順を表示してくれるので、手順に従ってcloud shellで実行していきます。
- 認証を通す
$ aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <AWSアカウント>.dkr.ecr.us-east-1.amazonaws.com
- ビルドします。
$ docker build -t poorarithmetic .
- タグづけします。
$ docker tag poorarithmetic:latest <AWSアカウント>.dkr.ecr.us-east-1.amazonaws.com/<リポジトリ名>:latest
- プッシュします。
$ docker push <AWSアカウント>.dkr.ecr.us-east-1.amazonaws.com/<リポジトリ名>:latest
この<AWSアカウント>から先の値は、後でECRに入力するので、メモしておくと楽ちんです。
- 認証を通す
AWS ECS の「タスク定義」を作成する
早くも心が折れてかけていますが、これからが本番です。
- Elastic Container Serviceに移動したら、「タスク定義」をクリックします。
- 「新しいタスク定義の作成」をクリックし、タスクを定義していきます。
以下の項目以外はデフォルトにしています。項目 設定値 タスク定義名 任意の値 タスクサイズ 一番小さく。節約大事。 タスク実行ロール 既に存在していればそれを選択
今回はデフォルトの「新しいロールの作成」のままにしていますコンテナ名 任意の値 イメージURI ECRにPUSHしたコンテナのURIを指定します ログ収集 動かすだけなのでチェックを外しておきます - 全部終わったら、一番下の「作成」をクリックします。
AWS ECS クラスタ作成
誰ですか簡単に動かすって言ったの・・・私か・・・。もう少しです。頑張りましょう。
- 「クラスター」に切り替え、「クラスターの作成」をクリックします。
- クラスター名を入力し、「Fargate」が選択されていることを確認したら、「作成」をクリックします。
少し時間がかかるので待ちます。
そしてまさかのエラーです・・・・・・・・・・・・・・
「CloudFormationで表示」をクリックしても、ヒントになりそうなことは書いてなかったので、試しにCloudFormationのコンソール画面に切り替えてスタックを「再試行」を実行したら作れました。
相変わらず安定のハマり具合です。落とし穴(?)に自ら飛び込む才能だけはあります。 - 気を取り直して作成したクラスターを開き、「タスク」タブの「新しいタスクの実行」をクリックします。
- 設定項目を入力し、「作成」をクリックします。
以下の項目以外はデフォルトにしています。
作成したタスク定義項目設定 値 コンピューティングオプション 起動タイプ タスク定義 作成したタスク定義
ステータスがプロビジョニングになりましたが、はてさて・・・
おっと、よそ見している間にタスクが消えました。 - フィルタリングを「停止済み」に切り替え、結果を確認します。
うーん、動いてなさそうだ。
もう一度実行してみましたが、今度は保留中のまま固まりましたね・・・
そして安定のエラーになりました。
ここで悩むこと数時間。
結論どうやらこのエラーは、タスクを作成する際に「パブリックIPアドレス」をOFFにしたことが原因のようです。
内部でしか使わないし、と余計なことをしてしまったのが原因ですね。私のように課金を気にしすぎる傾向の強い方は気をつけましょう。
3度目の正直なるか!?おっ、実行中になったっぽいです??
画面からタスクが消えたので、改めて「停止済み」を開きます。
終了コードも「0」になってます。
ただ、これだと本当に成功したか目に見えてわかりづらいので、今度はログを有効に切り替えて実行してみます。
タスク定義から「新しいリビジョンの作成」をクリックし、ログを有効にします。
改めて、クラスターの「新しいタスクの実行」をクリックしたら、ちゃんとログが出ました!
メッセージ欄にちゃんと心の声が表示されていますね!
作成したリソースのお片付け
余計な課金が走ったないように、作成したリソースを忘れずに消しておきましょう。
- クラスターの削除
- タスク定義の登録解除
- ECRレポジトリの削除
- ロググループの削除
他にも残骸はあるかと思いますが、課金は発生しないはずなのでここまでにしておきます。
AWS ECS 初めの一歩 まとめ
すごく簡単にとはいきませんでしたが、動かすところまで出来ました。何箇所かエラーでハマりましたが、同じ箇所でつまづいてしまった方のお力になれれば嬉しいです。
もはやコンテナは必須スキルです。苦手意識を持たれている方は一緒に克服していきましょう!
ECSについて詳しく学びたいなら

AWSランキング

にほんブログ村