約半年前から、SREへ職種チェンジして主にAWSを触り始めています。 AWS知識ゼロの状態から、EC2/Dockerで動いているシステムをコンテナのオーケストレーションツールであるECS/Fargateの構成でリプレイスした際のお話をさせて頂きます。
主にインフラ領域メインでやられている方というよりは、フロント/バックエンドエンジニアだけど、インフラ領域に興味があるという方向けに発信をできたらと思います。
AWS初学者が始めるコンテナを利用したサーバ構築(ECS/Fargate)2021/03/12株式会社ウエディングパーク 斉藤 健太
View Slide
斉藤 健太株式会社ウエディングパークエンジニアリングマネージャー(backend→QA→SRE)2010年に新卒入社したSier(受託)会社で某大手企業の業務システム開発に関わり、開発やプロジェクトマネジメントを経験。2017年8月にウエディングパークへ入社し、エンジニアリングマネージャーをベースに、サービス開発周辺のマネジメントに従事。昨年の10月からはSREへ職種チェンジ。31歳で3児の父。@saik1010自己紹介
運営サービス
Agenda1. 本日の趣旨2. ECS/Fargateでサーバを動かすための最小STEP3. まとめ
SECTION 01 本日の趣旨AWS初学者向けのお話です● AWSは知ってるけど、EC2ぐらいしか理解してない→もともとバックエンドエンジニアのため、実行環境としてAWSを利用していた程度● Dockerも基本的なコマンドは扱えるが構築しろと言われると微妙→docker composeが入ってくると混乱したり、Dockerfile作るのも怪しいレベル
SECTION 01 本日の趣旨その状態でECS触ろうとしてワケワカランってなった・・cluster?service?Task?コンテナの話はどこいった・・?笑出典:https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/Welcome.html
SECTION 01 本日の趣旨AWS Black Beltの動画をみて、なんかいけそうな気がした!でも結局、ECSを使ってコンテナを動かすために「何から始めれば良いのか」がわからなかった・・・出典:https://www.youtube.com/watch?v=tmMLLjQrrRA
SECTION 01 本日の趣旨AWS Black Beltの動画をみて、なんかいけそうな気がした!でも結局、ECSを使ってコンテナを動かすために「何から始めれば良いのか」がわからなかった・・・出典:https://www.youtube.com/watch?v=tmMLLjQrrRAそこで理解した今だから話せるECSでコンテナを動かすための最小STEPを話そう!
SECTION 02 ECS/Fargateでサーバを動かすための最小STEPまず結論から言うと、この5STEPでいける!【ローカル】Dockerfileを作成【AWS ECS】クラスタを作成【AWS ECR】imageをpush【AWS ECS】タスク定義を作成【AWS ECS】タスクを実行
SECTION 02 ECS/Fargateでサーバを動かすための最小STEP【ローカル】Dockerfileを作成ローカルで動作するDockerfileを作成し、ビルドしてイメージが作成できればOK!Docker公式にハンズオンがあるので、これで使うとすぐできる。とにかくポイントは、「ローカルで動くDockerイメージ」を作成すること【ローカル】Dockerfileを作成
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を作成
SECTION 02 ECS/Fargateでサーバを動かすための最小STEPhttp://localhost:8000/にアクセスできればOK!【ローカル】Dockerfileを作成
SECTION 02 ECS/Fargateでサーバを動かすための最小STEP【AWS ECR】imageをpushSTEP1で作成した「ローカルで動くDockerイメージ」をECRというイメージを管理するサービスにpushします。Gitリポジトリにソースをpushするのと同じです!【AWS ECR】imageをpush
SECTION 02 ECS/Fargateでサーバを動かすための最小STEPまずはリポジトリを作る【AWS ECR】imageをpush
SECTION 02 ECS/Fargateでサーバを動かすための最小STEP「プッシュコマンドの実行」を選択【AWS ECR】imageをpush
SECTION 02 ECS/Fargateでサーバを動かすための最小STEPプッシュコマンドに従い、ローカルで作成したイメージをECRにあげる2は事前にやってるので不要1,3,4をそのまま貼り付けで実行すればECRにPushできる※事前に「aws configure」でIAMユーザの認証設定が必要です【AWS ECR】imageをpush
SECTION 02 ECS/Fargateでサーバを動かすための最小STEPプッシュがうまくいくとリポジトリ内にlatestができる後ほどタスク定義作成時に必要となるので、URIのコピーをしておく【AWS ECR】imageをpush
SECTION 02 ECS/Fargateでサーバを動かすための最小STEP【AWS ECS】クラスタを作成コンテナとして動作するイメージがpushできたので、ここからはECSでコンテナを動かす準備です。まずはECSのクラスタを作成します。クラスタは、「コンテナを配置するための箱」みたいなものなので、動かすコンテナ郡をグルーピングするようなもの程度の理解で大丈夫です!【AWS ECS】クラスタを作成
SECTION 02 ECS/Fargateでサーバを動かすための最小STEP「クラスターの作成」を選択【AWS ECS】クラスタを作成
SECTION 02 ECS/Fargateでサーバを動かすための最小STEPFargateで動かすのでネットワーキングのみを選択【AWS ECS】クラスタを作成
SECTION 02 ECS/Fargateでサーバを動かすための最小STEPクラスター名を入れて作成【AWS ECS】クラスタを作成
SECTION 02 ECS/Fargateでサーバを動かすための最小STEP【AWS ECS】タスク定義を作成タスク定義を作っていきます。起動するDockerイメージの指定や空けるポート番号などを定義します。いわゆるdocker-compose.ymlのような位置づけでコンテナを起動するための設計書に値します。【AWS ECS】タスク定義を作成
SECTION 02 ECS/Fargateでサーバを動かすための最小STEP「新しいタスク定義の作成」を選択【AWS ECS】タスク定義を作成
SECTION 02 ECS/Fargateでサーバを動かすための最小STEPFargateを選択【AWS ECS】タスク定義を作成
SECTION 02 ECS/Fargateでサーバを動かすための最小STEPタスク名/ロールなどを設定【AWS ECS】タスク定義を作成
SECTION 02 ECS/Fargateでサーバを動かすための最小STEPコンテナを設定するpushしたECRのイメージを指定ポートを開ける【AWS ECS】タスク定義を作成
SECTION 02 ECS/Fargateでサーバを動かすための最小STEP【AWS ECS】タスクを実行作成したタスク定義を元に、タスクを実行します。つまりこれがコンテナの起動となるので、「docker run」や「docker-compose run」に相当するもの。これがうまく成功すれば、ECS上でコンテナが起動します!【AWS ECS】タスクを実行
SECTION 02 ECS/Fargateでサーバを動かすための最小STEPクラスター内でタスクを実行【AWS ECS】タスクを実行
SECTION 02 ECS/Fargateでサーバを動かすための最小STEP先ほど作成したタスク定義を指定してタスク実行先ほど作成したタスク定義を指定VPC/セキュリティグループでdefaultでOK※セキュリティグループでは開放した8080ポートからの トラフィックを通すように許可すること【AWS ECS】タスクを実行
SECTION 02 ECS/Fargateでサーバを動かすための最小STEPタスク(=コンテナ)が起動するかチェックRUNNINGになればコンテナ起動OK【AWS ECS】タスクを実行
SECTION 02 ECS/Fargateでサーバを動かすための最小STEPhttp://[タスクのパブリック IP]:8080/にアクセスできればOK【AWS ECS】タスクを実行
SECTION 02 ECS/Fargateでサーバを動かすための最小STEPECS上でコンテナが起動できた!
SECTION 03 まとめまとめAWS初学者という立場から、できるだけシンプルに最小STEPでコンテナをECSで起動できるところまでご説明をさせて頂きました。私自身は、正直これを理解するまでに1ヶ月ぐらい四苦八苦しましたので、同じ悩みを抱えている方の参考になれば幸いです!バリバリやられている方からすると、非常に簡単すぎる内容ではあったかと思いますが、AWSも日々どんどん新しいサービスが出てくるので、初学者向けのアウトプットも是非して頂けると私自身も大変助かります。笑
ご清聴ありがとパ公式キャラクター「ウエパ」