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
CI/CD ツール導入で達成した、開発と運用の協力関係強化とストレスフリーなリリースプロセスの...
Search
toyo-da01
September 01, 2023
Technology
0
8
CI/CD ツール導入で達成した、開発と運用の協力関係強化とストレスフリーなリリースプロセスの実現に迫る!
CODT2023登壇資料。AWSサーバーレスウェブアプリケーションのリリースエンジニアリングをCICDを用いて導入したケースの紹介。
toyo-da01
September 01, 2023
Tweet
Share
More Decks by toyo-da01
See All by toyo-da01
Amazon Connect コンタクトフローの大量移管?!
da01toyo
0
5
AWS ハッカソン体験記~ゲーム開発で得られたAWSスキル紹介~
da01toyo
0
8
UTM (統合脅威管理; FortiGate) on AWSを構築するにはどんなネットワーク設定??
da01toyo
0
37
悪用厳禁! SQLインジェクションやってみた!
da01toyo
0
5
業務効率化したいのに時間がない??OSSとLambdaを用いたツールのスピード開発術
da01toyo
0
8
普通のやり方だとできない!?💦 Amazon Connect x Lambdaのレア?な連携のご紹介!
da01toyo
0
11
CI / CDって具体的にどう動いている??
da01toyo
0
2
監視オペレータはもういらない?~Amazon Connectを用いたスペシャリスト自動手配システムの内製開発~
da01toyo
0
4
優良な技術サイトを「お気に入り」で終わらせないためのWebアプリケーション開発
da01toyo
0
3
Other Decks in Technology
See All in Technology
低レイヤを知りたいPHPerのためのCコンパイラ作成入門 完全版 / Building a C Compiler for PHPers Who Want to Dive into Low-Level Programming - Expanded
tomzoh
4
3.4k
asken AI勉強会(Android)
tadashi_sato
0
140
生成AI開発案件におけるClineの業務活用事例とTips
shinya337
0
170
開発生産性を組織全体の「生産性」へ! 部門間連携の壁を越える実践的ステップ
sudo5in5k
0
290
ドメイン特化なCLIPモデルとデータセットの紹介
tattaka
1
340
2025-06-26 GitHub CopilotとAI駆動開発:実践と導入のリアル
fl_kawachi
1
220
プロダクトエンジニアリング組織への歩み、その現在地 / Our journey to becoming a product engineering organization
hiro_torii
0
140
Understanding_Thread_Tuning_for_Inference_Servers_of_Deep_Models.pdf
lycorptech_jp
PRO
0
150
生まれ変わった AWS Security Hub (Preview) を紹介 #reInforce_osaka / reInforce New Security Hub
masahirokawahara
0
360
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
26k
ネットワーク保護はどう変わるのか?re:Inforce 2025最新アップデート解説
tokushun
0
140
Core Audio tapを使ったリアルタイム音声処理のお話
yuta0306
0
150
Featured
See All Featured
The Language of Interfaces
destraynor
158
25k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Faster Mobile Websites
deanohume
307
31k
Practical Orchestrator
shlominoach
188
11k
GraphQLとの向き合い方2022年版
quramy
49
14k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
5
230
Become a Pro
speakerdeck
PRO
28
5.4k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
Statistics for Hackers
jakevdp
799
220k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Transcript
/ CI/CD ツール導入で達成した、 開発と運用の協力関係強化とストレスフリーなリリースプロセスの実現に迫る!
/ /20 ―― 本セッションについて ―― 1 ゴール • CI/CDツールを用いた運用チームへの展開方法の一例を知ってもらう
• CI/CDツール(GitHub Actions)の基本的な使い方 こんな方向けのセッション • 開発チームから運用チームへの業務展開する際に悩んだことがある方 • CI/CDツールをプロダクトに適用されたことがない方
/ /20 ―― 今回の発表で焦点を当てるケース ―― DevOps ソフトウェア開発の現場ではDevOpsの考えが広まり、 適用されているチームの皆さんも多いのではないでしょうか? 4
/ /20 ―― 今回の発表で焦点を当てるケース ―― DevOps ソフトウェア開発の現場ではDevOpsの考えが広まり、 適用されているチームの皆さんも多いのではないでしょうか? 開発と運用を“同じチーム”で実施する チーム”連携”を迅速に実施する
Devチーム とOpsチーム が “ストレスなく協力できる”関係を築くことが重要 4
/ /20 当社でも取り掛かっているものの、 組織間でストレスフリーで実施することは難しい、、 5 ―― 今回の発表で焦点を当てるケース ――
/ /20 ―― 発表題材の大規模社内DXツールの概要 ―― 6 特徴 • AWS*を用いたクラウドネイティブのサーバーレスWebアプリケーション
本発表内容はサーバーレス以外も有効と思われます! • 3つの組織が関わる体制で内製開発(アジャイル手法を採用) 1.企画チーム 2.開発チーム(自組織) 3.運用チーム 大規模社内DXツール(大規模:30~40の組織に展開) 当社のインフラ設備で日々実施している紙媒体中心での点検業務を スマートフォン1台(片手)で実施するWebアプリケーション *AWS (Amazon Web Services)は、米国その他の諸国における、Amazon.com, Inc. またはその関連会社の商標です
/ /20 • ユニットテスト • 統合テスト ―― 当社で抱えていたストレスポイント ―― 大規模社内DXツールの開発・運用体制は、以下で実施
5 • 実装 • レビュー 開発チームの責任領域 運用チームの責任領域 … … ※デプロイ工程から委任した理由は後ほど説明 • 実装 • レビュー • デプロイ • 環境管理 • モニタリング • ヘルプデスク
/ /20 • ユニットテスト • 統合テスト ―― 当社で抱えていたストレスポイント ―― 大規模社内DXツールの開発・運用体制は、以下で実施
5 • 実装 • レビュー … … • 実装 • レビュー • デプロイ • 環境管理 • モニタリング • ヘルプデスク 運用チームのリリースプロセス( )がストレスを抱える、、
/ /20 なぜリリースプロセスでストレスを抱えていたか、、?? ―― 発表題材の大規模社内DXツールの特徴(デプロイ) ―― 6
/ /20 ―― 発表題材の大規模社内DXツールの特徴(デプロイ) ―― 一般的なサーバーレスWebアプリケーション ap-northeast-1 管理者 S3(Hosting) API
Gateway Lambda Congnito DynamoDB X4 X10 CloudFront S3(Storage) CloudFront S3(Hosting) API Gateway Lambda WAF 7 X8 ユーザー
/ /20 ①インフラストラクチャ:IaC(Terraform)でサービスをプロビジョニング ap-northeast-1 S3(Hosting) API Gateway Lambda Congnito DynamoDB
X4 X10 CloudFront S3(Storage) CloudFront S3(Hosting) API Gateway Lambda WAF 7 X8 ―― 発表題材の大規模社内DXツールの特徴(デプロイ) ―― 管理者 ユーザー / /
/ /20 ②バックエンド:Lambda(Chalice)でプロビジョニング ap-northeast-1 S3(Hosting) API Gateway Lambda Congnito DynamoDB
X4 X10 CloudFront S3(Storage) CloudFront S3(Hosting) API Gateway Lambda WAF 7 X8 ―― 発表題材の大規模社内DXツールの特徴(デプロイ) ―― 管理者 ユーザー /
/ /20 ③フロントエンド:ReactをビルドしてS3にアップロード ap-northeast-1 S3(Hosting) API Gateway Lambda Congnito DynamoDB
X4 X10 CloudFront S3(Storage) CloudFront S3(Hosting) API Gateway Lambda WAF X8 ―― 発表題材の大規模社内DXツールの特徴(デプロイ) ―― 7 管理者 ユーザー /
/ /20 Private ―― 発表題材の大規模社内DXツールの特徴(デプロイ) ―― S3(共通ストレージ) VPC デプロイ体制は、開発チームと運用チームで責任領域を明確化 開発チーム
運用チーム Src Upload S3(共通ストレージ) EC2 SSM (Session Manager) デプロイ環境 本番環境① 本番環境② 本番環境③ 本番環境④ 本番環境⑤ 本番環境㊵ : 8
/ /20 9 ―― 発表題材の大規模社内DXツールの特徴(デプロイ) ―― 1. EC2にSSM セッションマネー ジャーにてアクセス
2. 本番環境のステータス確保の外部 ストレージ作成 3. クレデンシャル情報の登録 4. exec_terraform.shの編集・実施 5. provider.tfの編集 6. Terraformコマンドの実施 デプロイ環境に入ってからは、以下のようなマニュアルに従い実施 (1) Terraformのデプロイ手順書 7. exec_chalice.shの実施 8. “6~7”の実行結果をエクセルシー トに記載 (2) Chaliceのデプロイ手順書 (3) フロントのデプロイ手順書 9. “8”で記載したエクセルシートを参 照して、.”env”を編集する 10.npm package.jsonをインストー ル 11.npm buildでビルドする 12.aws s3バケットにアップロード 13.アプリケーションの正常性確認
/ /20 使い慣れないモダンなツールの操作×環境数 =多大な時間+人為的なミスが発生しやすい環境下 9 ―― 発表題材の大規模社内DXツールの特徴(デプロイ) ―― ※手順書実施時の注意点 IaCの特性上、デプロイした環境情報を”適切に”管理する
• 運用チーム側で計30~40環境をディレクトリ毎に管理 • ユーザー組織に合わせた柔軟な変更 (例:パスワードポリシー、ログ保存先など) 環境整理の面で運用チームもIaC技術が必要に… デプロイ環境に入ってからは、以下のようなマニュアルに従い実施 1. EC2にSSM セッションマネー ジャーにてアクセス 2. 本番環境のステータス確保の外部 ストレージ作成 3. クレデンシャル情報の登録 4. exec_terraform.shの編集・実施 5. provider.tfの編集 6. Terraformコマンドの実施 (1) Terraformのデプロイ手順書
/ /20 ―― 現状と成し遂げたい姿の整理 ―― 10 現状(ストレスポイント) 成し遂げたい姿 リリースプロセスに多大な時間
• 使い慣れないモダンなツール操作で 人為的なミスが発生しやすい環境下 • 環境数が多い デプロイ環境の整備 • 本番環境のクレデンシャル情報を 開発環境と同様に所持 • 環境数が多い場合のIaC、 ステータス管理 • ソースコードの連携面にも課題あり、、 リリースプロセスの時間を 従来の1/5までに短縮 デプロイ環境の整備 • 本番環境のクレデンシャル情報最適化 • IaC、ステータス管理をソースコード 側に委任 • ソースコードの連携面の 時間を”ゼロ”に
/ /20 当社での開発チームが扱えるものとして、 GitHub Actions • 既存のコード管理で活用しており、拡張が容易 • パラメータ管理/トリガー戦略を同一設定ファイル(一部UI)で可能
AWS CodePipeline • AWSサービスとの連携面が強く、拡張が容易 • パラメータ管理/トリガー戦略をツールまたぎで設定が可能 ―― 成し遂げたい姿の実現方法を立案 ―― 11 普遍的な解決策が揃いつつあり、その一つが CI/CD ツールの活用 Enterpriseの無料枠で実施
/ /20 トリガー設定 例) ・プッシュ ・プルリクエスト などで、ユースケースに 合わせて設定可能 ```bash git
commit –am “msg” git push origin main ``` 仮想OS設定 一連のジョブを実施する環 境設定を記載 例) ・OS ・ディストリニューション ・ジョブの初期設定 - shell - 初期ディレクトリなど ―― GitHub Actionsの使い方(1/2) ―― 12 GitHub ActionsのYAMLファイル name: job name on: push: branches: - main pull_request: branches: - main jobs: provision: runs-on: ubuntu-latest steps: - name: Git clone the repository uses: actions/checkout@v3 仮想環境に レポジトリ内容をコピー
/ /20 ライブラリ設定 一連の定型的な設定ジョブを 提供してくれている 例) ・AWSクレデンシャル情報 設定 ・各種プログラミング環境の セットアップ
※引数に与える情報を GitHubレポジトリに環境を 渡すことができる 例) ${{ secrets.var }} ${{ vars.var }} ―― GitHub Actionsの使い方(2/2) ―― 13 GitHub ActionsのYAMLファイル name: Configure AWS Credentials uses: aws-actions/configure~ with: access-key-id: ${{secrets}} secret-access-key: ${{secrets}} region: ${{env.AWS_REGION}} name: set terraform tfstate run: | touch file echo "var1 = ¥"${{vars}}¥"" >> file echo "var2 = ¥"${{vars}}¥"" >> file chmod +x test.sh sh test.sh ~ ~ 細かい設定 ライブラリ提供では補えない or 既存環境でスクリプトが組ま れている場合 には、シェルを組める ※シェルスクリプトの場合 権限に実行権限を付与する必 要があり
/ /20 基本的な恩恵に加えて、 オプション設定でニッチな需要も解決! ―― 本施策の運用YAMLファイルの一部 ―― 14
/ /20 on: workflow_dispatch: inputs: environment: type: environment bool: type:
boolean textfield: type: text choice: type: choice options: - 1st - 2nd 抱えていた悩み ①運用チームに各環境設定 の裁量を持たせたい ②新しい技術習得はなるべく 避けたい 応えてくれたオプション設定 トリガーをGUI提供 workflow_dispatchで、 ・選択(環境ごと) ・ブーリアン ・テキストフィールド をブラウザで完結できる! 15 GitHub ActionsのYAMLファイル ―― 本施策の運用YAMLファイルの一部 (1/2) ―― ※スライドの都合上、Tabが合っておりません
/ /20 16 GitHub ActionsのYAMLファイル ―― 本施策の運用YAMLファイルの一部 (2/2) ―― 抱えていた悩み
③IaCのステータス管理を ソースコード側に委任 ※CI/CDはジョブごとに環境構築破棄 サイクルを繰り返す 応えてくれたオプション設定 柔軟なシェル設定 ※特別な設定ではないが、以下の対応 1. 外部ストレージの確保 2. 設定ファイルの編集 3. ステータスファイルの アップロード 4. IaCのコマンド実施 2回目以降) 1. ステータスファイルのダ ウンロード 2. 以降、初回と同じ if [ ${{ github.event.inputs. bool }} ]; then aws s3 mb s3://${{ var }} sed -ie "s/%var%/${{ var }}/g" cfg : aws s3 sync cfg s3://${{ var }} else aws s3 sync cfg s3://${{ var }} fi ~ ~ 基本的には外部ストレージと連携してくれるオプションがないかを探す 本施策ではChaliceのステータス管理で、この方法を選択
/ /20 ―― GitHub ActionsのTips ―― 17 ①環境設定 ②コミュニティ質問 各環境のパラメータを用意して、選択できる
悩めばコミュニティ質問で閲覧から質問投稿 今年1月のアップデート!* 数日程度の返答実績 *https://github.blog/changelog/2023-01-10-github-actions-support-for-configuration-variables-in-workflows/ ;2023年8月2日時点
/ /20 Private ―― 発表題材の大規模社内DXツールの特徴(再掲載) ―― S3(共通ストレージ) VPC デプロイ体制は、開発チームと運用チームで責任領域を明確化 開発チーム
運用チーム Src Upload S3(共通ストレージ) EC2 SSM (Session Manager) デプロイ環境 本番環境① 本番環境② 本番環境③ 本番環境④ 本番環境⑤ 本番環境㊵ : 18
/ /20 ―― 最終的なデプロイ体制 ―― Actions デプロイ体制は、開発チームと運用チームでGitHubを中心に据えて連携 開発チーム 運用チーム Src
Upload 本番環境① 本番環境② 本番環境③ 本番環境④ 本番環境⑤ 本番環境㊵ : 18 数クリックの半自動化 Actions実行権限付与
/ /20 ―― 実績と運用者の声 ―― 19 本施策により、以下の実績と運用チームからのフィードバックを獲得 Devチーム とOpsチーム が
協力しながらリリースプロセスを改善 リリースプロセスの時間を 半自動化により減少 320 時間/デプロイ ⇒ 40 時間/デプロイ デプロイ環境の整備 • 環境管理をソースコード側(※IaCのカテゴリ化) やEnviromentに移行 • 開発チームとの統合環境で連携を容易に 手作業で数時間かけていたが、新しい技術を覚えず に数クリックでやってくれてありがたい 時々ライブラリアップデートで失敗するが、 人為的ミスの切り分けをすぐ区別して報告できた 入力パラメータの設定を変更してほしい 本番環境適用後の品質調査も 自動化できるようになってほしい
/ /20 ―― まとめ ―― 20 大規模社内DXツールの体制において、 運用チームが請け負うリリースプロセス(時間・環境)に課題があった
普遍的な解決策であるCI/CDツール(GitHub Actions)を採用して、 リリースプロセスの半自動化システムを構築した 本施策での特徴 • 運用チームに裁量を持たせる/新しい技術習熟をなくすために、Webブラウザで数クリックで実施 • デプロイ環境の整備として、環境整備をソースコード側やGitHub Actions側に移行 Appendix • デプロイする環境数が多いことが要因の一つでもあったため、リアーキテクトの観点でも見るべき • 品質調査の自動化など課題点も見つかったので、継続してDevOpsの推進を図っている
/ ご視聴、ありがとうございました