Démarrage rapide : Approvisionner Azure Spring Apps à l’aide d’un modèle ARM

Notes

Azure Spring Apps est le nouveau nom du service Azure Spring Cloud. Bien que le service ait un nouveau nom, vous verrez l’ancien nom à divers endroits pendant un certain temps, car nous travaillons à mettre à jour les ressources telles que les captures d’écran, les vidéos et les diagrammes.

Cet article s’applique à : ❌ De base ✔️ Standard ✔️ Entreprise

Ce démarrage rapide explique comment utiliser un modèle Azure Resource Manager (modèle ARM) pour déployer un cluster Azure Spring Apps dans un réseau virtuel existant.

Azure Spring Apps permet de déployer facilement des applications Spring dans Azure, sans aucune modification du code. Le service gère l’infrastructure des applications Spring, ce qui permet aux développeurs de se concentrer sur leur code. Azure Spring Apps assure la gestion du cycle de vie en utilisant des outils complets, tels que la supervision et les diagnostics, la gestion des configurations, la découverte de services, l’intégration CI/CD, les déploiements bleus-verts, etc.

Le plan de déploiement Enterprise comprend les composants Tanzu suivants :

  • Service de build
  • Service de configuration des applications
  • Registre de service
  • Spring Cloud Gateway
  • Portail des API
  • Accélérateur d’application
  • Application Live View

Un modèle Azure Resource Manager est un fichier JSON (JavaScript Object Notation) qui définit l’infrastructure et la configuration de votre projet. Le modèle utilise la syntaxe déclarative. Vous décrivez le déploiement que vous avez prévu sans écrire la séquence de commandes de programmation pour créer le déploiement.

Prérequis

  • Un abonnement Azure. Si vous n’avez pas d’abonnement, créez un compte gratuit avant de commencer.

  • Deux sous-réseaux dédiés pour le cluster Azure Spring Apps, l’un pour le runtime du service et l’autre pour les applications Spring. Pour connaître la configuration requise pour le sous-réseau et le réseau virtuel, consultez la section Conditions requises pour le réseau virtuel de l’article Déployer Azure Spring Apps dans un réseau virtuel.

  • Un espace de travail Log Analytics existant pour les paramètres de diagnostic d’Azure Spring Apps et une ressource Application Insights basée sur un espace de travail. Pour plus d’informations, consultez Analyser les journaux et les métriques avec les paramètres de diagnostic et Agent in-process Java Application Insights dans Azure Spring Apps.

  • Trois plages de routage CIDR (Classless InterDomain Routing) internes (au moins /16 chacune) que vous avez identifiées pour une utilisation par le cluster Azure Spring Apps. Ces plages CIDR ne sont pas directement routables. Elles sont uniquement utilisées en interne par le cluster Azure Spring Apps. Les clusters ne peuvent pas utiliser 169.254.0.0/16, 172.30.0.0/16, 172.31.0.0/16 ou 192.0.2.0/24 pour les plages de routage CIDR (Classless InterDomain routing) Azure Spring Apps internes. Les clusters ne peuvent pas non plus utiliser des plages d’adresses IP incluses dans la plage d’adresses du réseau virtuel du cluster.

  • Autorisation de service accordée au réseau virtuel. Le fournisseur de ressources Azure Spring Apps nécessite une autorisation Propriétaire sur votre réseau virtuel pour accorder un principal de service dédié et dynamique sur le réseau virtuel en vue d’un déploiement et d’une maintenance supplémentaires. Pour obtenir des instructions et plus d’informations, consultez la section Accorder l’autorisation du service au réseau virtuel de l’article Déployer Azure Spring Apps dans un réseau virtuel.

  • Si vous utilisez Pare-feu Azure ou une appliance virtuelle réseau, vous devez également répondre aux conditions préalables suivantes :

  • Si vous déployez une instance du plan Enterprise Azure Spring Apps pour la première fois dans l’abonnement cible, consultez la section Exigences du Plan Enterprise dans la Place de marché Azure.

Vérifier le modèle

Les modèles utilisés dans ce démarrage rapide proviennent de l’architecture de référence Azure Spring Apps.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "springCloudInstanceName": {
            "type": "string",
            "metadata": {
                "description": "The instance name of the Azure Spring Cloud resource"
            }
        },
        "appInsightsName": {
            "type": "string",
            "metadata": {
                "description": "The name of the Application Insights instance for Azure Spring Cloud"
            }
        },
        "laWorkspaceResourceId": {
            "type": "string",
            "metadata": {
                "description": "The resource ID of the existing Log Analytics workspace. This will be used for both diagnostics logs and Application Insights"
            }
        },
        "springCloudAppSubnetID": {
            "type": "string",
            "metadata": {
                "description": "The resourceID of the Azure Spring Cloud App Subnet"
            }
        },
        "springCloudRuntimeSubnetID": {
            "type": "string",
            "metadata": {
                "description": "The resourceID of the Azure Spring Cloud Runtime Subnet"
            }
        },
        "springCloudServiceCidrs": {
            "type": "string",
            "defaultValue": "10.0.0.0/16,10.2.0.0/16,10.3.0.1/16",
            "metadata": {
                "description": "Comma-separated list of IP address ranges in CIDR format. The IP ranges are reserved to host underlying Azure Spring Cloud infrastructure, which should be 3 at least /16 unused IP ranges, must not overlap with any Subnet IP ranges"
            }
        },        
        "tags": {
            "type": "object",
            "metadata": {
                "description": "The tags that will be associated to the Resources"
            },
            "defaultValue": {
                "environment": "lab"
            }
        }
    },
    "variables": {
        "location": "[resourceGroup().location]"                    
    },
    "resources": [
        {
            "type": "Microsoft.Insights/components",
            "name": "[parameters('appInsightsName')]",
            "apiVersion": "2020-02-02",
            "location": "[variables('location')]",
            "tags": "[parameters('tags')]",
            "properties": {
                "Application_Type": "web",
                "ApplicationId": "[parameters('appInsightsName')]",
                "Flow_Type": "Bluefield",
                "Request_Source": "rest",
                "WorkspaceResourceId": "[parameters('laWorkspaceResourceId')]"
            }
        },
        {
            "apiVersion": "2022-03-01-preview",
            "name": "[parameters('springCloudInstanceName')]",
            "location": "[variables('location')]",
            "tags": "[parameters('tags')]",
            "dependsOn": [
                "[resourceId('Microsoft.Insights/components', parameters('appInsightsName'))]"
                
            ],
            "type": "Microsoft.AppPlatform/Spring",
            "sku": {
                "name": "E0",
                "tier": "Enterprise"
            },
            "properties": {
                "networkProfile": {
                    "serviceCidr": "[parameters('springCloudServiceCidrs')]",
                    "serviceRuntimeSubnetId": "[parameters('springCloudRuntimeSubnetID')]",
                    "appSubnetId": "[parameters('springCloudAppSubnetID')]"
                }
            },
            "resources": [
                {
                    "type": "serviceRegistries",
                    "name": "default",
                    "apiVersion": "2022-03-01-preview",
                    "location": "[variables('location')]",
                    "dependsOn": [
                        "[resourceId('Microsoft.AppPlatform/Spring', parameters('springCloudInstanceName'))]"
                    ]
                },
                {
                    "type": "configurationServices",
                    "name": "default",
                    "apiVersion": "2022-03-01-preview",
                    "location": "[variables('location')]",
                    "dependsOn": [
                        "[resourceId('Microsoft.AppPlatform/Spring', parameters('springCloudInstanceName'))]"
                    ]
                },
                {
                    "type": "gateways",
                    "name": "default",
                    "apiVersion": "2022-03-01-preview",
                    "location": "[variables('location')]",
                    "sku": {
                        "name": "E0",
                        "tier": "Enterprise",
                        "capacity": 2
                    },
                    "dependsOn": [
                        "[resourceId('Microsoft.AppPlatform/Spring', parameters('springCloudInstanceName'))]"
                    ]
                },
                {
                    "type": "apiPortals",
                    "name": "default",
                    "apiVersion": "2022-03-01-preview",
                    "location": "[variables('location')]",
                    "sku": {
                        "name": "E0",
                        "tier": "Enterprise",
                        "capacity": 1
                    },
                    "properties": {
                        "gatewayIds": [
                            "[concat(resourceId('Microsoft.AppPlatform/Spring', parameters('springCloudInstanceName')), '/gateways/default')]"
                        ]
                    },
                    "dependsOn": [
                        "[resourceId('Microsoft.AppPlatform/Spring', parameters('springCloudInstanceName'))]"
                    ]
                },
                {
                    "type": "Microsoft.AppPlatform/Spring/buildServices/agentPools",
                    "name": "[concat(parameters('springCloudInstanceName'), '/default/default')]",
                    "apiVersion": "2022-03-01-preview",
                    "location": "[variables('location')]",
                    "properties": {
                        "poolSize": {
                            "name": "S1"
                        }
                    },
                    "dependsOn": [
                        "[resourceId('Microsoft.AppPlatform/Spring', parameters('springCloudInstanceName'))]"
                    ]
                }
            ]
        },
        {
            "apiVersion": "2022-03-01-preview",
            "name": "[concat(parameters('springCloudInstanceName'), '/default/default/default')]",
            "type": "Microsoft.AppPlatform/Spring/buildservices/builders/buildpackBindings",            
            "properties": {
                "bindingType": "ApplicationInsights",
                "launchProperties": {
                    "properties": {
                        "sampling_percentage": 10,
                        "connection_string": "[reference(concat('microsoft.insights/components/', parameters('appInsightsName')), '2015-05-01').ConnectionString]"
                    }
                }
            },
            "dependsOn": [
                "[resourceId('Microsoft.AppPlatform/Spring', parameters('springCloudInstanceName'))]"
            ]
        },
        {
            "type": "Microsoft.AppPlatform/Spring/providers/diagnosticSettings",
            "name": "[concat(parameters('springCloudInstanceName'), '/Microsoft.Insights/monitoring')]",
            "dependsOn": [  
                "[resourceId('Microsoft.AppPlatform/Spring/', parameters('springCloudInstanceName'))]"       
            ],
            "apiVersion": "2017-05-01-preview",
            "properties": {
                "name": "monitoring",
                "workspaceId": "[parameters('laWorkspaceResourceId')]",
                "logs": [
                    {
                        "category": "ApplicationConsole",
                        "enabled": true,
                        "retentionPolicy": {
                            "days": 30,
                            "enabled": false
                        }
                    }
                ]
            }
        }
               
    ],
    "outputs": {
    }
}

Deux ressources Azure sont définies dans le modèle :

Déployer le modèle

Pour déployer le modèle, procédez comme suit.

Commencez par sélectionner l’image ci-après pour vous connecter à Azure et ouvrir un modèle. Le modèle crée une instance Azure Spring Apps dans un réseau virtuel existant, et une instance Application Insights basée sur un espace de travail dans un espace de travail Azure Monitor Log Analytics existant.

Entrez ensuite des valeurs pour les champs suivants :

  • Groupe de ressources : Sélectionnez Créer, entrez un nom unique pour le groupe de ressources, puis sélectionnez OK.
  • springCloudInstanceName : entrez le nom de la ressource Azure Spring Apps.
  • appInsightsName : entrez le nom de l’instance Application Insights pour Azure Spring Apps.
  • laWorkspaceResourceId : Entrez l’ID de ressource de l’espace de travail Log Analytics existant (par exemple, /subscriptions/<votre abonnement>/resourcegroups/<votre groupe de ressources Log Analytics>/providers/Microsoft.OperationalInsights/workspaces/<nom de votre espace de travail Log Analytics>).
  • springCloudAppSubnetID : Entrez l’ID de ressource du sous-réseau de l’application Azure Spring Apps.
  • springCloudRuntimeSubnetID : Entrez l’ID de ressource du sous-réseau de runtime Azure Spring Apps.
  • springCloudServiceCidrs : Entrez une liste séparée par des virgules de plages d’adresses IP (3 au total) au format CIDR. Les plages d’adresses IP sont réservées pour héberger l’infrastructure Azure Spring Apps sous-jacente. Ces 3 plages doivent être au moins des plages d’adresses IP inutilisées /16, et ne doivent chevaucher aucune plage d’adresses IP de sous-réseau routable utilisée au sein du réseau.
  • balises : entrez des balises personnalisées.

Sélectionnez enfin Vérifier + créer, puis Créer.

Vérifier les ressources déployées

Vous pouvez utiliser le portail Azure pour vérifier les ressources déployées, ou Azure CLI ou un script Azure PowerShell pour lister les ressources déployées.

Nettoyer les ressources

Si vous prévoyez d’utiliser d’autres guides de démarrage rapide et tutoriels, vous pouvez conserver ces ressources. Quand vous n’en avez plus besoin, supprimez le groupe de ressources, ce qui supprime également les ressources qu’il contient. Pour supprimer le groupe de ressources à l’aide d’Azure CLI ou d’Azure PowerShell, utilisez les commandes suivantes :

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."

Étapes suivantes

Dans le cadre de ce démarrage rapide, vous avez déployé une instance Azure Spring Apps dans un réseau virtuel existant à l’aide d’un modèle ARM, puis validé le déploiement. Si vous souhaitez obtenir plus d’informations sur Azure Spring Apps et Azure Resource Manager, accédez aux ressources suivantes.