AzureFunctions

Azure Function CD/CI

参考文献

継続的デプロイ
基本的には上記を参考にすれば、githubとの連携自体は簡単にできます。

概要

CD/CIについて、はじめにフローを示します。

  1. 実装→githubへのPR
  2. 開発ブランチマージ
  3. 開発ブランチのマージを検知しステージング環境に自動デプロイ
  4. ステージング環境で試験実施
  5. 本番環境に手動デプロイ

1,2については通常のgithubフローと同様です。

セットアップ

上記を実施するためには以下の準備が必要です。
Functionおよび、githubリポジトリについては通常どおり作成します。

  • 新規Functionを作成する
  • Function用のgithubリポジトリを作成する
  • 本番環境およびステージング環境を用意する
  • Functionとgithubリポジトリの関連付け設定を行う

Function

Function作成後、そのFunctionが本番環境として構築していきます。
CD/CIでは本番環境とは別にステージング環境を準備します。
ステージング環境の準備方法は2つあります。

  • slot(現在プレビュー版)を利用した環境準備
  • ステージング用のFunctionを作成する

slotを利用するとスワップ機能を利用できます。
スワップ機能はslotで作成した環境をproductionへ展開する機能です。
slot自体はFunction配下の新規Functionといった感じで、
同様に操作できます。

githubリポジトリ

ここでは仮にgithubリポジトリにmaster、staging、developブランチが存在するものとします。
defaultリポジトリをdevelopにし、ここで開発を行います。

githubリポジトリのフォルダ構成を以下に示します。

  • rootディレクトリ
  • host.json 参考
  • endpointディレクトリ(ディレクトリ名が関数名になります)
    • function.json [Function Apps] -> [既存のFunctionを選択] -> [右上の詳細エディター]にて参照可能
    • index.ts(typescriptのサンプル。jsであればindex.jsを配置するだけです)

基本的には既存のFunctionをApp Service Editorで参照してコピペで対応できます。

Functionとgithubリポジトリの関連付け

[Function Apps] -> [作成したfunctionもしくはslotを選択] -> [プラットフォーム機能] -> [展開オプション]からgithub連携を設定できます。
設定時にブランチを指定しますが、ここで本番環境はmaster、ステージング環境はstagingを対応させて連携させることになります。
ただしslotの場合はmasterを連携させて、本番環境へはスワップ機能でデプロイという流れになると思われます。

未検討・検証事項

  • slotでスワップ利用時にキー情報(github web hook)が更新されることを確認しています
    • 認証コード等が問題ないかスワップ機能を検証する
    • スワップ時のアドバイスに環境変数更新の旨が示されたが、それが何を意味するか調査する
  • デプロイ時のダウンタイムの検証
    • スワップでもブランチからでも良いが、両者でデプロイした後ダウンタイムが発生するか調査・検証する