Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Azure移行とリリースプロセス再構築(2024.3.8 第2回JAZUG for Women)

Azure移行とリリースプロセス再構築(2024.3.8 第2回JAZUG for Women)

2024.3.8 第2回JAZUG for Womenでの発表資料です

shinhori_kjy

March 11, 2024
Tweet

Other Decks in Programming

Transcript

  1. プロジェクトチームで対応 • 2021.11-2022.4 IaaS化検討 • 2022.5 PaaS化に方針転換 • 2022.7 Azure Light-up ※後述 •

    2022.8-2023.6 移行準備 ◦ Azureリソース構築 ◦ アプリケーション改修 ◦ 順次できるところから移行 • 2023.6末 移行完了 ◦ ここからがスタートライン! ◦ 移行したことで見えてきた課題の解決・改善に向けて、現在も対応中
  2. リリース作業担当者の負荷が高い💣 • 作業ステップが多い+手動が多い ◦ Jenkinsジョブを手動実行×3 ◦ リリース内容に応じて ▪ SQL実行 ▪

    Web.config修正 ◦ リリース予告連絡・完了連絡 ◦ Publish Release • ミスしないか、漏れが無いか不安 • 担当者が休みの場合、引き継ぎが必要 ◦ 作業担当者=サービス毎に 1人ずつ
  3. Web.configをテキストエディタで手動更新📝 • 手順 ◦ プルリクエストをマージ ◦ 各環境のテキストエディタで configを開く ◦ プルリクエストを見ながら手動で書き換え

    ◦ 保存 • 実際発生した障害 ◦ 間違った箇所を更新、誤った値で更新 ◦ 更新必要な箇所の見落とし ◦ ⇒サイトが表示されない、特定の機能を利用できない
  4. シークレット管理に難あり🔑 • シークレット ◦ 接続文字列 ◦ API Key ◦ …

    • シークレットは基本Gitにあげない • 各環境のWeb.configシークレット追加・更新時 ◦ configをテキストエディタで開く ◦ 管理台帳EXCELや他アプリケーションの configからコピー ◦ ペースト、保存 • 変更履歴を追いにくい ◦ 定期的にバックアップ保存はしているが、いつどの値が変わったか確認しにくい
  5. Github Actionsを使わない手は無い! • Github Actions ◦ あらかじめ定義した処理と条件の組合せ(=ワークフロー)を実行できる ▪ 例:ビルド、デプロイ、プルリク作成 …

    ◦ プルリクエストやブランチ作成などのイベントをトリガーに自動実行可 • 2017 自社ソースコード管理をGithubに切り替え • Azure移行でWebアプリケーション→(主に)AppServiceへ ◦ 一部 ▪ 静的Webアプリ ▪ Functionに置き換え ▪ FrontDoor経由でストレージアカウントの Blob参照
  6. Staging環境 stagingスロット Staging環境 運用スロット スワップ ビルド デプロイ 統合DB 本番環境 stagingスロット

    本番環境 運用スロット スワップ ビルド デプロイ 本番DB ※functionもGithubActionでビルド・デプロイ
  7. シークレット管理はKeyVaultで • KeyVaultとは ◦ シークレットを安全に保管&アクセス • KeyVault管理にしたシークレット例 ◦ Azureリソースの接続文字列系 ▪

    DB(SQL Managed Instance) ▪ ストレージアカウント ◦ Azureリソース以外 ▪ SendGrid API Key ▪ 自社フォトブック作成 APIのシークレット
  8. Web.config変換の例 • アプリケーション設定で持たせるためRemove ◦ 接続文字列 ▪ <connectionStrings xdt:Transform="Remove"/> • 環境(Staging/本番)によって値を置き換え

    ◦ サイトのBaseURL ▪ <add key="SITE_URL" value="https://photoback.****.jp/" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
  9. 目的 • 何がいつリリースされるのか&されたのか、開発者以外にも共有必要 ◦ カスタマーサポート ▪ お客様対応の準備をしたい • 動作確認 •

    FAQや対応マニュアル更新 ◦ マーケティング・営業  ▪ お客様へ提供する内容に問題ないか最終チェック
  10. 予告:Google Apps Scriptで自動化 • Backlogから今日以降リリースのチケット情報を取得 ◦ BacklogのAPIでGet • リリース予定リスト(Googleドキュメント)を更新 •

    Slack投稿 ◦ 2営業日以内リリース予定のチケットが ▪ あり チケットのキー +タイトル(リンクつき) ▪ なし リリース予定リストのリンク
  11. 完了報告:Github Actions×GithubのSlack連携 • GithubでのPublish Release時にSlackへ通知 • GithubActions ◦ masterブランチへのマージをトリガーに以下実行 ▪

    本番リリース(App Serviceのスロットをスワップ ) ▪ Publish Release • Github×Slack ◦ SlackにGithubアプリ追加 ◦ リリース予告・完了報告チャンネルでコマンド実行 ▪ /github subscribe {organizationName}/{repositoryName} releases
  12. 感想 • 先人達が試行錯誤を経て作り上げてきたプロセスでも、改善の余地がある ◦ 主力事業のPhotobackは今年20周年 ◦ 技術環境の変化や社内環境の変化に応じて改善してきた ▪ メールでなくSlackへ ▪

    Backlogでのチケット管理 ◦ 「こういうものだ」と諦めていたことでも、解決方法はある • 移行自体は完了したが、ここがスタートライン • 現状に満足せず改善をまわしていく ◦ 小さな改善も大きな改善も大事