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
第6回 AWSとGitHub勉強会 - AWS ECS Fargate環境の構築 -
Search
荻原利雄
September 18, 2023
Programming
1.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
第6回 AWSとGitHub勉強会 - AWS ECS Fargate環境の構築 -
荻原利雄
September 18, 2023
More Decks by 荻原利雄
See All by 荻原利雄
先取りMaven4 ~16年ぶりのメジャーアップデート、その進化とは?~
ogiwarat
0
240
実践ArchUnit ~実例による検証パターンの紹介~
ogiwarat
2
1.5k
Spring Frameworkの新標準!? ~ RestClientとHTTPインターフェース入門 ~
ogiwarat
4
3k
Spring Boot vs MicroProfile ~クラウドネイティブにおけるフレームワークの比較と選択~
ogiwarat
2
2.6k
第1回 AWSとGitHub勉強会 - キックオフ -
ogiwarat
0
1.1k
第2回 AWSとGitHub勉強会 - CodespacesとHelidonの利用 -
ogiwarat
0
1.2k
第3回 AWSとGitHub勉強会 - GitHub Actionsを使ったCI環境の構築 -
ogiwarat
0
1.2k
第4回 AWSとGitHub勉強会 - GitHub Actionsを使ったCD環境の構築 -
ogiwarat
0
1.2k
第5回 AWSとGitHub勉強会 - AWS EC2環境の構築 -
ogiwarat
0
1.1k
Other Decks in Programming
See All in Programming
Claude Team Plan導入・ガイド
tk3fftk
0
250
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
240
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
1
120
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
170
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
570
テーブルをDELETEした
yuzneri
0
130
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
210
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
550
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
290
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
530
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
810
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
650
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
200
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
210
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
320
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
119
120k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
240
Java REST API Framework Comparison - PWX 2021
mraible
34
9.6k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Documentation Writing (for coders)
carmenintech
77
5.4k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
230
Transcript
AWSとGitHubを使ってみよう勉強会 ~ 第6回 AWS ECS Fargate環境の構築 ~ 株式会社 豆蔵 ビジネスソリューション事業部
updated:2023/9/18
本日の内容 • 前回の課題の解説(60分) ※「前回の課題の回答」は解説の中で一緒に説明します 2 画面キャプチャやコマンド操作等はGitHubのssi- mz-studygroupユーザで行った例となります。キャ プチャやコマンド等の該当部分は自分のユーザIDに 読み替えてください ・ssi:simple
server infra ・mz:mamezou
3 前回の課題の解説 ・サンプルアプリの設定による動作変更 ・課題の全体像とECS Fargateとは
Step1. REST APIで返す値を環境変数で指定できるようにサンプル アプリを修正する • 変更内容 • 環境変数CONFIG_VALの設定が • ある場合は、その設定値をREST
APIで返す • ない場合は、デフォルト値として“Hello" • 変更方法 • MicroProfile Configを使って設定ファイルの設定値を環境変数で上書きできるようにする • MicroProfile Configについては以下を参照 • https://developer.mamezou-tech.com/msa/mp/cntrn06-mp-config/ • ご自身でやってもらう方がいいと思いいますがMicroProfileは目的外なので、ひな形リポジトリに回答例 をアップしています • src/main/java/sample/HelloResource.java(変更) • src/main/resources/META-INF/microprofile-config.properties(追加) • src/test/java/sample/HelloResourceTest(変更) 4 再掲
対応後のサンプルアプリ 5 import org.eclipse.microprofile.config.inject.ConfigProperty; … @ApplicationScoped @Path("hello") public class HelloResource
{ @Inject @ConfigProperty(name = "config.val") private String configValue; @Produces(MediaType.TEXT_PLAIN) public String hello() { return configValue; } } config.val=Hello ・/META-INF/microprofile-config.properties ・環境変数 CONFIG_VAL=Chanaged override injection • 同じキーが設定されている場合、優先度が高い設 定源が優先される • 環境変数は英字は小文字、記号は.(ドット)に置 換した変数としても評価される MicroProfile Configの機能を利用 設定源 優先度 システムプロパティ 400 環境変数 300 /META-INF/microprofile-config.properties 100 config_ordinalが設定されている設定源 config_ordinalの値 ※config_ordinalは任意の設定源に設定可能
サンプルアプリの設定の上書き実行 6 # 最新のコンテナイメージの取得 sudo docker pull ghcr.io/[自分のGitHubユーザ名]/hello-app:latest # コンテナの起動
sudo docker run -d --rm --name hello-app -p 7001:7001 ghcr.io/[自分のGitHubユーザ名]/hello-app:latest # 起動ログの確認 sudo docker logs hello-app # レスポンスの確認 curl localhost:7001/api/hello > Helllo # コンテナの起動 sudo docker run -d --rm --name hello-app -p 7001:7001 -e CONFIG_VAL=Changed ghcr.io/[自分のGitHubユーザ名]/hello- app:latest # 起動ログの確認 sudo docker logs hello-app # レスポンスの確認 curl localhost:7001/api/hello > Changed ※GitHub Actionsでサンプルアプリをコンテナイメージにビルドしてコンテナレジストリにpushした後の操作 ▪ デフォルト設定でのコンテナ起動 ▪ 設定を変更してコンテナ起動
latestタグのpullは意味あるの? 7 # 最新のコンテナイメージの取得 sudo docker pull ghcr.io/[自分のGitHubユーザ名]/hello-app:latest # コンテナの起動
sudo docker run -d --rm --name hello-app -p 7001:7001 ghcr.io/[自分のGitHubユーザ名]/hello-app:latest # 起動ログの確認 sudo docker logs hello-app # レスポンスの確認 curl localhost:7001/api/hello > Helllo # コンテナの起動 sudo docker run -d --rm --name hello-app -p 7001:7001 -e CONFIG_VAL=Changed ghcr.io/[自分のGitHubユーザ名]/hello- app:latest # 起動ログの確認 sudo docker logs hello-app # レスポンスの確認 curl localhost:7001/api/hello > Changed ▪ デフォルト設定でのコンテナ起動 ▪ 設定を変更してコンテナ起動 docker runで一緒にpull してくれるのにわざわざpullす る必要あるの? こっちではなんでdocker pullしてないの?
latestタグが更新されない理由 8 さっきの答えは ➢ docker pullはリモートリポジトリを常に見に行くがdocker runはローカルリポジトリに該当イメージがないときだけしか リモートリポジトリは見に行かない ➢ よってdocker
runでローカルリポジトリにlatestのイメージがある場合、latestが更新されない latestタグを使うとより深刻な問題が 起きる可能性があります。それはなんで しょうか?
latestタグの問題(あまり使っちゃダメ) 9 latestタグの対象は移動する。なので ➢ 断面が不定になる • kubernetesやECSなどのコンテナオーケストレーションが持つ指定した断面に環境を戻すrollbackができなくな る ➢ 異なるバージョンが混じる
➢ コンテナオーケストレーションでオートスケールやオートヒーリングされたときのlatestは既にデプロイされているコンテ ナイメージと異なっている可能性がある ➢ これによりクラスタを構成するコンテナインスタンスごとに挙動が変わってしまう恐れがある サンプルではコンテナイメージをピンポイントで指定できるようにタイムスタンプのタグをつけている dockerイメージをリポジトリ管理する際のタグ戦略は非常に重要となる (他のタグ戦略としては通番を振ったりコミットハッシュを使ったりするのが典型)
典型的なJakartaEEフルスタックなWebアプリ JSF(+CDI) CDI JPA(+CDI) コンテナで環境変数の利用は定石- MicroProfile Config 登場背景 • JakartaEEには設定ファイルに対する共通的な仕様が定義されてい
ない • web.xmlやbeans.xml, persistence.xmlなど仕様ごとに必要 な設定ファイルが存在する(徐々にアノテーションでも定義できるよう になってはきてはいる) • アプリケーション全体レベルでの設定の見通しが悪く、設定漏れや配 置漏れも起きやすくハッキリいって不便(Springの application.ymlが裏山) 10 Configに対する2つのモチベーション 多すぎる設定ファイル CloudNativeへの追従 • マイクロサービスアーキテクチャのbest practiceとして知られるThe Twelve-Factor Appの“Ⅲ 設定”では「設定を環境変数に格納 する」ことを推奨している • これまでJakartaEEの仕様でこれを実現できるものはなかった (SpringBootでは普通にできるけど) web.xml persistence.xml beans.xml orm.xml presentation faces-config.xml business beans.xml integration beans.xml 多すぎ、散らばりすぎ、勘弁して・・ 引用:Twelve-Factor Appを噛み砕いてみた - Qiita @supreme0110 ✓ 設定はコードや設定ファイルに含めず、環境変数で設定するようにし ましょう。 ✓ なぜならコードに含めてしまうと環境ごとにビルドが必要になり、設定 ファイルの場合は環境ごとにファイルが必要となりスケールしにくくなる ためです。 ✓ 環境変数であればOSが異なっても取得方法は基本的に統一でき ます -Ⅲ 設定-
11 前回の課題の解説 ・サンプルアプリの設定による動作変更 ・課題の全体像とECS Fargateとは
これでまでの課題でやってきた全体像 – 振り返り ✓ コンテナの実行環境がEC2からECSに替わっただけ ✓ だがしかし、EC2で行っていたDocker環境の構築やコンテナの起動停止の運用周りは一切不要に 全体として変わっ たのはここだけ ECSが勝手
に取ってきてく れる
ECS Fargateとは 13 Amazon Elastic Container Service (Amazon ECS) は、コンテナ化されたアプリケーションのデプロイ、
管理、スケーリングを容易にするフルマネージドコンテナ オーケストレーションサービスです。※AWS公式の完全 引用 <ECSとは> コントロールプレーン: 必要なリソースを決定し、必要な場所 で実行・管理する基盤 データプレーン: リソースを指示されたとおりに実行す る基盤 AWS Fargate はAmazon ECSで使用できるテクノロジーであり、サーバーやAmazon EC2インスタンスのクラスターを管理することなくコンテナを実行できます。Fargate を使用 すると、コンテナを実行するために仮想マシンのクラスターをプロビジョニング、設定、スケール する必要はありません。 これにより、サーバータイプの選択、クラスターをスケールするタイミングの決定、クラスターの パッキングの最適化を行う必要がなくなります。 ※AWS公式の完全引用 ⇒要はECSのデータプレーンに使えるサーバレス環境。EKSでも利用可 <Fargateとは> データプレーンにEC2を使った パターン
クラスター/サービス/タスク 14 ▪クラスター • ECSリソースを管理するための論理グループ (なだけ) ▪サービス • ECS(コントロールプレーン)の実体 •
タスクを監視しサービスで定義された状態を維 持するようにタスクのローリングアップデートや オートスケール、オートヒーリングなど行う ▪タスク定義 • なにを(コンテナイメージ)どのように(割り 当てマシンリースや環境変数など)動作させ るかを定義したもの • 定義は世代ごとに管理される ▪タスク • タスク定義をもとにサービスにより実体化され たもの(サービスにより割り当てられた実行環 境でコンテナが実行されている)
15 実際にやってみる
クラウド環境ではログの出力先は標準出力が基本 16 ✓ファイル出力ではなく標準出力に出力させ、ツールで1箇所に集約するようにしましょう。 ✓なぜならスケールイン時に仮想サーバごと消える可能性があることと、環境(OS、IDE、ロー カル/本番)が異なっても標準出力は常に行えるためです。 -Ⅺ.ログ- ⇒そもそもサーバーレスでは基本的にローカルディスクは使えない 引用:Twelve-Factor Appを噛み砕いてみた -
Qiita @supreme0110
17 おしまい。お疲れまでした