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
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
260
ただただ素敵オフィスを見たい気持ちを隠したお祝いLT! / A celebration that hides the feeling of simply wanting to see a nice office
knishijima
0
56
ゼルダの伝説とスクーバダイビングの共通点に関する考察 / A study of the similarities between The Legend of Zelda and scuba diving
knishijima
0
200
機能要望LT! (実はすでに出来てたらゴメンね) / Feature request to Stripe - JP_Stripes OKA Vol.7
knishijima
0
81
あれから10年、これから10年 / Decade with JAWS-UG Okinawa and Next Step
knishijima
1
170
ボーリングのピンは何を考えているのか? 〜コミュニティをうまくドライブするn個の方法〜 / How to make a better community
knishijima
0
310
Afterハッカーズチャンプルー2019 / Hackers-champloo Unconference draft
knishijima
1
520
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
140
Other Decks in Technology
See All in Technology
データ界隈LT祭 第1回LT登壇
taromatsui_cccmkhd
1
1.3k
Geolonia の開発現場における AIの活用について
miya0001
0
100
AI時代の「技術的負債」の変質ー概念の終焉と再解釈、エージェントと共に向かう先
nwiizo
0
2.2k
おい、エージェントを使って終わらせろ
nwiizo
0
210
アクセスキーこわい やめかたと漏らさない工夫
sassssan68
1
160
Claude Code本って、 読む必要あるの?
oikon48
2
460
10分で知る最近のOmarchy
komagata
0
310
【技術的負債conf】事業成長に伴う技術的負債の説明責任とAIによるモニタリング、認知的負債について
i35_267
2
1.2k
MCPをつなげて作る組織横断のAIエージェント基盤(の開発工程)
tsubakimoto_s
0
130
Podは生きているのにGoだけが落ちる:GOGCとGOMEMLIMITで追うInvisible OOM Killの謎
tkc66buzz
1
710
Deployment の 先にある AI Agent 基盤 - kagent vNext、Agent Substrate、Hermes から読み解く Agent Runtime の現在地 / k8s-matsuri-2-ai-agent-platform-amsy810
masayaaoyama
3
540
Omarchy Quattro の日本語設定周り
simosako
2
180
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.8k
Scaling GitHub
holman
464
140k
It's Worth the Effort
3n
188
29k
My Coaching Mixtape
mlcsv
0
310
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
390
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
430
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.9k
Leo the Paperboy
mayatellez
9
2.3k
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