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
JAWS-UG沖縄 AWS Fargateハンズオン / JAWS-UG Okinawa 20...
Search
Koichiro Nishijima
October 06, 2018
Technology
150
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JAWS-UG沖縄 AWS Fargateハンズオン / JAWS-UG Okinawa 201810 AWS Fargate Hands-on
https://jaws-ug-okinawa.doorkeeper.jp/events/80071
の資料です。
Koichiro Nishijima
October 06, 2018
More Decks by Koichiro Nishijima
See All by Koichiro Nishijima
テクニカルサポートを支援AIボットで効率化する話 / A story about improving the efficiency of technical support with AI bots
knishijima
0
250
ただただ素敵オフィスを見たい気持ちを隠したお祝いLT! / A celebration that hides the feeling of simply wanting to see a nice office
knishijima
0
50
ゼルダの伝説とスクーバダイビングの共通点に関する考察 / A study of the similarities between The Legend of Zelda and scuba diving
knishijima
0
180
機能要望LT! (実はすでに出来てたらゴメンね) / Feature request to Stripe - JP_Stripes OKA Vol.7
knishijima
0
75
あれから10年、これから10年 / Decade with JAWS-UG Okinawa and Next Step
knishijima
1
170
ボーリングのピンは何を考えているのか? 〜コミュニティをうまくドライブするn個の方法〜 / How to make a better community
knishijima
0
300
Afterハッカーズチャンプルー2019 / Hackers-champloo Unconference draft
knishijima
1
510
SIerで使われるサーバレスの実際 / System integrator with Serverless - Serverless Meetup Ryukyu #1
knishijima
2
1.5k
完全キャッシュレス・ウォークスルー体験が可能な Developers.IO CAFE に学ぶ、キャッシュレス最前線 / Developers.IO Cafe report from technical angles for JP_Stripes_OKA4
knishijima
0
130
Other Decks in Technology
See All in Technology
[2026-07-15] AI Ready なはずだったアーキテクチャと、見えてきた課題・次に目指す状態
wxyzzz
9
3.9k
Foxgloveについて 実際にExtensionを開発して公開するまでの話 / About Foxglove: The Story of Developing and Releasing an Extension
ry0_ka
0
280
ファミコンでPHPを動かす / PHP on the Famicom
tomzoh
2
220
2年前に削除したPHPクラスが、 ある日突然決済をエラーにした
ykagano
1
170
CSに"SLO"は要らない、経営層に"99.9%"は伝わらない - SREを全社に"翻訳"する3原則
cscengineer
PRO
1
4.7k
Amplify Gen2でbackend.tsにCDKを定義する/しない事によるCDKの挙動の違いとユースケース
smt7174
1
310
DMM.com 購入改善推進チーム におけるCodeRabbitを用いた レビューフロー改善の一例
ysknsid25
2
650
AI Agent SaaS を支える自社仮想化基盤への挑戦と実運用 / ai-agent-saas-virtualization
flatt_security
3
4k
AICoEでAIネイティブ組織への進化
yukiogawa
0
180
生成AI×AWS CDK×AWS FISで"振り返れる"ミニGameDayをつくろう
yoshimi0227
1
250
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
1
3.1k
非定型なドキュメントを効率よくリファクタする 〜えぇ!?仕様書27本の移行が1日で終わったって!?〜
subroh0508
2
510
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
260
The Mindset for Success: Future Career Progression
greggifford
PRO
0
410
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.6k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
650
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.4k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
360
Making Projects Easy
brettharned
120
6.7k
The Language of Interfaces
destraynor
162
27k
Speed Design
sergeychernyshev
33
1.9k
Transcript
JAWS-UG 沖縄 AWS Fargate ハンズオン 2018 年9 ⽉29 ⽇ @k_nishijima
@k_nishijima 1
今回のハンズオンの流れ ざっくり以下の流れで⾏きます ローカルでWeb アプリを作る それをコンテナ環境で動くようにする 更にそれをFargate にデプロイする それでは⾏ってみましょう! @k_nishijima 2
事前準備 必要なもの AWS アカウント(持ってない⼈! ローカルで動くdocker Node.js 環境(サンプルWeb アプリを動かすため:実装は何でも良い です) @k_nishijima
3
参考資料(というか元ネタ) こちらのサイトを参考にさせていただきました! ありがとうございますm(_ _)m https://qiita.com/IgnorantCoder/items/d4f16b1aadd1c03c0e26 @k_nishijima 4
資料置き場 資料はGitHub に上げてあります。このPDF はこれ。 https://github.com/k-nishijima/fargate-handson-jawsug-okinawa- 201809/blob/master/article/handson.md PDF は多分この辺に上がります(最近slideshare がおかしいから多分sd かな。。。)
https://www.slideshare.net/KoichiroNishijima/presentations https://speakerdeck.com/knishijima @k_nishijima 5
その1 :ローカルで動くWeb アプリ package.json 作成 package.json を以下で作成(参考資料のままだとカンマがあって動かな かったので注意です(^_^;) { "private":
true } @k_nishijima 6
その1 :ローカルで動くWeb アプリ 依存関係追加 利⽤パッケージとしてexpress とmorgan(logger です) を追加 $ npm
install --save express morgan @k_nishijima 7
その1 :ローカルで動くWeb アプリ Web アプリ本体 server.js を作成(はみ出すのでここに張ってます) @k_nishijima 8
その1 :ローカルで動くWeb アプリ Web アプリ実⾏ $ node ./server.js Web ブラウザで
http://localhost:3000 にアクセスしてみてください。 @k_nishijima 9
その2 :コンテナで動くようにする 以下のような Docker le を作成 FROM node:alpine WORKDIR /tmp
ADD package.json ./ ADD server.js ./ RUN npm install EXPOSE 3000 EXPOSE 3001 CMD ["node", "./server.js"] @k_nishijima 10
その2 :コンテナで動くようにする ビルドして、、、 $ sudo docker build -t handson/server.js .
起動(ローカルのポート3000 番とコンテナの3000 番を接続) $ sudo docker run -p 3000:3000 -d handson/server.js またまた、Web ブラウザで http://localhost:3000 にアクセスしてみて ください。 @k_nishijima 11
その2 :コンテナで動くようにする 稼働中のコンテナの確認 $ sudo docker ps CONTAINER ID IMAGE
COMMAND CREATED STAT 60857bcc1f00 handson/server.js "node ./server.js" About a minute ago Up A 停⽌ $ sudo docker kill 60857bcc1f00 @k_nishijima 12
ここまではOK? @k_nishijima 13
その3 :Fargate にデプロイ AWS 側の設定(ざっくり3 ステップ) 1. IAM の設定 ECR
へのリポジトリへのpush 権限を作る ECS でのタスク実⾏権限を作る 2. ECR の設定 Registory の作成 イメージ作成とプッシュ @k_nishijima 14
その3 :Fargate にデプロイ 3. ECS の設定 Task de nition の作成
Cluster の作成 Service の作成 @k_nishijima 15
IAM の設定 https://qiita.com/IgnorantCoder/items/d4f16b1aadd1c03c0e26#ia m の設定 を参考にしましょう!(⼿抜きでスマンす(^_^;) やっていることは、以下のとおりです。そこで追加したアカウントを AWS CLI を使うようにしてください。
ECR にpush 権限を持つグループを作って そこにユーザーを追加(or ⾃分のユーザーをそこに追加) ESC 実⾏⽤のロールを作成 @k_nishijima 16
ECR の設定 まずリポジトリを作成します。 Services からElastic Container Service を選んだら、画⾯左のリポジト リをクリックします。あ、 東京リージョン
が選択されていることを忘 れずに確認! リポジトリ名は「jawsug/handson 」などと区別しやすいものを 作成したあとの説明のとおりに作業します、、、が、ハマると思いま すので以下詳しく書きます @k_nishijima 17
ECR の設定 1. レジストリに対して Docker クライアントを認証するために使⽤する ログインコマンドを取得します。 は、以下のように--profile でプロファイル名を指定して実⾏してくだ さい。docker
の設定にもよると思いますが、linux だとsudo 必要です。 sudo $(aws ecr get-login --no-include-email --region ap-northeast-1 --profile default_ @k_nishijima 18
ECR の設定 3. 以下のコマンドを使⽤して、Docker イメージを構築します。以下 略〜 先ほどと別のタグ名ですが、ビルドします(前のイメージと同じ状態で あれば、すぐ終わると思います)。 $ sudo
docker build -t jawsug/handson . @k_nishijima 19
ECR の設定 4. 構築が完了したら、このリポジトリにイメージをプッシュできるよ うに、イメージにタグを付けます: sudo docker tag jawsug/handson:latest 539559780906.dkr.ecr.ap-northeast-1.amazonaws
@k_nishijima 20
ECR の設定 5. 以下のコマンドを実⾏して、新しく作成した AWS リポジトリにこの イメージをプッシュします: 繰り返しになりますが、linux 環境の場合sudo が必要な場合がありま
す。 $ sudo docker push 539559780906.dkr.ecr.ap-northeast-1.amazonaws.com/jawsug/handson:la push が終わったら「完了」をクリックしましょう。 画⾯にプッシュしたイメージが表⽰されるはずです! @k_nishijima 21
あと⼀息! ここまでで Docker イメージを作って ECR に登録 までが出来たことになります。 最後に、登録したイメージをECS で動かします。 @k_nishijima
22
ECS の設定 Amazon ECS のメニューから タスク定義をして クラスターを作ります (メニューの並びと逆順なので注意(^_^;) @k_nishijima 23
ECS の設定:タスク定義 もちろんタスク定義はFargate で作成してください タスク定義名(何でも良いのですが)は「handson-task 」などとし ておいてください タスクロールは今回は「なし」で良いです タスクの実⾏IAM ロールは、先程IAM
で作成した ecsTaskExecutionRole を選択します。 タスクサイズは、メモリもCPU も最⼩を選んでおいてください(勿 論⼤きければ⼤きいほどお⾦がかかります) @k_nishijima 24
ECS の設定:コンテナの定義 コンテナ名は適当に「handson 」など イメージは先程push した「539559780906.dkr.ecr.ap-northeast- 1.amazonaws.com/jawsug/handson:latest 」 などという感じで指定 します
ポートマッピングで3000:TCP を設定するのをお忘れなく 最後に「作成」をクリックして完了です。 @k_nishijima 25
ECS の設定:クラスター作成 Amazon ECS のメニューからクラスターを選択、「クラスターの作 成」をクリック 「ネットワーキングのみ」を選択して、名前をつけます。 VPC は専⽤に作っても良いです(作成しない場合、あとで既存の VPC
から選ぶことになります) 「表⽰」をクリックして、そのままサービスを作成してしまいまし ょう @k_nishijima 26
ECS の設定:サービスの設定 サービス名は適当に「handson-service 」などと設定 タスクの数は「1 」で 次に進んで、ネットワーク構成はVPC の構成次第、、、 パブリック IP
の⾃動割り当てを「ENABLE 」にしておけば、すぐに アクセスできるパブリックIP を割り当ててくれる 「サービスの検出の統合の有効化」のチェックを 外して おく AutoScaling も利⽤しないように注意 最後に「サービスの作成」ですべてが作成される。 @k_nishijima 27
これでクラスタが起動した! クラスター : handson の「タスク」タブのタスクをクリックすると、 起動中のタスクのネットワークの状態などが確認できる Pubilc IP にアクセスすれば、動作確認可能、、、なんだけど、ここ ではセキュリティグループの設定が⾜りていないので、追加する必
要あり ENI のID をクリック、セキュリティグループをクリックして、インバ ウンドルールのカスタムTCP ルールとしてポート3000 を有効に @k_nishijima 28
動作確認 セキュリティグループでポート3000 を許可したあと、Public IP:3000 にアクセスすると・・・ 実運⽤では必ず前段にALB を置くので、↑ の設定は要らない ログは クラスター
> handson > タスク:ID のコンテナ詳細 -> ログド ライバー で確認可能です @k_nishijima 29
後⽚付け 「クラスターの削除」を実⾏ 時々1 回で削除されないときがある? -> その場合再度削除すればOK @k_nishijima 30
おまけ:コードを修正してコンテナを更 新してみよう! build し直して、タグ付けして、push し直して、最後に update-service で更新できるはずです! $ docker build
-t your-alias/sample-app . $ docker tag your-alias/sample-app:latest xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaw $ docker push xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/your-alias/sample $ aws ecs update-service --cluster sample-app-cluster --service corporate-sample @k_nishijima 31