Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ECS on Fargate構築の課題と解決策 / Challenges and Soluti...
Search
Kazunori Inaba
July 03, 2023
Technology
510
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ECS on Fargate構築の課題と解決策 / Challenges and Solutions for Building ECS on Fargate
第30回JAWS-UG札幌勉強会の発表資料。
Kazunori Inaba
July 03, 2023
More Decks by Kazunori Inaba
See All by Kazunori Inaba
Alibaba Cloud ECSを使ってみた~AWS EC2との違い / Using Alibaba Cloud ECS - Difference from AWS EC2
kazunoriinaba
0
1.6k
Alibaba Cloudのベンチマークテスト / Server Benchmark Test for Alibaba Cloud ECS and AWS EC2
kazunoriinaba
0
210
Other Decks in Technology
See All in Technology
re:Invent初参加で変わったこと、2回目にやってみたいこと(JAWS-UG彩の国埼玉 #12)
mhrtech
2
220
その Valkey 使いこなしていますか?
onk
PRO
5
1.5k
AI駆動開発の時代になったのでトヨタ生産方式から見直す
terurou
7
6k
ソフトウェア ファクトリー - 再現性のあるソフトウェアの工場づくり / Software factory
iktakahiro
6
4.9k
Code for Security プロジェクト紹介 2026年10月
yu23ki14
0
110
NDIでApple Vision Proにリアルタイム映像送信
jyouryuusui
0
120
AI時代のPRレビューにどう向き合うか?
kairim0
1
240
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
470
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
4
1.4k
TinyGoでオブザーバビリティ?OpenTelemetryはTinyGoで使えるのか / Is OpenTelemetry available in TinyGo environment?
ymotongpoo
2
140
PHPカンファレンス関西の招待状 / Invitation to PHP Conference Kansai
ykanoh
0
110
Conditional PED-ANOVA: Hyperparameter Importance in Hierarchical & Dynamic Search Spaces
pfn
PRO
0
130
Featured
See All Featured
Claude Code のすすめ
schroneko
67
230k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.2k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
550
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
220
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
Why Our Code Smells
bkeepers
PRO
340
58k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
First, design no harm
axbom
PRO
2
1.3k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
750
Transcript
2023/6/30 Kazunori Inaba 2023.6.30 第30回 JAWS-UG札幌 勉強会 ECS on Fargate構築の課題と解決策
稲葉 一紀@札幌 1
2023/6/30 Kazunori Inaba 稲葉 一紀 (Kazunori Inaba) • サーバーインフラ専門のフリーランスエンジニア@札幌 •
AWS認定は Solutions Architect Association (SAA) 1冠 • 屋号: 稲葉サーバーデザイン (2013-) https://inaba-serverdesign.jp/ 2 自己紹介
はじめに 2023/6/30 Kazunori Inaba みなさん、 ECS、使っていますか? 3
はじめに 2023/6/30 Kazunori Inaba • 医療・介護・福祉系SNSのサーバー構築(移行)。 • 担当者: アプリ開発担当(アプリ開発とアプリコンテナ作成)と稲葉 (AWS構築)の2人。
• 2人とも、はじめてのECS構築。 • コンテナ実行環境を用意するだけなので簡単だと思っていた。 → 機能名にとまどったり、構築作業中に課題やリクエストが出てき たりで意外と大変だった! • ECS on Fargate構築時の課題と解決策についてお話します。 ※スライドは後日Speaker Deckにアップします。 https://speakerdeck.com/kazunoriinaba/ ※ブログ書きました。 https://inaba-serverdesign.jp/blog/20230607/aws-ecs-fargate.html 4
AWS構成 2023/6/30 Kazunori Inaba • 医療・介護・ 福祉系SNS • Railsアプリ •
2023年6月上旬 Azureから移行 5
構築時の課題いろいろ 2023/6/30 Kazunori Inaba 1. ECS構成要素の理解 2. アプリケーション環境変数の渡し方 3. タスクロールとタスク実行ロール
4. 稼働中のコンテナでデバッグ 5. ログ振り分け 6. 外部アクセス時のアクセス元IPアドレス固定 6
課題1. ECS構成要素の理解(1) 2023/6/30 Kazunori Inaba いざ、ECSを構築しようとすると出てくる構成要素の用語 • クラスター • サービス
• タスク • タスク定義 • コンテナ ↑抽象的なネーミングで、最初はわかりにくいような。。 7
課題1. ECS構成要素の理解(2) 2023/6/30 Kazunori Inaba • 「サービス」が中心と考えると理解しやすい • ECSとは、 •
クラスター(=複数EC2インスタンスの集合またはFargate)の上で、 • Dockerコンテナを使って、 • サービスを動作させる もの (参考記事より引用、一部変更) • Amazon EC2 Container Service(ECS)の概念整理 - Qiita https://qiita.com/NewGyu/items/9597ed2eda763bd504d7 8
課題1. ECS構成要素の理解(3) 2023/6/30 Kazunori Inaba (参考) • Amazon EC2 Container
Service(ECS) の デ ー タ モ デ ル に つ い て 整 理 し た - DevelopersIO https://dev.classmethod.jp/articles/amazon-ecs-datamodel/ • どの構成要素が、どの属性をもっているかについては、AWSCLIや Terraformのドキュメントを読むと、理解しやすいのでは。 9
課題2. アプリケーション環境変数の渡し方 2023/6/30 Kazunori Inaba • 3つの方法 A. タスク定義で指定 B.
Secrets Manager または Systems Managerパラメータストアを使 用 C. S3バケットに保存した環境変数ファイルを参照 • 今回は、アプリケーションが扱いやすい C. を選択。 • 環境変数ファイル専用のS3バケットを用意して、「タスク実行ロー ル」に専用S3バケット参照権限を追加。 10
課題3. タスクロールとタスク実行ロール(1) 2023/6/30 Kazunori Inaba • タスク定義作成時の ロール設定 → •
「タスクロール」と 「タスク実行ロール」 どう違う? 11
課題3. タスクロールとタスク実行ロール(2) 2023/6/30 Kazunori Inaba • タスクロール • コンテナ化されたアプリケーションが、 AWSリソースにアクセスするために
必要な権限を管理する。 • 今回ロールに付与した権限(ポリシー) - フロントエンド、画像配信用S3バケットの読み書き - ジョブ管理用SQSキューの読み書き - ECS Exec実行に必要な権限(ログ出力含む) - FireLens Fluent BitコンテナからCloudWach Logsへのログ出力 12
課題3. タスクロールとタスク実行ロール(3) 2023/6/30 Kazunori Inaba • タスク実行ロール • (アプリケーションコンテナの外側で) ECSコンテナエージェントが、コンテナを
起動・実行するときに、AWSリソースに アクセスするために必要な権限を管理する。 • 今回ロールに付与した権限(ポリシー) - S3バケットの環境変数ファイル取得 - AmazonECSTaskExecutionRolePolicy(AWSがデフォルトで用意した、タ スク実行に必要な最小限のポリシー。ECRからのコンテナイメージダウンロ ードやCloudWatch Logsへのログ出力など) 13
課題4. 稼働中のコンテナでデバッグ 2023/6/30 Kazunori Inaba • Fargateではホストサーバーにログインできないので無理では? → ECS Execで可能!
• docker execのように、実行中のコンテナに対して、AWS CLIでコマンドを実 行できる機能。 • ECS Exec機能はデフォルトでは無効。AWS CLIで有効化する。 (なぜかマネジメントコンソールで設定できない。。) • ECS「タスクロール」に、ECS Exec実行に必要な権限を付与。 • ECS Execコマンド → AWS Cloud Shell等で実行。 14 $ aws ecs execute-command ¥ --cluster <クラスター名> ¥ --task <タスクID> ¥ --container <コンテナ名> ¥ --interactive ¥ --command “<コマンド>”
課題5. ログ振り分け(1) 2023/6/30 Kazunori Inaba • デ フ ォ ル
ト で は 、 コ ン テ ナ の 標 準 出 力 と 標 準 エ ラ ー 出 力 が 、 CloudWatch Logsの1つのロググループに出力される。 • 一度のログ出力が複数行に分かれる。 • ヘルスチェックなど、重要でないものも含め大量のログレコードがある。 → そのままでは調査しにくい。 • FireLens (Fluent Bit)を利用して、CloudWatch Logsの複数のログ グループに振り分け。 • 「アプリ」 「ワーカー」 「ヘルスチェック」「SQSポーリング」といった処 理ごとにロググループを分け、保存期間を個別に設定。 15
課題5. ログ振り分け(2) 2023/6/30 Kazunori Inaba • FireLens • アプリケーションコンテナと同じ タスク内にログ収集用コンテナを
設置(「サイドカー」)。 • ログ収集用コンテナ: Fluent Bit or Fluentdを選択 • Fluent BitまたはFluentdの設定で、ログ振り分けルールを記載。 • Kinesis Firehose経由でS3へのログ振り分けも可能。 • AWSマネジメントコンソールでは、FireLensの設定は旧UIで。 • (ECS「タスク実行ロール」ではなく)ECS「タスクロール」にCloudWatch Logsへの書き込み権限を付与する。 16
課題5. ログ振り分け(3) 2023/6/30 Kazunori Inaba • ログ複数行問題 • アプリケーション側で一度のログをJSON形式の1レコードにまとめる。 (参考)
• Rails on ECSな構成でFluent Bitを利用して快適なロギングを実現する https://zenn.dev/machamp/articles/50ed6bc383539c • Fluent BitのMuitilineフィルターでも対応可? 17
課題6. 外部アクセス時のアクセス元IPアドレス固定(1) 2023/6/30 Kazunori Inaba • 外部サービスとの連携のため「アプリケーションからインターネットア クセスする際の、アクセス元IPアドレスを固定したい」 • NATゲートウェイを作成
• NATゲートウェイにElasticIPを 付与。 • ECS用サブネットのデフォルト ルートをNATゲートウェイに。 18
課題6. 外部アクセス時のアクセス元IPアドレス固定(2) 2023/6/30 Kazunori Inaba • NATゲートウェイ利用時の注意点 • 外部インターネットへの通信のほか、VPC外のAWSサービスへの通信もNATゲ ートウェイの処理量課金の対象となる。
- ECRからのコンテナイメージダウンロード - CloudWatch Logsへのログ出力 - S3への静的コンテンツアップロード、ダウンロード - SQSキューへのアクセス • In/Outの処理量合計に対する課金 $0.062/GB 19
課題6. 外部アクセス時のアクセス元IPアドレス固定(3) 2023/6/30 Kazunori Inaba • AWSサービスへの通信をVPCエンドポイント経由とすれば、NATゲー トウェイ課金がなくなる。 • でも、VPCエンドポイントも起動時間・処理量の課金がある。
• 今回は、S3との通信のみVPCエンドポイント(ゲートウェイ型、無料)を利用。 • NATゲートウェイのIn/Out処理量を CloudWatchダッシュボードで監視。 • ECS Scheduled Taskを使用する、コンテナの増減が 多いなど、イメージダウンロード機会が多い場合は、 ECR用のVPCエンドポイントの利用を。 (参考) ・ECS/Fargate VPCエンドポイントとNAT ゲートウェイの損益分岐点をざっくり計算してみた - スクショはつらいよ https://chariosan.com/2022/03/29/ecs_fargate_vpc_endpoint_cost_bep/ 20
ECSを採用してよかったこと(1) 2023/6/30 Kazunori Inaba 【アプリ開発担当者の声】 • PC開発環境にDockerを初導入。 • コンテナをDBサーバー、バックエンド(API)、フロントエンドに分割して開発 (本番環境ではそれぞれ、RDS,
ECS, S3に相当)。 • デプロイ作業はバックエンドのみをECSにデプロイできるので簡単。 • デプロイ、ロールバックが楽になった。 • 旧: Capistranoを利用し、Gitに一旦デプロイしてマージ。 • 現: コンテナをビルドしてECRにアップロードし、Webコンソールでデプロイ までできる。ロールバックはサービスのリビジョン変更で簡単。 • デプロイ時に不具合があっても、自動的にロールバックされるので安心 (サーキットブレーカー機能)。 21
ECSを採用してよかったこと(2) 2023/6/30 Kazunori Inaba 【アプリ開発担当者の声】 • 環境変数を1ファイルにまとめて切り分けられる。 • コンテナのビルドと環境変数の設定変更を別々に行える。 •
ログ出力を振り分け、コンソールで検索できるので、エラーの原因究明 が早くなった。 ↑「ECSがよかった」というよりは「これを機にコンテナ化、ログ精査 に取り組んだ」ことによるメリットが大きい。 運用のメリットはこれから実感できる? 22
まとめ 2023/6/30 Kazunori Inaba • ECS on Fargate構築時の課題と解決策、ECSを採用してよかったこと についてお話しました。 •
アプリケーションのコンテナ化とECS構築、最初は大変かもしれない けど、一度やってみれば慣れるはず。 • インターネット上の情報も多い。 一度トライしてみては? 23