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
AWSFargateHandsOnStartingWithTerraform
Search
keita-koga
September 24, 2019
Programming
0
220
AWSFargateHandsOnStartingWithTerraform
See below to get started.
https://github.com/keitakn/my-terraform/wiki/2019-09-Fargate-Hands-on
keita-koga
September 24, 2019
Tweet
Share
More Decks by keita-koga
See All by keita-koga
Nuxt.js And TestCode
keitakn
2
4.7k
Development of authorization system using Authlete and AWS
keitakn
0
1.4k
Other Decks in Programming
See All in Programming
モテるデスク環境
mozumasu
3
1.3k
Ktorで簡単AIアプリケーション
tsukakei
0
110
Vueのバリデーション、結局どれを選べばいい? ― 自作バリデーションの限界と、脱却までの道のり ― / Which Vue Validation Library Should We Really Use? The Limits of Self-Made Validation and How I Finally Moved On
neginasu
2
1.6k
コードとあなたと私の距離 / The Distance Between Code, You, and I
hiro_y
0
190
React Nativeならぬ"Vue Native"が実現するかも?_新世代マルチプラットフォーム開発フレームワークのLynxとLynxのVue.js対応を追ってみよう_Vue Lynx
yut0naga1_fa
2
1.5k
Things You Thought You Didn’t Need To Care About That Have a Big Impact On Your Job
hollycummins
0
260
CSC305 Lecture 11
javiergs
PRO
0
270
Range on Rails ―「多重範囲型」という新たな選択肢が、複雑ロジックを劇的にシンプルにしたワケ
rizap_tech
0
7.7k
pnpm に provenance のダウングレード を検出する PR を出してみた
ryo_manba
1
160
開発組織の戦略的な役割と 設計スキル向上の効果
masuda220
PRO
9
1.6k
SODA - FACT BOOK(JP)
sodainc
1
8.8k
Server Side Kotlin Meetup vol.16: 内部動作を理解して ハイパフォーマンスなサーバサイド Kotlin アプリケーションを書こう
ternbusty
3
250
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Building a Modern Day E-commerce SEO Strategy
aleyda
44
7.8k
Code Review Best Practice
trishagee
72
19k
Documentation Writing (for coders)
carmenintech
75
5.1k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
How to train your dragon (web standard)
notwaldorf
97
6.3k
Fireside Chat
paigeccino
41
3.7k
Visualization
eitanlees
149
16k
Building a Scalable Design System with Sketch
lauravandoore
463
33k
Building Better People: How to give real-time feedback that sticks.
wjessup
369
20k
Transcript
Terraformで始めるAWS Fargateハンズオン keitakn(古賀圭太)
自己紹介 古賀圭太 フリーランスエンジニア(主にWeb系) Twitter: https://twitter.com/keita_kn_web GitHub: https://github.com/keitakn Qiita: https://qiita.com/keitakn
今日の内容 • AWS Fargateの概要 • AWS FargateのリソースをTerraformで作成する方法
AWS Fargateの概要 ECSのコンピューティングエンジンの1つです。 最大の特徴はクラスター管理が不要な点です。 https://aws.amazon.com/jp/fargate/
AWS Fargateの料金 ECSのEC2モードと比較すると多少割高です。 しかし2019年1月以降値下げを行っています。 EC2リソースを管理する手間を考えたら、安いと言えると思います。 (参考)AWS FargateとEC2の料金比較 https://dev.classmethod.jp/cloud/aws/compare-fees-for-fargat-and-ec2-2019-1/
Kubernetesとの比較 コンテナの実行環境としてはKubernetesがデファクトスタンダードになっています。AWS にはEKS、GCPにはGKEとそれぞれマネージドサービスが存在します。 これらはKubernetesの知識があれば扱えます。 それと比較してFargateに出てくる用語や概念はAWS独自の物になります。 よって独自概念を知識として身につける必要があります。 ただ将来的にはFargateからKubernetesが起動出来るようになる可能性もあります。
TerraformでFargateに入門する 以下にサンプルコードを用意しました。 https://github.com/keitakn/my-terraform 以下のGoLang製の2つのアプリケーションをFargateで起動させています。 https://github.com/keitakn/go-rest-api https://github.com/keitakn/go-graphql
基本的に全てのリソースはTerraformで管理出来ます。 • Dockerイメージを格納するECRのリポジトリ • FargateにアタッチするIAMロール • Fargateクラスタ • Fargateのサービス定義 •
Fargateタスク定義 • Fargateアプリケーションが利用するALB • Fargateをデプロイする為のCodeDeploy Terraformで管理しているFargate関連リソース
Dockerイメージを格納するECRのリポジトリ privateイメージを扱うのであればECRのリポジトリを作るのが早いです。 こんな感じでECRへのプッシュscriptを用意しておきます。 CodeBuildからこれらを実行するように設定しておくと良いでしょう。
FargateにアタッチするIAMロール こんな感じです。 SSMへのアクセス権を付与して おくとParameterStoreから 環境変数を取得出来るので 便利です。
Fargateクラスタ
Fargateのタスク定義
Fargateのタスク定義 コンテナの設定はこんな感じです。
Fargateのサービス定義 こんな感じです。 ポイントとしては下記の通りです。 • マルチAZになるようサブネットを割り当て • デプロイによって変化する値はignoreする
Fargateアプリケーションが利用するALB 以下の点を意識して作成します。 • Blue/Green Deployment用に2つのターゲットグループを用意 • ターゲットグループのタイプはIPにする https://github.com/keitakn/my-terraform/blob/master/modules/aws/api/alb.tf
Build&デプロイの仕組み 1. ECRへ最新のDockerイメージをプッシュ 2. タスク定義からECSサービスの更新 3. CodeDeployでデプロイが行われる 全体の流れはこの記事が参考になります https://qiita.com/kobayashi-m42/items/59cfe693670d930f7522 これらの流れはCodePipeline等を使って自動化する事が可能です。
Fargateのログ収集について かつてはCloudWatchLogsにログを送るしか選択肢がありませんでした。 しかし今はSplunkにログを送信出来るようになっています。 CloudWatchLogsだけだと検索がツライので以下のように少し工夫をすると良いでしょ う。 • Splunkをログドライバーに指定する • CloudWatchLogsのsubscriptionFilter +
Lambdaを使って任意の場所に送信
監視について とりあえず最低限Container Insightsを有効にしておきましょう。 https://dev.classmethod.jp/cloud/aws/container-insights-ga/ あとは外形監視を導入しておくと良いです。 (参考)Datadogを使った例 https://docs.datadoghq.com/ja/synthetics/api_tests/?tab=httptest (参考)Datadogの外形監視をTerraformで設定 https://github.com/kobayashi-m42/datadog-terraform-sample/pull/6/files
デモ 以下のコードを使って実際にFargateのアプリケーションを起動させてみます。 デプロイも行ってみます。 https://github.com/keitakn/my-terraform