Create an API with Azure Function that displays your resume information in json.
- GitHub for Version control.
- GitHub Actions for CI/CD pipeline.
- Azure Functions to deploy our API.
- Azure Blob Storage to store our resume.
- .NET 6 as our programming framework for our API.
- GitHub Codespaces as our development environment.
- Bicep for our Infrastructure as Code.
- Azure account
- GitHub account
- I've provided a sample .json file based on the Json resume
NOTE We'll be using GitHub Codespaces for our development environment. At the moment, GitHub Free for personal accounts comes with 15 GB of Codespaces storage and 120 Core hours per month. Read more about pricing here
- Fork the repository so you can have your own copy of it.
- Click on the
Code
button, click onCodespaces
tab, and click onCreate Codespaces on main
. I've provided adevcontainer.json
file with the configuration needed for this project. - Once your Codespace has loaded, in the Explorer, expand the
src
folder and renamelocal.settings.sample.json
tolocal.settings.json
- In the Terminal, type
az login --use-device-code
to log into your Azure account from the az cli in your Codespace. - In the Terminal, type
az account list --output table
to get a list of Azure subscriptions you have available to you and make note of the name you want to use. - In the Terminal, type
az account set --name "name-of-subscription"
with the name of the subscription you want to use. - In the Terminal, type
az account show
and make sure it's set to the subscription you want to work in.
NOTE: I've set the resource group name to be
rg-serverlessresumeapi
- I've provided Infrastructure as Code (IaC) files, you can find them in the
infra
folder. Now we need to use those files to create a deployment in Azure, in the Terminal, type:az deployment sub create --template-file ./infra/main.bicep -l <your-region>
- In the Terminal, run the following command to get the values for your storage account name and function app name:
az deployment group show -g rg-serverlessresumeapi -n resources --query properties.outputs
- Upload
myresume.json
to that newly created blob container.az storage blob upload --account-name <storage-account-name> --container-name resume --name myresume.json --file myresume.json
- In your
local.settings.json
add the Storage Account Connection String to theAzureWebJobsStorage
value. You can get that value by running this command:az storage account show-connection-string --name MyStorageAccount --resource-group MyResourceGroup
- You can now run and debug (F5) your Function in your environment
- We'll need to get our Function's Publish Profile, run:
az functionapp deployment list-publishing-profiles --name {function-name} --resource-group {resource-group} --xml
- In your GitHub repo, create a secret named
AZURE_FUNCTIONAPP_PUBLISH_PROFILE
with the contents of your publish profile. - Head to Actions tab on your Repo and manually run the workflow.
- Once it's complete. Visit Azure, select resource groups. find rg-serverlessresumeapi, and click on the function app, then click on the url, add getresume to the end of it, your resume info will be displayed.
- You might face error while provisioning resources in azure.
- These are the errors I faced while deployment
-
Regarding hosting plan: It will prompt error like, change the sku or location.
-
No instances can be provisioned in your selected region: This is the problem with Resource providers.
Solution for 1 & 2: Go to subscriptions -> Select your subscription -> Under settings tab select Resource provider -> Search for Microsoft.compute and select it -> you will see a action bar on top of it -> Click on register
-
It will take some time to register.
-
Then you can deploy your resources.
- main.bicep deployment file already exists in your-region :
Solution for 3: Go to subscriptions -> Select your subscription -> Under settings tab select Deployments -> You will see a main file -> Delete it -> run command again to deploy.