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
84
あれから10年、これから10年 / Decade with JAWS-UG Okinawa and Next Step
knishijima
1
180
ボーリングのピンは何を考えているのか? 〜コミュニティをうまくドライブする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.6k
完全キャッシュレス・ウォークスルー体験が可能な 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
ScotSecure West 2026 - Glasgow
raybugg
0
200
地方移住と都心キャリアの両立は「金・時間・人」のリソースをフル活用すれば実現できる!〜Snowflake女子会 vol.8
snowwmn0824
0
130
VS Code × GitHub Copilot での Fabric 開発
ryomaru0825
1
130
Lambda MicroVMsが分からなすぎたので使い所を1から考えてみた
tsukuboshi
1
140
【データ横丁主催】AI Agentがコンテキストを使って仕事をした後、何が残るのか― 組織の経験を次の判断に引き継ぐ「Agent Memory」
shisyu_gaku
2
180
AgentCore Runtime上にAgentic Coding基盤を構築・展開する際の設計ポイントと限界点 / Design considerations and limitations when building an agentic coding platform on AgentCore Runtime
har1101
7
810
企業の現実世界をグラフで写し取る
sansantech
PRO
0
170
人にやさしく、AIにやさしく、書き手を選ばないIaCのガードレール再考 / Rethinking IaC Guardrails for Humans and AI Alike
kohbis
5
1.6k
「ピッケル本」日本語版は4.0(第6版)が出版されるべき / pickaxe4-nagoyark05
kakutani
2
310
Coil3を内部実装から読み解く~キャッシュ戦略とAVIF画像の描画〜/nikkei-tech-talk50
nikkei_engineer_recruiting
0
120
手を動かして実感する、Kiro が変える開発体験
inariku
0
410
LT:「このままでいいのかな?」から一歩踏み出した私のデータキャリア選択〜社会人3年目に上京を決意したリアル〜Snowflake女子会 vol.8
snowwmn0824
0
110
Featured
See All Featured
From π to Pie charts
rasagy
1
380
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Agile that works and the tools we love
rasmusluckow
331
22k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
490
Crafting Experiences
bethany
1
360
Music & Morning Musume
bryan
48
7.4k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
250
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
540
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
750
Amusing Abliteration
ianozsvald
1
320
The Mindset for Success: Future Career Progression
greggifford
PRO
0
520
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