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
23k
第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
19k
永続複数ブランチ運用は『単一のコードベース』と言えるのか / 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
76
35k
Securing your Amazon ECS applications: Best practices
toricls
PRO
0
770
独りよがりのプラットフォーム / For Whom that Platform Runs
toricls
PRO
98
34k
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
生成AIをより賢く エンジニアのための RAG入門 - Oracle AI Jam Session #20
kutsushitaneko
4
220
1等無人航空機操縦士一発試験 合格までの道のり ドローンミートアップ@大阪 2024/12/18
excdinc
0
160
権威ドキュメントで振り返る2024 #年忘れセキュリティ2024
hirotomotaguchi
2
740
Postman と API セキュリティ / Postman and API Security
yokawasa
0
200
あの日俺達が夢見たサーバレスアーキテクチャ/the-serverless-architecture-we-dreamed-of
tomoki10
0
460
AWS re:Invent 2024で発表された コードを書く開発者向け機能について
maruto
0
190
kargoの魅力について伝える
magisystem0408
0
210
DUSt3R, MASt3R, MASt3R-SfM にみる3D基盤モデル
spatial_ai_network
2
110
DevOps視点でAWS re:invent2024の新サービス・アプデを振り返ってみた
oshanqq
0
180
PHP ユーザのための OpenTelemetry 入門 / phpcon2024-opentelemetry
shin1x1
1
200
10個のフィルタをAXI4-Streamでつなげてみた
marsee101
0
170
終了の危機にあった15年続くWebサービスを全力で存続させる - phpcon2024
yositosi
10
8.1k
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
How STYLIGHT went responsive
nonsquared
95
5.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.1k
A better future with KSS
kneath
238
17k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Optimizing for Happiness
mojombo
376
70k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
Making Projects Easy
brettharned
116
5.9k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
95
17k
The Language of Interfaces
destraynor
154
24k
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