aws ecs & Fargateでhelloを表示する
- はじめに
- 対象者
- 前提条件
- 1, コンテナイメージを用意しよう
- 2, ECR (Elastic Container Registry)にイメージをpushする
- 3, ECSでクラスターを作成しよう
- 4, タスクを定義しよう
- 4, タスクを実行しよう
はじめに
ECSの勉強したいけど何したらいいのかわからないという方は多いと思います
僕自身も絶賛勉強中なので備忘録としてECSの設定手順をまとめます
対象者
- ECS何もわからんけど興味あるひと
- お金に多少の余裕があるひと
<注> fargateは時間に対して料金がかかる
前提条件
- dockerのコマンドがわかる
- AWSアカウントを持っている
1, コンテナイメージを用意しよう
今回はgolangのイメージを用意します
使用するファイル
multistage-buildを使ってイメージサイズを落とした方が良いですが、ここでは割愛します
Dockerfile
FROM golang:alpine COPY main.go /go/src WORKDIR /go/src CMD [ "go", "run", "main.go" ]
main.go
package main import ( "fmt" "log" "net/http" "time" ) func main() { mux := http.NewServeMux() mux.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "hello") }) srv := &http.Server{ Handler: mux, Addr: ":8000", ReadHeaderTimeout: 15 * time.Second, WriteTimeout: 15 * time.Second, } log.Fatal(srv.ListenAndServe()) }
イメージのビルド
docker build -t test-server .
ローカル環境でコンテナを実行する
docker run -it --rm -p 8000:8000 test-server
ターミナルでcurlをすると"hello"が出ると思います
$ curl http://localhost:8000/hello hello
2, ECR (Elastic Container Registry)にイメージをpushする
リポジトリを作成
を押す
今回は test-repository
という名前のリポジトリを作成します
それ以外はデフォルトでOK
リポジトリ作成後 プッシュコマンドの表示
をクリック
プッシュコマンドが表示されるので、これを自分のターミナルに入力します
# Dockerクライアント認証 $ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com Login Succeeded # docker imageの作成 $ docker build -t test-repository . [+] Building 0.4s (8/8) FINISHED => [internal] load build definition from Dockerfile ~~~ # イメージにタグをつける docker tag test-repository:latest xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/test-repository:latest # イメージのプッシュ $ docker push xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/test-repository:latest
再度 リポジトリのコンソールを見るとイメージがアップされているのが確認できると思います
3, ECSでクラスターを作成しよう
クラスターの作成
をクリック
ネットワーキングのみを選択
これでクラスターの作成は完了
4, タスクを定義しよう
新しいタスク定義の作成
起動タイプの互換性の選択ではFargateを選択します
4, タスクを実行しよう
タスクが完了したらパブリックIPを確認しましょう
(訳あってタスク定義を作り直し直したので、名前が少し変わりました)
セキュリティグループのポート開け忘れに注意
しかし、後から変更できるので設定ミスしても問題はありません
$ curl http://<ipアドレス>:8000/hello hello