$30 off During Our Annual Pro Sale. View Details »

【CNDO2021】AWS初学者が始めるコンテナを利用したサーバ構築(ECS/Fargate)

saik1010
March 11, 2021

 【CNDO2021】AWS初学者が始めるコンテナを利用したサーバ構築(ECS/Fargate)

約半年前から、SREへ職種チェンジして主にAWSを触り始めています。
AWS知識ゼロの状態から、EC2/Dockerで動いているシステムをコンテナのオーケストレーションツールであるECS/Fargateの構成でリプレイスした際のお話をさせて頂きます。

主にインフラ領域メインでやられている方というよりは、フロント/バックエンドエンジニアだけど、インフラ領域に興味があるという方向けに発信をできたらと思います。

saik1010

March 11, 2021
Tweet

More Decks by saik1010

Other Decks in Technology

Transcript

  1. AWS初学者が始める
    コンテナを利用したサーバ構築
    (ECS/Fargate)
    2021/03/12
    株式会社ウエディングパーク 斉藤 健太

    View Slide

  2. 斉藤 健太
    株式会社ウエディングパーク
    エンジニアリングマネージャー(backend→QA→SRE)
    2010年に新卒入社したSier(受託)会社で某大手企業の業務システ
    ム開発に関わり、開発やプロジェクトマネジメントを経験。
    2017年8月にウエディングパークへ入社し、
    エンジニアリングマネージャーをベースに、サービス開発周辺のマ
    ネジメントに従事。昨年の10月からはSREへ職種チェンジ。
    31歳で3児の父。
    @saik1010
    自己紹介

    View Slide

  3. 運営サービス

    View Slide

  4. 運営サービス

    View Slide

  5. Agenda
    1. 本日の趣旨
    2. ECS/Fargateでサーバを動かすための最小STEP
    3. まとめ

    View Slide

  6. Agenda
    1. 本日の趣旨
    2. ECS/Fargateでサーバを動かすための最小STEP
    3. まとめ

    View Slide

  7. SECTION 01 本日の趣旨
    AWS初学者向けのお話です
    ● AWSは知ってるけど、EC2ぐらいしか理解してない
    →もともとバックエンドエンジニアのため、実行環境としてAWSを利用していた程度
    ● Dockerも基本的なコマンドは扱えるが構築しろと言われると微妙
    →docker composeが入ってくると混乱したり、Dockerfile作るのも怪しいレベル

    View Slide

  8. SECTION 01 本日の趣旨
    その状態でECS触ろうとしてワケワカランってなった・・
    cluster?service?Task?
    コンテナの話はどこいった・・?笑
    出典
    :https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/Welcome.html

    View Slide

  9. SECTION 01 本日の趣旨
    AWS Black Beltの動画をみて、なんかいけそうな気がした!
    でも結局、ECSを使ってコンテナを動かす
    ために「何から始めれば良いのか」が
    わからなかった・・・
    出典:https://www.youtube.com/watch?v=tmMLLjQrrRA

    View Slide

  10. SECTION 01 本日の趣旨
    AWS Black Beltの動画をみて、なんかいけそうな気がした!
    でも結局、ECSを使ってコンテナを動かす
    ために「何から始めれば良いのか」が
    わからなかった・・・
    出典:https://www.youtube.com/watch?v=tmMLLjQrrRA
    そこで理解した今だから話せる
    ECSでコンテナを動かすための
    最小STEPを話そう!

    View Slide

  11. Agenda
    1. 本日の趣旨
    2. ECS/Fargateでサーバを動かすための最小STEP
    3. まとめ

    View Slide

  12. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    まず結論から言うと、この5STEPでいける!
    【ローカル】
    Dockerfileを作成
    【AWS ECS】
    クラスタを作成
    【AWS ECR】
    imageをpush
    【AWS ECS】
    タスク定義を作成
    【AWS ECS】
    タスクを実行

    View Slide

  13. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    まず結論から言うと、この5STEPでいける!
    【ローカル】
    Dockerfileを作成
    【AWS ECS】
    クラスタを作成
    【AWS ECR】
    imageをpush
    【AWS ECS】
    タスク定義を作成
    【AWS ECS】
    タスクを実行

    View Slide

  14. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    【ローカル】Dockerfileを作成
    ローカルで動作するDockerfileを作成し、ビルドしてイメージが作成できればOK!
    Docker公式にハンズオンがあるので、これで使うとすぐできる。
    とにかくポイントは、「ローカルで動くDockerイメージ」を作成すること
    【ローカル】
    Dockerfileを作成

    View Slide

  15. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    # サンプルAPをcloneしてくる
    $ git clone https://github.com/dockersamples/node-bulletin-board
    $ cd node-bulletin-board/bulletin-board-app
    # Dockerfileをもとに、Dockerイメージをビルド
    $ docker build --tag bulletinboard:latest .
    ※ハンズオンでは「bulletinboard:1.0」となっていますが、
     後続の作業をシンプルにするため 「bulletinboard:latest」としています
    # 試しにローカルでコンテナを起動してみる
    docker run --publish 8000:8080 --detach --name bb bulletinboard:latest
    イメージ作成
    【ローカル】
    Dockerfileを作成

    View Slide

  16. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    http://localhost:8000/にアクセスできればOK!
    【ローカル】
    Dockerfileを作成

    View Slide

  17. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    まず結論から言うと、この5STEPでいける!
    【ローカル】
    Dockerfileを作成
    【AWS ECS】
    クラスタを作成
    【AWS ECR】
    imageをpush
    【AWS ECS】
    タスク定義を作成
    【AWS ECS】
    タスクを実行

    View Slide

  18. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    【AWS ECR】imageをpush
    STEP1で作成した「ローカルで動くDockerイメージ」をECRというイメージを管理する
    サービスにpushします。Gitリポジトリにソースをpushするのと同じです!
    【AWS ECR】
    imageをpush

    View Slide

  19. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    まずはリポジトリを作る
    【AWS ECR】
    imageをpush

    View Slide

  20. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    「プッシュコマンドの実行」を選択
    【AWS ECR】
    imageをpush

    View Slide

  21. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    プッシュコマンドに従い、
    ローカルで作成したイメージをECRにあげる
    2は事前にやってるので不要
    1,3,4をそのまま貼り付けで実行すれ
    ばECRにPushできる
    ※事前に「aws configure」でIAMユーザの認証設
    定が必要です
    【AWS ECR】
    imageをpush

    View Slide

  22. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    プッシュがうまくいくとリポジトリ内にlatestができる
    後ほどタスク定義作成時に必要となるので、
    URIのコピーをしておく
    【AWS ECR】
    imageをpush

    View Slide

  23. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    まず結論から言うと、この5STEPでいける!
    【ローカル】
    Dockerfileを作成
    【AWS ECS】
    クラスタを作成
    【AWS ECR】
    imageをpush
    【AWS ECS】
    タスク定義を作成
    【AWS ECS】
    タスクを実行

    View Slide

  24. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    【AWS ECS】クラスタを作成
    コンテナとして動作するイメージがpushできたので、ここからはECSでコンテナを動かす準備
    です。まずはECSのクラスタを作成します。
    クラスタは、「コンテナを配置するための箱」みたいなものなので、動かすコンテナ郡をグ
    ルーピングするようなもの程度の理解で大丈夫です!
    【AWS ECS】
    クラスタを作成

    View Slide

  25. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    「クラスターの作成」を選択
    【AWS ECS】
    クラスタを作成

    View Slide

  26. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    Fargateで動かすのでネットワーキングのみを選択
    【AWS ECS】
    クラスタを作成

    View Slide

  27. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    クラスター名を入れて作成
    【AWS ECS】
    クラスタを作成

    View Slide

  28. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    まず結論から言うと、この5STEPでいける!
    【ローカル】
    Dockerfileを作成
    【AWS ECS】
    クラスタを作成
    【AWS ECR】
    imageをpush
    【AWS ECS】
    タスク定義を作成
    【AWS ECS】
    タスクを実行

    View Slide

  29. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    【AWS ECS】タスク定義を作成
    タスク定義を作っていきます。起動するDockerイメージの指定や空けるポート番号などを定義
    します。いわゆるdocker-compose.ymlのような位置づけでコンテナを起動するための設計書
    に値します。
    【AWS ECS】
    タスク定義を作成

    View Slide

  30. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    「新しいタスク定義の作成」を選択
    【AWS ECS】
    タスク定義を作成

    View Slide

  31. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    Fargateを選択
    【AWS ECS】
    タスク定義を作成

    View Slide

  32. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    タスク名/ロールなどを設定
    【AWS ECS】
    タスク定義を作成

    View Slide

  33. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    コンテナを設定する
    pushしたECRのイメージを指定
    ポートを開ける
    【AWS ECS】
    タスク定義を作成

    View Slide

  34. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    まず結論から言うと、この5STEPでいける!
    【ローカル】
    Dockerfileを作成
    【AWS ECS】
    クラスタを作成
    【AWS ECR】
    imageをpush
    【AWS ECS】
    タスク定義を作成
    【AWS ECS】
    タスクを実行

    View Slide

  35. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    【AWS ECS】タスクを実行
    作成したタスク定義を元に、タスクを実行します。
    つまりこれがコンテナの起動となるので、「docker run」や「docker-compose run」に
    相当するもの。
    これがうまく成功すれば、ECS上でコンテナが起動します!
    【AWS ECS】
    タスクを実行

    View Slide

  36. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    クラスター内でタスクを実行
    【AWS ECS】
    タスクを実行

    View Slide

  37. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    先ほど作成したタスク定義を指定してタスク実行
    先ほど作成したタスク定義を指定
    VPC/セキュリティグループでdefaultでOK
    ※セキュリティグループでは開放した8080ポートからの
     トラフィックを通すように許可すること
    【AWS ECS】
    タスクを実行

    View Slide

  38. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    タスク(=コンテナ)が起動するかチェック
    RUNNINGになればコンテナ起動OK
    【AWS ECS】
    タスクを実行

    View Slide

  39. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    http://[タスクのパブリック IP]:8080/にアクセスできればOK
    【AWS ECS】
    タスクを実行

    View Slide

  40. SECTION 02 ECS/Fargateでサーバを動かすための最小STEP
    ECS上でコンテナが起動できた!

    View Slide

  41. Agenda
    1. 本日の趣旨
    2. ECS/Fargateでサーバを動かすための最小STEP
    3. まとめ

    View Slide

  42. SECTION 03 まとめ
    まとめ
    AWS初学者という立場から、できるだけシンプルに最小STEPで
    コンテナをECSで起動できるところまでご説明をさせて頂きました。
    私自身は、正直これを理解するまでに1ヶ月ぐらい四苦八苦しましたので、
    同じ悩みを抱えている方の参考になれば幸いです!
    バリバリやられている方からすると、非常に簡単すぎる内容ではあったかと思いますが、
    AWSも日々どんどん新しいサービスが出てくるので、初学者向けのアウトプットも
    是非して頂けると私自身も大変助かります。笑

    View Slide

  43. ご清聴ありがとパ
    公式キャラクター
    「ウエパ」

    View Slide