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
AWS発のAIエディタKiroを使ってみた
iriikeita
1
190
Platformに“ちょうどいい”責務ってどこ? 関心の熱さにあわせて考える、責務分担のプラクティス
estie
1
140
複雑なフォームに立ち向かう Next.js の技術選定
macchiitaka
2
240
rage against annotate_predecessor
junk0612
0
170
Navigating Dependency Injection with Metro
zacsweers
3
3.5k
テストカバレッジ100%を10年続けて得られた学びと品質
mottyzzz
2
610
意外と簡単!?フロントエンドでパスキー認証を実現する WebAuthn
teamlab
PRO
2
780
ファインディ株式会社におけるMCP活用とサービス開発
starfish719
0
2.1k
Processing Gem ベースの、2D レトロゲームエンジンの開発
tokujiros
2
130
ぬるぬる動かせ! Riveでアニメーション実装🐾
kno3a87
1
230
API Platform 4.2: Redefining API Development
soyuka
0
160
Kiroで始めるAI-DLC
kaonash
2
630
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
How to train your dragon (web standard)
notwaldorf
96
6.2k
Large-scale JavaScript Application Architecture
addyosmani
513
110k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
810
Why Our Code Smells
bkeepers
PRO
339
57k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
GitHub's CSS Performance
jonrohan
1032
460k
Navigating Team Friction
lara
189
15k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Optimizing for Happiness
mojombo
379
70k
BBQ
matthewcrist
89
9.8k
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