Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
第2回 AWS Fargate かんたんデプロイ選手権 #AWSDevDay / The Ea...
Search
Tori Hara
PRO
October 20, 2020
Technology
18
22k
第2回 AWS Fargate かんたんデプロイ選手権 #AWSDevDay / The Easiest Deployment Championship 2020 - Find your winner for AWS Fargate!
Find your best for ECS/Fargate 🙌
Talked at "AWS Dev Day Online Japan" 2020.
Tori Hara
PRO
October 20, 2020
Tweet
Share
More Decks by Tori Hara
See All by Tori Hara
カミナシでの技術的負債返済プロジェクトとその決断 / Beyond tech debts at Kaminashi
toricls
PRO
47
20k
アプリケーション開発者は Amazon ECS あるいは Kubernetes をどこまで知るべきか #AWSDevDay / You build it, you run it
toricls
PRO
55
18k
永続複数ブランチ運用は『単一のコードベース』と言えるのか / What are your justifications for the multi-branches?
toricls
PRO
17
6k
緩やかに死んでいくシステム / You won't be in the team forever
toricls
PRO
23
14k
技術的負債とステークホルダと説明責任と / The Debt
toricls
PRO
74
35k
Securing your Amazon ECS applications: Best practices
toricls
PRO
0
760
独りよがりのプラットフォーム / For Whom that Platform Runs
toricls
PRO
98
33k
Containers + EC2 Spot: 特性と実装パターンに学ぶ低コスト & 高可用アーキテクチャ / Practical Guide for Amazon EC2 Spot with Containers
toricls
PRO
13
5.2k
違いから見る Kubernetes #k8sjp / See Kubernetes through an Amazon ECS Lens
toricls
PRO
10
4.1k
Other Decks in Technology
See All in Technology
New Relicを活用したSREの最初のステップ / NRUG OKINAWA VOL.3
isaoshimizu
2
590
Shopifyアプリ開発における Shopifyの機能活用
sonatard
4
250
個人でもIAM Identity Centerを使おう!(アクセス管理編)
ryder472
3
200
リンクアンドモチベーション ソフトウェアエンジニア向け紹介資料 / Introduction to Link and Motivation for Software Engineers
lmi
4
300k
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
2
1.6k
SREによる隣接領域への越境とその先の信頼性
shonansurvivors
2
520
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
7
820
100 名超が参加した日経グループ横断の競技型 AWS 学習イベント「Nikkei Group AWS GameDay」の紹介/mediajaws202411
nikkei_engineer_recruiting
1
170
安心してください、日本語使えますよ―Ubuntu日本語Remix提供休止に寄せて― 2024-11-17
nobutomurata
1
990
DMARC 対応の話 - MIXI CTO オフィスアワー #04
bbqallstars
1
160
スクラム成熟度セルフチェックツールを作って得た学びとその活用法
coincheck_recruit
1
140
障害対応指揮の意思決定と情報共有における価値観 / Waroom Meetup #2
arthur1
5
470
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
Bash Introduction
62gerente
608
210k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.3k
Raft: Consensus for Rubyists
vanstee
136
6.6k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Unsuck your backbone
ammeep
668
57k
Side Projects
sachag
452
42k
Thoughts on Productivity
jonyablonski
67
4.3k
Transcript
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with AWS Fargate かんたんデプロイ選⼿権 Tori Hara / toricls Sr. Product Developer Advocate Containers Product, AWS A - 6 2 0 2 0 . 1 0 . 2 0 - 2 2 \ 第2回︕/
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with 想定聴講者 • AWS Fargate (for Amazon ECS) の利⽤を検討している • 細かい話は抜きにしてまずはコンテナを AWS 上で動かしたい • デプロイや CI/CD パイプラインについて考えるのが好き ゴール • AWS Fargate の特徴と、AWS Fargate を利⽤したコンテナ実⾏⽅法を知る • 様々なデプロイツールの特徴を知り、デプロイへの探究⼼を⾼める • ⾃社・⾃チームのデプロイ⽅法についてあらためて考えていただくキッカケを作る 本セッションは…
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with Amazon ECS Amazon EKS コンテナオーケストレータの概要 Kubernetes 構築・管理 EC2 インスタンス群
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with 実⾏環境 EC2 インスタンスの運⽤業務 • OS やエージェント類へのパッチ当て・更新 • 実⾏中のコンテナ群に基づく最適なリソース 使⽤率を保つための EC2 インスタンス数の プランニングやスケーリング EC2 インスタンス Container Agent e.g. Amazon ECS Agent, kubelet Container(s) Container Runtime
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with Amazon ECS Meet AWS Fargate Kubernetes AWS Fargate
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with AWS Fargate AWS マネージド EC2 インスタンスのプロビジョン、スケール、管理不要 コンテナネイティブ 仮想マシンを意識しないシームレスなスケーリング コンテナの起動時間・使⽤リソースに応じた料⾦設定 AWS サービスとの連携 VPC ネットワーキング、Elastic Load Balancing、IAM、CloudWatch、 etc. セキュリティ タスク (Pod) はそれぞれが独⽴した分離単位を持ち、実⾏環境の カーネル、CPU、メモリ、ENI を他のタスク (Pod) と共有しない
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with Quick start with “AWS Copilot CLI” やりたいこと アプリと Dockerfile は⼿元にある、あとはこれを Fargate で動かしたい How To $ copilot init
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with Quick start with “AWS Copilot CLI”
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with Quick start with “AWS Copilot CLI”
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with Quick start with “AWS Copilot CLI”
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with Quick start with “AWS Copilot CLI”
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with Quick start with “AWS Copilot CLI”
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with Quick start with “AWS Copilot CLI”
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with Quick start with “AWS Copilot CLI”
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with Quick start with “AWS Copilot CLI”
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with Quick start with “AWS Copilot CLI”
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with Quick start with “AWS Copilot CLI”
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with Awesome-ecs からの抜粋 § AWS CLI § AWS CloudFormation § Terraform § AWS Copilot § AWS CDK § ecs-deploy § ecspresso § Docker Compose ECS integration etc.
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with AWS Management Console
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with AWS Management Console Pros GUI で Fargate タスクを作成できる ECS 以外の AWS サービスもまとめて設定可 e.g. Application Auto Scaling, CodeDeploy 実⾏中のタスクやサービスなどの情報閲覧が容易 Cons デプロイが⼿作業になり再現性がない ミスオペレーションのリスク CI/CD パイプラインとの親和性はあまりない 継続的なデプロイに使うのは難しそう
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with AWS CLI Pros • AWS の新サービスリリース時やサービスアップデートのタイミングで 概ねそれらに対応している • AWS API の呼び出しパラメーターをほぼ全て利⽤可能 Cons • CI/CD パイプラインがシェル芸になりがち • リソース依存関係まで考えたデプロイには⾼度なスクリプト技術が必要 • ロールバックを想定したスクリプトは難しい
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with ecs-deploy
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with ecs-deploy Pros • 1つのシェルスクリプトの中で AWS の API を呼んでいるだけなので、 中⾝を読んで理解しやすい • コミュニティで揉まれているので、AWS CLI を使った⾃前シェルスクリ プトを書くより堅牢 • ロールバックなども考慮されている Cons • ネットワークやロードバランサー、Fargate サービスなどのリソースは 他のツールで作成済みであることを前提にしている • シェルスクリプトであるため、つい魔改造したくなるし、しやすい
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with AWS CloudFormation / Terraform Infrastructure as code YAML ファイルなどに必要な AWS リソースについて宣⾔し、リソースの 宣⾔的デプロイメントを可能にする
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with AWS CloudFormation / Terraform Pros • 単体で全ての AWS リソースを⽤意できるため、1つのツールで済む • Fargate タスクだけでなく、関連する AWS リソースがどのような状態 にあるのかを定義ファイルから確認しやすい • 定義ファイルをバージョン管理システム管理下に置くことで変更履歴や 変更理由を追いやすい • 予定される変更差分を確認してから実⾏できる • AWS リソース間の依存関係も定義できる • 更新できないリソースの場合は新規作成してから古いリソースを消すよ うな挙動を期待できる • CI/CD パイプラインとの相性が良い
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with AWS CloudFormation / Terraform Cons • 使いこなすためには定義する AWS リソースそれぞれについて⼗分に 知っておく必要がある • 最新の API パラメーターのサポートまでに時間がかかることも • VPC やデータベースと AWS Fargate タスクのようなライフサイクルが 異なるリソースの管理⽅法を考えられる⼀定のスキルが必要 • 記述量が多くなりがち • 記述量が多くなりがち • 記述量が多くなりがち • Terraform Modules の利⽤で書く量は減らせる • が、ECS 向けのモジュールが(デプロイツール同様)たくさんある
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with AWS CDK import ec2 = require('@aws-cdk/aws-ec2'); import ecs = require('@aws-cdk/aws-ecs'); import ecs_patterns = require('@aws-cdk/aws-ecs-patterns'); import cdk = require('@aws-cdk/core'); class BonjourFargate extends cdk.Stack { constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { super(scope, id, props); // Create VPC and Fargate Cluster const vpc = new ec2.Vpc(this, 'MyVpc', { maxAzs: 2 }); const cluster = new ecs.Cluster(this, 'Cluster', { vpc }); const fargateService = new ecs_patterns.NetworkLoadBalancedFargateService(this, "FargateService", { cluster, image: ecs.ContainerImage.fromRegistry("amazon/amazon-ecs-sample"), }); new cdk.CfnOutput(this, 'LoadBalancerDNS', { value: fargateService.loadBalancer.loadBalancerDnsName }); } } const app = new cdk.App(); new BonjourFargate(app, 'Bonjour'); app.synth(); https://github.com/aws-samples/aws-cdk-examples/tree/master/typescript/ecs/fargate-application-load-balanced-service
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with AWS CDK Pros • コード(e.g. TypeScript, Python…)でインフラを記述できるためデベロッ パとの親和性が⾼く、テストも書きやすい • 他のツールを併⽤しなくても Fargate を含めた AWS リソースを⼀通り 作成・管理可能 • 抽象度が⾼く多くのパラメーターを省略でき、記述量を減らせる • バックエンドが CloudFormation Cons • 抽象度が⾼いため記述量が少ないが、意識していないとなぜそういうリ ソースが作られるのか説明できなくなる可能性も
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with ECS extensions for CDK(Developer Preview) “Extensions” による拡張 • Elastic Load Balancing • AWS App Mesh • AWS FireLens • AWS X-Ray • AWS CloudWatch Agent • CPU ベースのアプリケーション ⾃動スケーリング etc. https://github.com/aws/aws-cdk/tree/master/packages/%40aws-cdk-containers/ecs-service-extensions const svcDesc = new ServiceDescription(); svcDesc.add(new Container({ cpu: 1024, memoryMiB: 2048, trafficPort: 80, image: ContainerImage.fromRegistry('ecs-sample’), })); svcDesc.add(new HttpLoadBalancerExtension()); svcDesc.add(new AppMeshExtension({ mesh })); svcDesc.add(new FireLensExtension()); svcDesc.add(new XRayExtension()); svcDesc.add(new CloudwatchAgentExtension()); svcDesc.add(new ScaleOnCpuUtilization({ initialTaskCount: 2, minTaskCount: 2, })); const mySvc = new Service(stack, ‘my-service', { environment: environment, serviceDescription: svcDesc, }); N ew !
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with AWS Copilot (再掲, Developer Preview) N ew ! https://aws.github.io/copilot-cli/
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with AWS Copilot (再掲, Developer Preview) N ew ! https://aws.github.io/copilot-cli/
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with AWS Copilot (再掲, Developer Preview) N ew ! https://aws.github.io/copilot-cli/
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with AWS Copilot (再掲, Developer Preview) N ew ! Pros • 最低限必要なのはアプリケーションと Dockerfile のみ • アーキテクチャが “Load Balanced Web Service”, “Backend Service” のよう なユースケースの選択に抽象化されており、それらに適した AWS リソー スをまとめて構築可能 • 抽象度が⾼く、 AWS CDK よりも更に少ない記述量 • 複数 AWS アカウントや複数環境へのデプロイをサポートし、それらへの 継続的デリバリを実施する CI/CD パイプラインを作成可能 • CloudFormation による任意のリソース持ち込みを可能にする “Add-on” • この CloudFormation テンプレートを AWS CDK で書くことも当然可能 • バックエンドが CloudFormation • プロダクションレディな環境を CloudFormation で定義する勉強材料に
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with AWS Copilot (再掲, Developer Preview) N ew ! Cons • 現時点では Developer Preview のステージであり、細かい設定変更は 未サポート e.g. 『セキュリティグループで特定 IP アドレスからのみアクセスを許可したい』 AWS Copilot については Appendix も合わせてご覧ください
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with ecspresso \ 祝 v1.0.0︕/
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with ecspresso Pros • ⾮常に薄いレイヤーで作られた AWS API ラッパー • 画⾯から作ったタスクや、既存の ECS サービスを後から CI/CD に載せ ることが想定されていてとても好き • テンプレーティング + 環境変数利⽤での定義ファイル出⼒が⼤好き e.g. {{ env `FOO` `bar` }} や {{ must_env `FOO` }} など \ 祝 v1.0.0︕/
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with ecspresso Pros • tfstate ファイル内の値を参照できて好き \ 祝 v1.0.0︕/
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with ecspresso Cons • VPC やロードバランサーなど、Fargate タスク・サービス以外のリソー スは事前に作成済みであることを前提としており、AWS についてある 程度の事前知識が必要 • また、それらリソースの作成・管理は別ツールの併⽤が前提 これらは ecspresso において意図的にそのようにデザイン・実装されていることに由来すると思われるため、 実は Cons らしい Cons でもない \ 祝 v1.0.0︕/
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with Docker Compose ECS integration (Beta) N ew !
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with Docker Compose ECS integration (Beta) Pros • Docker Compose を利⽤したローカル開発と⾮常に親和性が⾼い • ロードバランサや CloudWatch ロググループなど Fargate タスクの実 ⾏に必要なものが⼀通り作成される • バックエンドが CloudFormation Cons • 現時点では Beta であり、例えば ECS サービスの更新は未サポート • VPC やサブネットなどのリソースは事前に作成済みであることを前提と しており、未指定の場合は default リソースが利⽤される • Docker Compose が管理しない AWS リソースの作成・管理には別ツー ルの併⽤が必要 N ew !
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with マッチしそうなツールはありましたか︖ とりあえず動いているところを⾒たい / これから AWS をはじめる AWS Copilot が⼀番簡単そう (講演者調べ) 運⽤も考えつつ、CI/CD を意識してツールを選びたい 1. 単⼀のツールで全てのリソースを記述したい AWS CLI / CloudFormation / Terraform / AWS CDK 2. Fargate へのデプロイはより抽象化されたものでやりたい • ecs-deploy / ecspresso / Docker Compose ECS integration のいずれかと上記 ツールの組み合わせ • AWS CDK + ECS extensions for CDK • AWS Copilot
Thank you! © 2020, Amazon Web Services, Inc. or its
affiliates. All rights reserved. In Partnership with Tori Hara / toricls AWS
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with
© 2020, Amazon Web Services, Inc. or its affiliates. All
rights reserved. In Partnership with Appendix AWS Copilot - https://aws.github.io/copilot-cli/ • AWS Copilot のご紹介 https://aws.amazon.com/jp/blogs/news/introducing-aws-copilot/ • AWS Copilot によるコンテナアプリケーションの⾃動デプロイ https://aws.amazon.com/jp/blogs/news/automatically-deploying-your-container-application- with-aws-copilot/ Docker Compose ECS integration - https://github.com/docker/compose-cli • Deploying Docker containers on ECS https://docs.docker.com/engine/context/ecs-integration/ 第1回 AWS Fargate かんたんデプロイ選手権 https://speakerdeck.com/toricls/the-very-first-aws-fargate-easy-deployment-tooling-championship