|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# Strict mode, fail on any error |
| 4 | +set -euo pipefail |
| 5 | + |
| 6 | +# Azure configuration |
| 7 | +FILE=".env" |
| 8 | +if [[ -f $FILE ]]; then |
| 9 | + echo "loading from .env" |
| 10 | + export $(egrep . $FILE | xargs -n1) |
| 11 | +else |
| 12 | + cat << EOF > .env |
| 13 | +RESOURCE_GROUP="" |
| 14 | +STORAGE_ACCOUNT="" |
| 15 | +LOCATION="" |
| 16 | +LOG_ANALYTICS_WORKSPACE="" |
| 17 | +CONTAINERAPPS_ENVIRONMENT="dm-dab-aca-env" |
| 18 | +CONTAINERAPPS_APP_NAME="dm-dab-aca-app" |
| 19 | +DAB_CONFIG_FILE="./dab-config.json" |
| 20 | +EOF |
| 21 | + echo "Enviroment file (.env) not detected." |
| 22 | + echo "Please configure values for your environment in the created .env file and run the script again." |
| 23 | + echo "Read the docs/running-in-azure.md to get info on needed enviroment variables." |
| 24 | + exit 1 |
| 25 | +fi |
| 26 | + |
| 27 | +echo "starting" |
| 28 | +cat << EOF > log.txt |
| 29 | +EOF |
| 30 | + |
| 31 | +FILE_SHARE="dabconfig" |
| 32 | +DAB_CONFIG_FILE_NAME="dab-config.json" |
| 33 | +DABCONFIGFOLDER="./${FILE_SHARE}/${DAB_CONFIG_FILE_NAME}" |
| 34 | + |
| 35 | +echo "creating resource group '$RESOURCE_GROUP'" | tee -a log.txt |
| 36 | +az group create --name $RESOURCE_GROUP --location $LOCATION \ |
| 37 | + -o json >> log.txt |
| 38 | + |
| 39 | +echo "creating storage account: '$STORAGE_ACCOUNT'" | tee -a log.txt |
| 40 | +az storage account create --name $STORAGE_ACCOUNT --resource-group $RESOURCE_GROUP --location $LOCATION --sku Standard_LRS \ |
| 41 | + -o json >> log.txt |
| 42 | + |
| 43 | +echo "retrieving storage connection string" | tee -a log.txt |
| 44 | +STORAGE_CONNECTION_STRING=$(az storage account show-connection-string --name $STORAGE_ACCOUNT -g $RESOURCE_GROUP -o tsv) |
| 45 | + |
| 46 | +echo 'creating file share' | tee -a log.txt |
| 47 | +az storage share create -n $FILE_SHARE --connection-string $STORAGE_CONNECTION_STRING \ |
| 48 | + -o json >> log.txt |
| 49 | + |
| 50 | +echo "uploading configuration file '$DAB_CONFIG_FILE'" | tee -a log.txt |
| 51 | +az storage file upload --source $DAB_CONFIG_FILE --path $DAB_CONFIG_FILE_NAME --share-name $FILE_SHARE --connection-string $STORAGE_CONNECTION_STRING \ |
| 52 | + -o json >> log.txt |
| 53 | + |
| 54 | +echo "create log analytics workspace '$LOG_ANALYTICS_WORKSPACE'" | tee -a log.txt |
| 55 | +az monitor log-analytics workspace create \ |
| 56 | + --resource-group $RESOURCE_GROUP \ |
| 57 | + --location $LOCATION \ |
| 58 | + --workspace-name $LOG_ANALYTICS_WORKSPACE |
| 59 | + |
| 60 | +echo "retrieving log analytics client id" | tee -a log.txt |
| 61 | +LOG_ANALYTICS_WORKSPACE_CLIENT_ID=$(az monitor log-analytics workspace show \ |
| 62 | + --resource-group "$RESOURCE_GROUP" \ |
| 63 | + --workspace-name "$LOG_ANALYTICS_WORKSPACE" \ |
| 64 | + --query customerId \ |
| 65 | + --output tsv | tr -d '[:space:]') |
| 66 | + |
| 67 | +echo "retrieving log analytics secret" | tee -a log.txt |
| 68 | +LOG_ANALYTICS_WORKSPACE_CLIENT_SECRET=$(az monitor log-analytics workspace get-shared-keys \ |
| 69 | + --resource-group "$RESOURCE_GROUP" \ |
| 70 | + --workspace-name "$LOG_ANALYTICS_WORKSPACE" \ |
| 71 | + --query primarySharedKey \ |
| 72 | + --output tsv | tr -d '[:space:]') |
| 73 | + |
| 74 | +echo "retrieving storage key" | tee -a log.txt |
| 75 | +STORAGE_KEY=$(az storage account keys list -g $RESOURCE_GROUP -n $STORAGE_ACCOUNT --query '[0].value' -o tsv) |
| 76 | + |
| 77 | +echo "creating container apps environment: '$CONTAINERAPPS_ENVIRONMENT'" | tee -a log.txt |
| 78 | +az containerapp env create \ |
| 79 | + --resource-group $RESOURCE_GROUP \ |
| 80 | + --location $LOCATION \ |
| 81 | + --name "$CONTAINERAPPS_ENVIRONMENT" \ |
| 82 | + --logs-workspace-id "$LOG_ANALYTICS_WORKSPACE_CLIENT_ID" \ |
| 83 | + --logs-workspace-key "$LOG_ANALYTICS_WORKSPACE_CLIENT_SECRET" |
| 84 | + |
| 85 | +echo "waiting to finalize the ACA environment" | tee -a log.txt |
| 86 | +while [ "$(az containerapp env show -n $CONTAINERAPPS_ENVIRONMENT -g $RESOURCE_GROUP --query properties.provisioningState -o tsv | tr -d '[:space:]')" != "Succeeded" ]; do sleep 10; done |
| 87 | + |
| 88 | +echo "get ACA environment id" | tee -a log.txt |
| 89 | +CONTAINERAPPS_ENVIRONMENTID=$(az containerapp env show -n "$CONTAINERAPPS_ENVIRONMENT" -g "$RESOURCE_GROUP" --query id -o tsv |sed 's/\r$//') |
| 90 | + |
| 91 | +echo "mount storage account on azure container apps environment" | tee -a log.txt |
| 92 | +RES=$(az containerapp env storage set --name $CONTAINERAPPS_ENVIRONMENT \ |
| 93 | + --resource-group $RESOURCE_GROUP \ |
| 94 | + --storage-name $FILE_SHARE \ |
| 95 | + --azure-file-account-name $STORAGE_ACCOUNT \ |
| 96 | + --azure-file-account-key $STORAGE_KEY \ |
| 97 | + --azure-file-share-name $FILE_SHARE \ |
| 98 | + --access-mode ReadWrite) |
| 99 | + |
| 100 | + |
| 101 | +echo "creating container app : '$CONTAINERAPPS_APP_NAME' on the environment : '$CONTAINERAPPS_ENVIRONMENT'" | tee -a log.txt |
| 102 | +az deployment group create \ |
| 103 | + -g $RESOURCE_GROUP \ |
| 104 | + -f ./bicep/dab-on-aca.bicep \ |
| 105 | + -p appName=$CONTAINERAPPS_APP_NAME dabConfigFileName=$DAB_CONFIG_FILE_NAME mountedStorageName=$FILE_SHARE environmentId=$CONTAINERAPPS_ENVIRONMENTID |
| 106 | + |
| 107 | +echo "get the azure container app FQDN" | tee -a log.txt |
| 108 | +ACA_FQDN=$(az containerapp show -n $CONTAINERAPPS_APP_NAME -g $RESOURCE_GROUP --query properties.configuration.ingress.fqdn -o tsv | tr '[:upper:]' '[:lower:]' | tr -d '[:space:]') |
| 109 | + |
| 110 | +echo "you can now try out the API at the following address : https://${ACA_FQDN}/api/<your-entity-name>" |
| 111 | + |
| 112 | +echo "done" | tee -a log.txt |
0 commit comments