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
55
ゼルダの伝説とスクーバダイビングの共通点に関する考察 / 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
76
あれから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
つくって納得、つかって実感! 大規模言語モデルことはじめ ver2.0
recruitengineers
PRO
4
1.6k
[ChatGPT Work LT]事務作業が苦手な人のための バックオフィスの「半」自動化
chimaki_iot
0
280
モバイルアプリ開発概論2026
recruitengineers
PRO
5
580
QAエンジニア起点で進める、SmartHRにおける信頼性向上について
kaomi_wombat
1
140
FDEの心得
noriakioji
4
5.2k
【CEDEC2026】『GRANBLUE FANTASY: Relink - Endless Ragnarok』のバトル制作事例 ~最高のキャラゲーを目指して~
cygames
PRO
0
290
Model Studio CLI × Token Plan
maigo999
0
180
Bill One 開発エンジニア 紹介資料
sansan33
PRO
7
19k
SO-101×VLAによる3色キューブのピック&プレース
abeja
0
200
まちスペース®とデジタルツインと「まちづくり」
hiro_ogi
0
110
制約理論(ToC)入門 2026版
recruitengineers
PRO
8
2.2k
[しろおび夏祭り2026] チャットするAIから、作業するAIへ - 使われ方の変化と、その裏側で起きていること
kk0n
0
1.7k
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
430
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
280
Optimising Largest Contentful Paint
csswizardry
37
3.9k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
HDC tutorial
michielstock
2
790
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.3k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
350
Thoughts on Productivity
jonyablonski
76
5.3k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
We Are The Robots
honzajavorek
0
300
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