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
【CEDEC2026】『ウマ娘 プリティーダービー』 英語版のキャラクターの方言や口調をローカライズするための創造的アプローチ
cygames
PRO
2
1.1k
会社紹介資料 / Sansan Company Profile
sansan33
PRO
24
430k
FPGAが実現する遠方宇宙の高空間分解能天体撮影 -大型地上望遠鏡の視力を補正する「補償光学」とは?-
komei_mt
0
270
AIコーディングの次。コードレビューと理解負荷を解消して組織の開発生産性を高める
moongift
PRO
2
2.6k
ラジオの科学
frievea
0
330
Data Hubグループ 紹介資料
sansan33
PRO
0
3.2k
Bits Agent Builder の⼊⾨と活⽤事例
nulabinc
PRO
0
160
強化学習「理論」入門
enakai00
3
3.6k
AWS ネットワーク構築でハマった(ハマりかけた) 5選とそこから得た教訓
nagisa53
4
240
Flutterをカメラで動かしたかった話
sony
1
140
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
4.9k
攻撃と防御で学ぶAI時代のプロダクトセキュリティ演習
recruitengineers
PRO
9
2.9k
Featured
See All Featured
Paper Plane (Part 1)
katiecoart
PRO
1
10k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
390
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
200
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
260
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
530
Speed Design
sergeychernyshev
33
2k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
490
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
300
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
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