SlideShare a Scribd company logo
1 of 27
Download to read offline
ビットバンク株式会社
Deploy TypeScript with CodePipeline in Fargate
shogo ishikawa / bitbank, Inc
東京Node学園祭 Day2-LT
2018/11/24
Copyright © bitbank, inc.
自己紹介
ビットバンク株式会社
AWSエンジニア
shogo ishikawa
CodePipelineを用いたTypeScriptなどのデプロイフローの構築を担当
インフラ領域を専業としているが、LambdaでNode.jsを使ったりすることもあ
る。
Copyright © bitbank, inc.
bitbankのJavascriptへの取り組み
# TypeScriptの全面採用により、
開発メンバーのダイナミックなアサインが可能
Copyright © bitbank, inc.
今回話すこと
● TypeScriptアプリケーションのデプロイ方法の紹介
● 細かいTips
● やってみてよかったこと・つらみ
Copyright © bitbank, inc.
Fargateとは
● EC2(サーバ)を気にしなくてよい、コンテナマネージド・サービス
● リソースベースの課金(CPU / MEM)
● 画面ポチポチで簡単にコンテナを構築できる
Copyright © bitbank, inc.
CodePipelineとは
● 様々なAWSサービスと連携可能
● CI/CDで、AWSサービスにアプリケーションデプロイの自動化が可能
Copyright © bitbank, inc.
CodePipelineとは
● 以下のサービスと連携可能
Sorurce Build Deploy
● CodeCommit
● S3
● GitHub
※ それ以外で管理している場
合は、CodeCommitかS3を経
由させれば良い。
● CodeBuild
● CodeDeploy
● ECS/Fargate
● CloudFormation
● ElasticBeastalk
Copyright © bitbank, inc.
まず手動でデプロイした例を考えてみましょう
Copyright © bitbank, inc.
手動デプロイの例
● TypeScriptアプリケーションをFargateにデプロイする場合の例
Copyright © bitbank, inc.
手動デプロイの例
● TypeScriptアプリケーションをFargateにデプロイする場合の例
● 以下のような作業が必要
○ TypeScriptをテスト
○ TypeScriptをビルド
○ Dockerイメージをビルド
○ Docker レジストリにログイン
○ Docker レジストリにPush
○ コンテナデプロイ作業
Copyright © bitbank, inc.
そもそも人の手でこれやるのちょっとしんどいですよね?
Copyright © bitbank, inc.
サーバレスなCI/CD導入の背景
● 開発と本番デプロイを自動化したい
● ソースコードテストを確実にしたい
● レビューを通過したものだけをデプロイしたい
● デプロイサーバの保守をしたくない
○ パッケージのバージョンアップ
○ 脆弱性対応
○ クラウドサービス側のメンテナンスに伴う再起動
○ OSのサポート終了 ...
Copyright © bitbank, inc.
なぜCodePipelineなのか
● 各AWSサービスと連携できること
● デプロイを自動化できる
● サーバレスであること
○ OSレベルでの保守が不要 = インフラエンジニアがいない場合でもなんとかなる。
Copyright © bitbank, inc.
CodePipelineを用いたデプロイ例
①ソースコード変更検知
②TypeScript Build & Docker push
④Deploy
③Docker push
⑤Docker Pull
アプリケーション起動
CodeCommitへPush
Copyright © bitbank, inc.
CodeCommit:ソースコード変更検知
● CodeCommitにPushを検知
● CodePipelineが起動
②TypeScript Build
④Deploy
③Docker push
⑤Docker Pull
アプリケーション起動
CodeCommitへPush
①ソースコード変更検知
Copyright © bitbank, inc.
CodeBuild:ビルド
● TypeScriptのビルド
● Dockerイメージをビルド&プッシュ
①ソースコード変更検知
②TypeScript Build
④Deploy
③Docker push
⑤Docker Pull
アプリケーション起動
①ソースコード変更検知
CodeCommitへPush
Copyright © bitbank, inc.
CodeBuild:Yamlファイルで記述可能
①ソースコード変更検知
②TypeScript Build
④Deploy
③Docker push
⑤Docker Pull
アプリケーション起動
version: 0.2
phases:
pre_build:
commands:
- $(aws ecr get-login --no-include-email)
build:
commands:
- npm install
- npm run build
- docker build -t ${REPOSITORY_URI}":latest .
post_build:
commands:
- docker push "${REPOSITORY_URI}":latest
artifacts:
files: imagedefinitions.json
CodeCommitへPush
Copyright © bitbank, inc.
CodeBuild: スペックは高性能
● 最大でvCpu:8G / Mem:15G のインスタンスタイプがあるので、CPUに負荷をかけるTypescripのBuildも可
能
Copyright © bitbank, inc.
Fargate:デプロイ
● TypeScriptのビルド
● DockerイメージをPush
①ソースコード変更検知
②TypeScript Build
④Deploy
③Docker push
⑤Docker Pull
アプリケーション起動
Copyright © bitbank, inc.
Tips:機密情報の管理方法
● KMSで暗号化して保管
● アプリケーションが必要とする際に、復号
Copyright © bitbank, inc.
Tips:Dockerイメージをカスタマイズして高速化
● Dockerイメージの容量を可能な限り減らす
○ DockerイメージをDockerレジストリにPush・Pullする時間を短縮
○ アプリケーションをオートスケールさせる際の時間を短縮
○ 最小限のアプリケーションしか無いため、セキュリティ向上
Copyright © bitbank, inc.
Tips:Dockerイメージをカスタマイズして高速化
● Alpine LinuxのDockerイメージを採用
● デフォルトのイメージの容量が圧倒的に少ない
○ node:10.13.0     →  674MB
○ node:10.13.0-alpine →  70.2MB
● 約10倍小さい
● パッケージのインストールが早い
つまりDockerイメージ容量は軽い方がいい
Copyright © bitbank, inc.
Tips:CodePipelineのデプロイフローをIaCで効率化
● CloudFormation(AWSのIaC)を採用して
● CodePipelineの一撃構築を実現
● シェルを実行するのみで、デプロイフローが構築されるようになった
Copyright © bitbank, inc.
やってみて良かったこと😊
● デプロイ方法が共通化された
● レビューを通過したコードのみがデプロイされるようになったので、 安全になった
● リポジトリにPushすればデプロイされるので、デプロイが 楽になった
● CodePipelineを「アプリケーション開発のフェーズ」から導入することで、 高頻度なデプロイが可能になった
● サーバレスで構築したので、 運用負担は無い
● アプリケーション開発に集中できるようになった
Copyright © bitbank, inc.
つらみ😂
● リポジトリ数が増加してしまう。
● リポジトリのブランチにCodePipelineが紐づくため、リポジトリをパイプラインに合わせた管理方法となって
しまう。
○ モノリシックリポジトリはCodePipelineだと管理できない。
○ 細かいLambdaのFunctionを一つのリポジトリにまとめて置くことができない。
Copyright © bitbank, inc.
まとめ
● CodePipelineでデプロイフローを構築することで、デプロイを自動化できる。
● マネージド・サービスのみで、構築可能なので、サーバに対する 深い知見が不要で容易に構築できる。
○ インフラエンジニアがいなくても大丈夫?
● テスト段階から、デプロイフローを導入することで、開発スピードを向上できる。
Copyright © bitbank, inc.
以上

More Related Content

What's hot

持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜bitbank, Inc. Tokyo, Japan
 
TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介bitbank, Inc. Tokyo, Japan
 
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 bitbank, Inc. Tokyo, Japan
 
TypeScriptでライトニングネットワークを使ってみよう
TypeScriptでライトニングネットワークを使ってみようTypeScriptでライトニングネットワークを使ってみよう
TypeScriptでライトニングネットワークを使ってみようbitbank, Inc. Tokyo, Japan
 
bitbankフロントエンド開発について
bitbankフロントエンド開発についてbitbankフロントエンド開発について
bitbankフロントエンド開発についてKou Matsumoto
 
MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門torisoup
 
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例Naoya Kishimoto
 
K8s-icp-capsmalt-jjugccc2018spring
K8s-icp-capsmalt-jjugccc2018springK8s-icp-capsmalt-jjugccc2018spring
K8s-icp-capsmalt-jjugccc2018springcapsmalt
 
GraalVM Native Imageが見せた未来
GraalVM Native Imageが見せた未来GraalVM Native Imageが見せた未来
GraalVM Native Imageが見せた未来Rakuten Group, Inc.
 
GAE + Spannerで目指せ No (Uncomfortable) Ops
GAE + Spannerで目指せ No (Uncomfortable) OpsGAE + Spannerで目指せ No (Uncomfortable) Ops
GAE + Spannerで目指せ No (Uncomfortable) OpsMiniascape
 
20190604 Containerized MagicOnion on kubernetes with Observability with New R...
20190604 Containerized MagicOnion on kubernetes with Observability with New R...20190604 Containerized MagicOnion on kubernetes with Observability with New R...
20190604 Containerized MagicOnion on kubernetes with Observability with New R...Takayoshi Tanaka
 
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能Takuya Iwatsuka
 
Architecting on Alibaba Cloud - 超基礎編 -
Architecting on Alibaba Cloud - 超基礎編 -Architecting on Alibaba Cloud - 超基礎編 -
Architecting on Alibaba Cloud - 超基礎編 -真吾 吉田
 
サーバーレス・アーキテクチャ概要
サーバーレス・アーキテクチャ概要サーバーレス・アーキテクチャ概要
サーバーレス・アーキテクチャ概要真吾 吉田
 
Riotでサーバレスにした話
Riotでサーバレスにした話Riotでサーバレスにした話
Riotでサーバレスにした話Hiroyuki Hara
 
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告Takuya Iwatsuka
 
Japan Container Days: 「今こそKubernetes。最高の仕事道具で使いこなそう」by capsmalt
Japan Container Days: 「今こそKubernetes。最高の仕事道具で使いこなそう」by capsmaltJapan Container Days: 「今こそKubernetes。最高の仕事道具で使いこなそう」by capsmalt
Japan Container Days: 「今こそKubernetes。最高の仕事道具で使いこなそう」by capsmaltcapsmalt
 
cndjp: 「Microclimate」by capsmalt
cndjp: 「Microclimate」by capsmaltcndjp: 「Microclimate」by capsmalt
cndjp: 「Microclimate」by capsmaltcapsmalt
 
そろそろLambda(CI/CD編)
そろそろLambda(CI/CD編)そろそろLambda(CI/CD編)
そろそろLambda(CI/CD編)輝 子安
 

What's hot (20)

持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
 
TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介
 
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践
 
TypeScriptでライトニングネットワークを使ってみよう
TypeScriptでライトニングネットワークを使ってみようTypeScriptでライトニングネットワークを使ってみよう
TypeScriptでライトニングネットワークを使ってみよう
 
Ethereumのシャーディング概論
Ethereumのシャーディング概論Ethereumのシャーディング概論
Ethereumのシャーディング概論
 
bitbankフロントエンド開発について
bitbankフロントエンド開発についてbitbankフロントエンド開発について
bitbankフロントエンド開発について
 
MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門
 
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
 
K8s-icp-capsmalt-jjugccc2018spring
K8s-icp-capsmalt-jjugccc2018springK8s-icp-capsmalt-jjugccc2018spring
K8s-icp-capsmalt-jjugccc2018spring
 
GraalVM Native Imageが見せた未来
GraalVM Native Imageが見せた未来GraalVM Native Imageが見せた未来
GraalVM Native Imageが見せた未来
 
GAE + Spannerで目指せ No (Uncomfortable) Ops
GAE + Spannerで目指せ No (Uncomfortable) OpsGAE + Spannerで目指せ No (Uncomfortable) Ops
GAE + Spannerで目指せ No (Uncomfortable) Ops
 
20190604 Containerized MagicOnion on kubernetes with Observability with New R...
20190604 Containerized MagicOnion on kubernetes with Observability with New R...20190604 Containerized MagicOnion on kubernetes with Observability with New R...
20190604 Containerized MagicOnion on kubernetes with Observability with New R...
 
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
 
Architecting on Alibaba Cloud - 超基礎編 -
Architecting on Alibaba Cloud - 超基礎編 -Architecting on Alibaba Cloud - 超基礎編 -
Architecting on Alibaba Cloud - 超基礎編 -
 
サーバーレス・アーキテクチャ概要
サーバーレス・アーキテクチャ概要サーバーレス・アーキテクチャ概要
サーバーレス・アーキテクチャ概要
 
Riotでサーバレスにした話
Riotでサーバレスにした話Riotでサーバレスにした話
Riotでサーバレスにした話
 
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告
 
Japan Container Days: 「今こそKubernetes。最高の仕事道具で使いこなそう」by capsmalt
Japan Container Days: 「今こそKubernetes。最高の仕事道具で使いこなそう」by capsmaltJapan Container Days: 「今こそKubernetes。最高の仕事道具で使いこなそう」by capsmalt
Japan Container Days: 「今こそKubernetes。最高の仕事道具で使いこなそう」by capsmalt
 
cndjp: 「Microclimate」by capsmalt
cndjp: 「Microclimate」by capsmaltcndjp: 「Microclimate」by capsmalt
cndjp: 「Microclimate」by capsmalt
 
そろそろLambda(CI/CD編)
そろそろLambda(CI/CD編)そろそろLambda(CI/CD編)
そろそろLambda(CI/CD編)
 

Similar to Deploy TypeScript with CodePipeline in Fargate

Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!CData Software Japan
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発Yuta Matsumura
 
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用DeNA
 
2022_08_10 SaaS.tech #5業務システム開発でデザインとフロントエンドも妥協しない話
2022_08_10 SaaS.tech #5業務システム開発でデザインとフロントエンドも妥協しない話2022_08_10 SaaS.tech #5業務システム開発でデザインとフロントエンドも妥協しない話
2022_08_10 SaaS.tech #5業務システム開発でデザインとフロントエンドも妥協しない話Kazuki Murahama
 
オレ流クラウドデザイン
オレ流クラウドデザインオレ流クラウドデザイン
オレ流クラウドデザインAtsushi Kojima
 
初めてのWebプログラミング講座
初めてのWebプログラミング講座初めてのWebプログラミング講座
初めてのWebプログラミング講座DIVE INTO CODE Corp.
 
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏Daisuke Ikeda
 
[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonight
[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonight[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonight
[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonightAmazon Web Services Japan
 
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!史識 川原
 
マイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project Tyeマイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project TyeYuta Matsumura
 
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指してAkira Inoue
 
OpenStack Swiftとそのエコシステムの最新動向
OpenStack Swiftとそのエコシステムの最新動向OpenStack Swiftとそのエコシステムの最新動向
OpenStack Swiftとそのエコシステムの最新動向NTT Software Innovation Center
 
GitLab で実現する Ansible コードの管理
GitLab で実現する Ansible コードの管理GitLab で実現する Ansible コードの管理
GitLab で実現する Ansible コードの管理裕貴 荒井
 
マルチクラウドデータ連携Javaアプリケーションの作り方
マルチクラウドデータ連携Javaアプリケーションの作り方マルチクラウドデータ連携Javaアプリケーションの作り方
マルチクラウドデータ連携Javaアプリケーションの作り方CData Software Japan
 
Realm platform2019
Realm platform2019Realm platform2019
Realm platform2019昌桓 李
 
SpringOne Platform Replay -Pivotal Cloud Foundry-
SpringOne Platform Replay -Pivotal Cloud Foundry-SpringOne Platform Replay -Pivotal Cloud Foundry-
SpringOne Platform Replay -Pivotal Cloud Foundry-CASAREAL, Inc.
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しAkira Nagata
 
話題のNode-REDでIoTアプリを作ってみよう
話題のNode-REDでIoTアプリを作ってみよう話題のNode-REDでIoTアプリを作ってみよう
話題のNode-REDでIoTアプリを作ってみようKimihiko Kitase
 
.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組みKouji Matsui
 

Similar to Deploy TypeScript with CodePipeline in Fargate (20)

【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう
 
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
 
2022_08_10 SaaS.tech #5業務システム開発でデザインとフロントエンドも妥協しない話
2022_08_10 SaaS.tech #5業務システム開発でデザインとフロントエンドも妥協しない話2022_08_10 SaaS.tech #5業務システム開発でデザインとフロントエンドも妥協しない話
2022_08_10 SaaS.tech #5業務システム開発でデザインとフロントエンドも妥協しない話
 
オレ流クラウドデザイン
オレ流クラウドデザインオレ流クラウドデザイン
オレ流クラウドデザイン
 
初めてのWebプログラミング講座
初めてのWebプログラミング講座初めてのWebプログラミング講座
初めてのWebプログラミング講座
 
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
 
[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonight
[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonight[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonight
[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonight
 
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
 
マイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project Tyeマイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project Tye
 
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
 
OpenStack Swiftとそのエコシステムの最新動向
OpenStack Swiftとそのエコシステムの最新動向OpenStack Swiftとそのエコシステムの最新動向
OpenStack Swiftとそのエコシステムの最新動向
 
GitLab で実現する Ansible コードの管理
GitLab で実現する Ansible コードの管理GitLab で実現する Ansible コードの管理
GitLab で実現する Ansible コードの管理
 
マルチクラウドデータ連携Javaアプリケーションの作り方
マルチクラウドデータ連携Javaアプリケーションの作り方マルチクラウドデータ連携Javaアプリケーションの作り方
マルチクラウドデータ連携Javaアプリケーションの作り方
 
Realm platform2019
Realm platform2019Realm platform2019
Realm platform2019
 
SpringOne Platform Replay -Pivotal Cloud Foundry-
SpringOne Platform Replay -Pivotal Cloud Foundry-SpringOne Platform Replay -Pivotal Cloud Foundry-
SpringOne Platform Replay -Pivotal Cloud Foundry-
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話し
 
話題のNode-REDでIoTアプリを作ってみよう
話題のNode-REDでIoTアプリを作ってみよう話題のNode-REDでIoTアプリを作ってみよう
話題のNode-REDでIoTアプリを作ってみよう
 
.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み
 

More from bitbank, Inc. Tokyo, Japan

ビットバンクのデプロイ戦略について
ビットバンクのデプロイ戦略についてビットバンクのデプロイ戦略について
ビットバンクのデプロイ戦略についてbitbank, Inc. Tokyo, Japan
 
ビットバンク流 アジャイル開発の紹介.pdf
ビットバンク流 アジャイル開発の紹介.pdfビットバンク流 アジャイル開発の紹介.pdf
ビットバンク流 アジャイル開発の紹介.pdfbitbank, Inc. Tokyo, Japan
 
ビットバンクで求められるプロジェクトマネジメント
ビットバンクで求められるプロジェクトマネジメントビットバンクで求められるプロジェクトマネジメント
ビットバンクで求められるプロジェクトマネジメントbitbank, Inc. Tokyo, Japan
 
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境bitbank, Inc. Tokyo, Japan
 
ビットバンクのマッチングエンジン.pdf
ビットバンクのマッチングエンジン.pdfビットバンクのマッチングエンジン.pdf
ビットバンクのマッチングエンジン.pdfbitbank, Inc. Tokyo, Japan
 
ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介
ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介	ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介
ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介 bitbank, Inc. Tokyo, Japan
 
アプリケーション開発目線から考える テストの書き方について
アプリケーション開発目線から考える テストの書き方についてアプリケーション開発目線から考える テストの書き方について
アプリケーション開発目線から考える テストの書き方についてbitbank, Inc. Tokyo, Japan
 
bitbank LT Night #1 fargate blue green deployment
bitbank LT Night #1 fargate blue green deploymentbitbank LT Night #1 fargate blue green deployment
bitbank LT Night #1 fargate blue green deploymentbitbank, Inc. Tokyo, Japan
 

More from bitbank, Inc. Tokyo, Japan (17)

インフラチームの歴史とこれから
インフラチームの歴史とこれからインフラチームの歴史とこれから
インフラチームの歴史とこれから
 
ビットバンクのデプロイ戦略について
ビットバンクのデプロイ戦略についてビットバンクのデプロイ戦略について
ビットバンクのデプロイ戦略について
 
ビットバンク流 アジャイル開発の紹介.pdf
ビットバンク流 アジャイル開発の紹介.pdfビットバンク流 アジャイル開発の紹介.pdf
ビットバンク流 アジャイル開発の紹介.pdf
 
ビットバンクで求められるプロジェクトマネジメント
ビットバンクで求められるプロジェクトマネジメントビットバンクで求められるプロジェクトマネジメント
ビットバンクで求められるプロジェクトマネジメント
 
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
 
ビットバンクのマッチングエンジン.pdf
ビットバンクのマッチングエンジン.pdfビットバンクのマッチングエンジン.pdf
ビットバンクのマッチングエンジン.pdf
 
bitbank Corporate Information
bitbank Corporate Informationbitbank Corporate Information
bitbank Corporate Information
 
ng build --prod & Continuous Delivery
ng build --prod & Continuous Deliveryng build --prod & Continuous Delivery
ng build --prod & Continuous Delivery
 
マーブル図で怖くないRxJS
マーブル図で怖くないRxJSマーブル図で怖くないRxJS
マーブル図で怖くないRxJS
 
ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介
ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介	ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介
ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介
 
Daocasinoにおけるstate channel実装
Daocasinoにおけるstate channel実装Daocasinoにおけるstate channel実装
Daocasinoにおけるstate channel実装
 
20181108 bitbank lt-maintainable-e2e-testing
20181108 bitbank lt-maintainable-e2e-testing20181108 bitbank lt-maintainable-e2e-testing
20181108 bitbank lt-maintainable-e2e-testing
 
Angular Refactoring in Real World
Angular Refactoring in Real WorldAngular Refactoring in Real World
Angular Refactoring in Real World
 
アプリケーション開発目線から考える テストの書き方について
アプリケーション開発目線から考える テストの書き方についてアプリケーション開発目線から考える テストの書き方について
アプリケーション開発目線から考える テストの書き方について
 
Asana handson
Asana handsonAsana handson
Asana handson
 
RDBMS with Node.js
RDBMS with Node.jsRDBMS with Node.js
RDBMS with Node.js
 
bitbank LT Night #1 fargate blue green deployment
bitbank LT Night #1 fargate blue green deploymentbitbank LT Night #1 fargate blue green deployment
bitbank LT Night #1 fargate blue green deployment
 

Deploy TypeScript with CodePipeline in Fargate

  • 1. ビットバンク株式会社 Deploy TypeScript with CodePipeline in Fargate shogo ishikawa / bitbank, Inc 東京Node学園祭 Day2-LT 2018/11/24
  • 2. Copyright © bitbank, inc. 自己紹介 ビットバンク株式会社 AWSエンジニア shogo ishikawa CodePipelineを用いたTypeScriptなどのデプロイフローの構築を担当 インフラ領域を専業としているが、LambdaでNode.jsを使ったりすることもあ る。
  • 3. Copyright © bitbank, inc. bitbankのJavascriptへの取り組み # TypeScriptの全面採用により、 開発メンバーのダイナミックなアサインが可能
  • 4. Copyright © bitbank, inc. 今回話すこと ● TypeScriptアプリケーションのデプロイ方法の紹介 ● 細かいTips ● やってみてよかったこと・つらみ
  • 5. Copyright © bitbank, inc. Fargateとは ● EC2(サーバ)を気にしなくてよい、コンテナマネージド・サービス ● リソースベースの課金(CPU / MEM) ● 画面ポチポチで簡単にコンテナを構築できる
  • 6. Copyright © bitbank, inc. CodePipelineとは ● 様々なAWSサービスと連携可能 ● CI/CDで、AWSサービスにアプリケーションデプロイの自動化が可能
  • 7. Copyright © bitbank, inc. CodePipelineとは ● 以下のサービスと連携可能 Sorurce Build Deploy ● CodeCommit ● S3 ● GitHub ※ それ以外で管理している場 合は、CodeCommitかS3を経 由させれば良い。 ● CodeBuild ● CodeDeploy ● ECS/Fargate ● CloudFormation ● ElasticBeastalk
  • 8. Copyright © bitbank, inc. まず手動でデプロイした例を考えてみましょう
  • 9. Copyright © bitbank, inc. 手動デプロイの例 ● TypeScriptアプリケーションをFargateにデプロイする場合の例
  • 10. Copyright © bitbank, inc. 手動デプロイの例 ● TypeScriptアプリケーションをFargateにデプロイする場合の例 ● 以下のような作業が必要 ○ TypeScriptをテスト ○ TypeScriptをビルド ○ Dockerイメージをビルド ○ Docker レジストリにログイン ○ Docker レジストリにPush ○ コンテナデプロイ作業
  • 11. Copyright © bitbank, inc. そもそも人の手でこれやるのちょっとしんどいですよね?
  • 12. Copyright © bitbank, inc. サーバレスなCI/CD導入の背景 ● 開発と本番デプロイを自動化したい ● ソースコードテストを確実にしたい ● レビューを通過したものだけをデプロイしたい ● デプロイサーバの保守をしたくない ○ パッケージのバージョンアップ ○ 脆弱性対応 ○ クラウドサービス側のメンテナンスに伴う再起動 ○ OSのサポート終了 ...
  • 13. Copyright © bitbank, inc. なぜCodePipelineなのか ● 各AWSサービスと連携できること ● デプロイを自動化できる ● サーバレスであること ○ OSレベルでの保守が不要 = インフラエンジニアがいない場合でもなんとかなる。
  • 14. Copyright © bitbank, inc. CodePipelineを用いたデプロイ例 ①ソースコード変更検知 ②TypeScript Build & Docker push ④Deploy ③Docker push ⑤Docker Pull アプリケーション起動 CodeCommitへPush
  • 15. Copyright © bitbank, inc. CodeCommit:ソースコード変更検知 ● CodeCommitにPushを検知 ● CodePipelineが起動 ②TypeScript Build ④Deploy ③Docker push ⑤Docker Pull アプリケーション起動 CodeCommitへPush ①ソースコード変更検知
  • 16. Copyright © bitbank, inc. CodeBuild:ビルド ● TypeScriptのビルド ● Dockerイメージをビルド&プッシュ ①ソースコード変更検知 ②TypeScript Build ④Deploy ③Docker push ⑤Docker Pull アプリケーション起動 ①ソースコード変更検知 CodeCommitへPush
  • 17. Copyright © bitbank, inc. CodeBuild:Yamlファイルで記述可能 ①ソースコード変更検知 ②TypeScript Build ④Deploy ③Docker push ⑤Docker Pull アプリケーション起動 version: 0.2 phases: pre_build: commands: - $(aws ecr get-login --no-include-email) build: commands: - npm install - npm run build - docker build -t ${REPOSITORY_URI}":latest . post_build: commands: - docker push "${REPOSITORY_URI}":latest artifacts: files: imagedefinitions.json CodeCommitへPush
  • 18. Copyright © bitbank, inc. CodeBuild: スペックは高性能 ● 最大でvCpu:8G / Mem:15G のインスタンスタイプがあるので、CPUに負荷をかけるTypescripのBuildも可 能
  • 19. Copyright © bitbank, inc. Fargate:デプロイ ● TypeScriptのビルド ● DockerイメージをPush ①ソースコード変更検知 ②TypeScript Build ④Deploy ③Docker push ⑤Docker Pull アプリケーション起動
  • 20. Copyright © bitbank, inc. Tips:機密情報の管理方法 ● KMSで暗号化して保管 ● アプリケーションが必要とする際に、復号
  • 21. Copyright © bitbank, inc. Tips:Dockerイメージをカスタマイズして高速化 ● Dockerイメージの容量を可能な限り減らす ○ DockerイメージをDockerレジストリにPush・Pullする時間を短縮 ○ アプリケーションをオートスケールさせる際の時間を短縮 ○ 最小限のアプリケーションしか無いため、セキュリティ向上
  • 22. Copyright © bitbank, inc. Tips:Dockerイメージをカスタマイズして高速化 ● Alpine LinuxのDockerイメージを採用 ● デフォルトのイメージの容量が圧倒的に少ない ○ node:10.13.0     →  674MB ○ node:10.13.0-alpine →  70.2MB ● 約10倍小さい ● パッケージのインストールが早い つまりDockerイメージ容量は軽い方がいい
  • 23. Copyright © bitbank, inc. Tips:CodePipelineのデプロイフローをIaCで効率化 ● CloudFormation(AWSのIaC)を採用して ● CodePipelineの一撃構築を実現 ● シェルを実行するのみで、デプロイフローが構築されるようになった
  • 24. Copyright © bitbank, inc. やってみて良かったこと😊 ● デプロイ方法が共通化された ● レビューを通過したコードのみがデプロイされるようになったので、 安全になった ● リポジトリにPushすればデプロイされるので、デプロイが 楽になった ● CodePipelineを「アプリケーション開発のフェーズ」から導入することで、 高頻度なデプロイが可能になった ● サーバレスで構築したので、 運用負担は無い ● アプリケーション開発に集中できるようになった
  • 25. Copyright © bitbank, inc. つらみ😂 ● リポジトリ数が増加してしまう。 ● リポジトリのブランチにCodePipelineが紐づくため、リポジトリをパイプラインに合わせた管理方法となって しまう。 ○ モノリシックリポジトリはCodePipelineだと管理できない。 ○ 細かいLambdaのFunctionを一つのリポジトリにまとめて置くことができない。
  • 26. Copyright © bitbank, inc. まとめ ● CodePipelineでデプロイフローを構築することで、デプロイを自動化できる。 ● マネージド・サービスのみで、構築可能なので、サーバに対する 深い知見が不要で容易に構築できる。 ○ インフラエンジニアがいなくても大丈夫? ● テスト段階から、デプロイフローを導入することで、開発スピードを向上できる。
  • 27. Copyright © bitbank, inc. 以上