Visual Studio Code 에서 아주 간단하게 Azure Functions에 현재 코드를 deploy 할 수 있지만, 간단하게 되는 만큼 실제 서비스에 deploy 되는 코드의 버전 관리가 체계적으로 되지 않는 일이 생긴다.
Github 에서 특정 branch 를 지정해서 항상 서비스 환경에 자동 deploy 되도록 한다거나, default branch에 PR이 머지되면 deploy 되도록 하면 편할 것 같다.
이미 Github 나 MS에서 다 지원해주고 있어서 정말 간단하게 이런 환경을 만들 수 있다.
Github에 repository가 있고, Azure 에 function도 있다고 가정하면,
1. 인증을 위해 Azure에서 publish profile 을 다운받는다.
2. publish profile을 Github에 등록한다.
<Github repository - Settings - Secrets and variables - Actions>
AZURE_FUNCTIONAPP_PUBLISH_PROFILE 이라는 이름으로 1번에서 다운로드한 publish profile 파일의 내용을 붙여넣는다.
3. workflow 생성
Github repository의 Actions 탭에서 New Workflow 버튼을 눌러서 새 workflow 를 생성한다.
Azure로 검색해서 "Deploy Python app to Azure Functions App" 를 Configure 하면
.github/workflows/azure-functions-app-python.yml 파일을 만들 수 있다.
# This workflow will build a Python app and deploy it to an Azure Functions App on Linux when a commit is pushed to your default branch.
#
# This workflow assumes you have already created the target Azure Functions app.
# For instructions see https://learn.microsoft.com/en-us/azure/azure-functions/create-first-function-vs-code-python?pivots=python-mode-configuration
#
# To configure this workflow:
# 1. Set up the following secrets in your repository:
# - AZURE_FUNCTIONAPP_PUBLISH_PROFILE
# 2. Change env variables for your configuration.
#
# For more information on:
# - GitHub Actions for Azure: https://github.com/Azure/Actions
# - Azure Functions Action: https://github.com/Azure/functions-action
# - Publish Profile: https://github.com/Azure/functions-action#using-publish-profile-as-deployment-credential-recommended
# - Azure Service Principal for RBAC: https://github.com/Azure/functions-action#using-azure-service-principal-for-rbac-as-deployment-credential
#
# For more samples to get started with GitHub Action workflows to deploy to Azure: https://github.com/Azure/actions-workflow-samples/tree/master/FunctionApp
name: Deploy Python project to Azure Function App
on:
push:
branches:
- ["main"]
env:
AZURE_FUNCTIONAPP_NAME: 'your-app-name' # set this to your function app name on Azure
AZURE_FUNCTIONAPP_PACKAGE_PATH: '.' # set this to the path to your function app project, defaults to the repository root
PYTHON_VERSION: '3.9' # set this to the python version to use (e.g. '3.6', '3.7', '3.8')
jobs:
build-and-deploy:
runs-on: ubuntu-latest
environment: dev
steps:
- name: 'Checkout GitHub Action'
uses: actions/checkout@v3
# If you want to use Azure RBAC instead of Publish Profile, then uncomment the task below
# - name: 'Login via Azure CLI'
# uses: azure/login@v1
# with:
# creds: ${{ secrets.AZURE_RBAC_CREDENTIALS }} # set up AZURE_RBAC_CREDENTIALS secrets in your repository
- name: Setup Python ${{ env.PYTHON_VERSION }} Environment
uses: actions/setup-python@v4
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: 'Resolve Project Dependencies Using Pip'
shell: bash
run: |
pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}'
python -m pip install --upgrade pip
pip install -r requirements.txt --target=".python_packages/lib/site-packages"
popd
- name: 'Run Azure Functions Action'
uses: Azure/functions-action@v1
id: fa
with:
app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }} # Remove publish-profile to use Azure RBAC
scm-do-build-during-deployment: true
enable-oryx-build: true
기본적으로 생성되는 샘플은 main branch에 push가 들어오면 azure function에 deploy 하도록 되어 있다.
"- [main]" 부분만 "- main" 으로 변경하고, AZURE_FUNCTIONAPP_NAME 에 만들어둔 function 이름을 넣어주면 끝.
이렇게 하고 main branch 에 수정된 코드를 push 하면 바로 azure에 반영된다.
deploy 조건을 변경하고 싶다면 https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions 참조해서 on 부분을 수정해주면 된다.