Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Deploy TypeScript with CodePipeline in Fargate

394 views

Published on

Node学園祭 2018の登壇資料

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Deploy TypeScript with CodePipeline in Fargate

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

×