モチベーション維持のための技術系ブログ

技術者として個人的にアウトプットもやっていこうと思い始めました。

Amazon ECS 入門ハンズオン をやってみた

URL

catalog.us-east-1.prod.workshops.aws

Cloud9 で作業環境の作成

下記キャプチャの通り操作し、Cloud9の環境を作成する。

細かい設定の意味はわからない。
とりあえずハンズオンに従った設定にする。

Cloud9にはデフォルトでdockerがインストールされているらしい。
docker version を入力して確認する。

AWS Cloud9 環境のパブリック IP アドレスを取得。
後で使うらしい。

コンテナイメージの作成

Dockerfile の作成

Dockerfileを Cloud9上で作成する。
※このファイルの簡単な説明はハンズオンのURL参照

docker build でイメージ作成。
※表示メッセージ長いので、最初の方のキャプチャだけ。

docker image でイメージができてること確認。

コンテナを動かす

Cloud9 環境で動いているコンテナイメージを確認。

ドッカーを起動。
オプションの説明は下記の通り。(ハンズオンURLからコピペ)

  • -d : コンテナをバックグラウンドで動かすために、デタッチドモードを有効にする
  • -p : 指定したポートを、ホスト側に公開する。ホスト側の 8080 ポートを、コンテナ側の 80 ポートに割り当てる。
  • --name : コンテナに名前を付ける

コンテナからのレスポンス確認

curl localhost:8080 を投げてみる

Cloud9上の簡易的なWebブラウザで確認してみる

コンテナのデバッグ作業

※うまく起動しない場合の作業みたいなので、うまくいっている為いったんスルー。

ECRにアップロード

ECRのコンソール画面を開く。

リポジトリを作成する。

リポジトリ完成、URIを控えておく。

リポジトリの詳細を見ると、イメージがない状態。
ここにイメージをアップロードしていく。

「プッシュコマンドの表示」からイメージプッシュのコマンドが見られる。

コマンドでECRにアップロード

Cloud9上のコンテナイメージとECRを紐づける為、リポジトリの名前を使ったタグを付与する。
Tagの構文は下記。
ホスト名/イメージ名[:タグ名]

先ほど控えておいたURIの後ろに「:Tag名」でよさそう。

docker build -t 作ったTag . を実行。

docker images でTag付与できているかを確認。

リポジトリアップロードの為に、ログインをする。 ※ECRコンソール画面の「プッシュコマンドの表示」にコマンドあり。

docker push さっきつけたTag名 で push する。

ECRのコンソール画面を見ると、イメージが push されていることが確認できる。

ECSの作成

VPCの作成

セキュリティグループの修正

作成したVPCのセキュリティグループにインバウンドルールを追加。
まずは、自分のPCからアクセスできるようマイIPを追加。

次に、Cloud9からアクセスできるよう、控えておいた Public IP アドレスを追加。

ECSクラスターの作成

作成したら、エラーになった。
初めて作成するときはエラーになることがあるらしい。
※ハンズオンのURLにその旨の記載あり。

もう1回やったらちゃんと作成できた。

タスク定義の作成

下図の赤線だけ設定したら、あとは「次へ」で作成する。

タスク定義が作成された。

サービスの作成

作成したECSクラスターを選択する。

サービスタブの作成を選択。

「環境」の設定はデフォルトのまま(ハンズオンで特に言及されていなかったので)

「デプロイ設定」は下記の通り。

「ロードバランシング」の設定も行う。

それ以外はデフォルトの設定のまま。「作成」を選択する。 すると、サービスが作成される。数分かかる。

数分後、デプロイ成功。

インターネットからアクセス

ここまでの手順で、AWS Cloud9 で作成したコンテナを ECS と Fargate の上で稼働することができているらしい。
インターネットからアクセスするための名前が自動的に付与されているみたいなので、作成したサービスを選択する。
そして、「ネットワーキングタブ」の「オープンアドレス」を選択する。

すると、Chromeが起動して「Hello, World」が表示された。