

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Exécution de plusieurs applications et d'applications ASP.NET Core avec un manifeste de déploiement
<a name="dotnet-manifest"></a>

Vous pouvez utiliser un manifeste de déploiement pour indiquer à Elastic Beanstalk comment déployer votre application. Avec cette méthode, vous n'avez pas besoin d'utiliser `MSDeploy` pour générer une solution groupée source pour une seule application ASP.NET qui s'exécute sur le chemin d'accès racine de votre site Web. À la place, vous pouvez utiliser un fichier manifeste afin d'exécuter plusieurs applications sur différents chemins. Vous pouvez également demander à Elastic Beanstalk de déployer et d'exécuter l'application avec ASP.NET Core. Vous pouvez également utiliser un manifeste de déploiement pour configurer un groupe d'applications dans lequel exécuter vos applications.

Les manifestes de déploiement ajoutent la prise en charge des [applications .NET Core](#dotnet-manifest-dotnetcore) à Elastic Beanstalk. Vous pouvez déployer une application .NET Framework sans manifeste de déploiement. Toutefois, les applications .NET Core nécessitent un manifeste de déploiement pour s'exécuter sur Elastic Beanstalk. Lors de l'utilisation d'un manifeste de déploiement, vous créez une archive de site pour chaque application, puis regroupez les archives de site dans un second fichier ZIP contenant le manifeste de déploiement.

Les manifestes de déploiement ajoutent également la possibilité d'[exécuter plusieurs applications sur des chemins d'accès différents](#dotnet-manifest-multiapp). Un manifeste de déploiement définit un ensemble de cibles de déploiement, dotées chacune d'une archive de site et d'un chemin d'accès sur lequel elle doit être exécutée par IIS. Par exemple, vous pouvez exécuter une API web sur le chemin d'accès `/api` pour répondre aux demandes asynchrones, et une application web sur le chemin d'accès racine qui utilise l'API.

Vous pouvez utiliser un manifeste de déploiement pour [configurer les sites Web IIS avec des liaisons personnalisées et des chemins physiques](#dotnet-manifest-websites). Cela vous permet de configurer des sites Web qui écoutent sur des ports ou des noms d'hôtes spécifiques avant de déployer vos applications.

Vous pouvez également utiliser un manifeste de déploiement pour [exécuter plusieurs applications à l'aide de groupes d'applications dans IIS ou Kestrel](#dotnet-manifest-apppool). Vous pouvez configurer un pool d'applications pour redémarrer périodiquement vos applications, exécuter des applications 32 bits ou utiliser une version spécifique du runtime .NET Framework.

Pour une personnalisation complète, vous pouvez [écrire vos propres scripts de déploiement](#dotnet-manifest-custom) sous Windows PowerShell et indiquer à Elastic Beanstalk les scripts à exécuter pour installer, désinstaller et redémarrer votre application.

Les manifestes de déploiement et les fonctionnalités associées requièrent une plateforme Windows Server [version 1.2.0 ou ultérieure](dotnet-v2migration.md).

Pour obtenir des informations détaillées sur toutes les options de configuration, les propriétés et les fonctionnalités avancées disponibles, telles que le fait d'ignorer les réinitialisations IIS, consultez la référence du [schéma du manifeste de déploiement](dotnet-manifest-schema.md).

**Topics**
+ [Applications .NET core](#dotnet-manifest-dotnetcore)
+ [Exécution de plusieurs applications](#dotnet-manifest-multiapp)
+ [Configuration des sites Web IIS](#dotnet-manifest-websites)
+ [Utilisation du routage des demandes d'application (ARR)](#dotnet-manifest-arr)
+ [Configuration de groupes d'applications](#dotnet-manifest-apppool)
+ [Définition de déploiements personnalisés](#dotnet-manifest-custom)
+ [Référence du schéma du manifeste de déploiement](dotnet-manifest-schema.md)

## Applications .NET core
<a name="dotnet-manifest-dotnetcore"></a>

Vous pouvez utiliser un manifeste de déploiement pour exécuter des applications .NET Core sur Elastic Beanstalk. .NET Core est une version multiplateforme de .NET qui inclut un outil de ligne de commande (`dotnet`). Vous pouvez l'utiliser pour générer une application, l'exécuter localement et la préparer en vue de sa publication.

Pour exécuter une application .NET Core sur Elastic Beanstalk, vous pouvez exécuter `dotnet publish` et placer la sortie dans une archive ZIP, en excluant les répertoires contenant des fichiers. Placez l'archive de site dans un bundle de fichiers source avec un manifeste de déploiement, avec une cible de déploiement de type `aspNetCoreWeb`.

Le manifeste de déploiement suivant exécute une application .NET Core à partir d'une archive de site nommée `dotnet-core-app.zip` sur le chemin d'accès racine.

**Example aws-windows-deployment-manifest.json - .NET core**  

```
{
  "manifestVersion": 1,
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "my-dotnet-core-app",
        "parameters": {
          "archive": "dotnet-core-app.zip",
          "iisPath": "/"
        }
      }
    ]
  }
}
```

Regroupez le manifeste et l'archive de site dans un fichier ZIP pour créer un bundle de fichiers source.

**Example dotnet-core-bundle.zip**  

```
.
|-- aws-windows-deployment-manifest.json
`-- dotnet-core-app.zip
```

L'archive de site contient le code d'application compilé, les dépendances et le fichier `web.config`.

**Example dotnet-core-app.zip**  

```
.
|-- Microsoft.AspNetCore.Hosting.Abstractions.dll
|-- Microsoft.AspNetCore.Hosting.Server.Abstractions.dll
|-- Microsoft.AspNetCore.Hosting.dll
|-- Microsoft.AspNetCore.Http.Abstractions.dll
|-- Microsoft.AspNetCore.Http.Extensions.dll
|-- Microsoft.AspNetCore.Http.Features.dll
|-- Microsoft.AspNetCore.Http.dll
|-- Microsoft.AspNetCore.HttpOverrides.dll
|-- Microsoft.AspNetCore.Server.IISIntegration.dll
|-- Microsoft.AspNetCore.Server.Kestrel.dll
|-- Microsoft.AspNetCore.WebUtilities.dll
|-- Microsoft.Extensions.Configuration.Abstractions.dll
|-- Microsoft.Extensions.Configuration.EnvironmentVariables.dll
|-- Microsoft.Extensions.Configuration.dll
|-- Microsoft.Extensions.DependencyInjection.Abstractions.dll
|-- Microsoft.Extensions.DependencyInjection.dll
|-- Microsoft.Extensions.FileProviders.Abstractions.dll
|-- Microsoft.Extensions.FileProviders.Physical.dll
|-- Microsoft.Extensions.FileSystemGlobbing.dll
|-- Microsoft.Extensions.Logging.Abstractions.dll
|-- Microsoft.Extensions.Logging.dll
|-- Microsoft.Extensions.ObjectPool.dll
|-- Microsoft.Extensions.Options.dll
|-- Microsoft.Extensions.PlatformAbstractions.dll
|-- Microsoft.Extensions.Primitives.dll
|-- Microsoft.Net.Http.Headers.dll
|-- System.Diagnostics.Contracts.dll
|-- System.Net.WebSockets.dll
|-- System.Text.Encodings.Web.dll
|-- dotnet-core-app.deps.json
|-- dotnet-core-app.dll
|-- dotnet-core-app.pdb
|-- dotnet-core-app.runtimeconfig.json
`-- web.config
```

## Exécution de plusieurs applications
<a name="dotnet-manifest-multiapp"></a>

Vous pouvez exécuter plusieurs applications à l'aide d'un manifeste de déploiement en définissant plusieurs cibles de déploiement.

Le manifeste de déploiement suivant configure deux applications .NET Core. L'`WebApiSampleApp`application implémente une API Web simple et envoie des requêtes asynchrones sur le `/api` chemin. L'application `DotNetSampleApp` est une application Web qui sert les demandes à la racine du chemin d'accès.

**Example aws-windows-deployment-manifest.json - plusieurs applications**  

```
{
  "manifestVersion": 1,
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "WebAPISample",
        "parameters": {
          "appBundle": "WebApiSampleApp.zip",
          "iisPath": "/api"
        }
      },
      {
        "name": "DotNetSample",
        "parameters": {
          "appBundle": "DotNetSampleApp.zip",
          "iisPath": "/"
        }
      }
    ]
  }
}
```

Un exemple d'application avec plusieurs applications est disponible ici :
+ **Ensemble de sources déployable** [- -v2.zip dotnet-multiapp-sample-bundle](samples/dotnet-multiapp-sample-bundle-v2.zip)
+ **Code source** : [dotnet-multiapp-sample-source-v2.zip](samples/dotnet-multiapp-sample-source-v2.zip)

## Configuration des sites Web IIS
<a name="dotnet-manifest-websites"></a>

Vous pouvez configurer les sites Web IIS avec des liaisons personnalisées et des chemins physiques à l'aide du manifeste de déploiement. Cela est utile lorsque vous devez configurer des sites Web qui écoutent sur des ports spécifiques, utilisent des noms d'hôtes personnalisés ou diffusent du contenu provenant de répertoires spécifiques.

Le manifeste de déploiement suivant configure un site Web IIS personnalisé qui écoute sur HTTP avec un numéro de port spécifique et un chemin physique personnalisé :

**Example aws-windows-deployment-manifest.json - Configuration du site Web IIS**  

```
{
  "manifestVersion": 1,
  "iisConfig": {
    "websites": [
      {
        "name": "MyCustomSite",
        "physicalPath": "C:\inetpub\wwwroot\mysite",
        "bindings": [
          {
            "protocol": "http",
            "port": 8080,
            "hostName": "mysite.local"
          }
        ]
      }
    ]
  },
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "my-dotnet-core-app",
        "parameters": {
          "appBundle": "dotnet-core-app.zip",
          "iisWebSite": "MyCustomSite",
          "iisPath": "/"
        }
      }
    ]
  }
}
```

Dans cet exemple :
+ Un site Web nommé MyCustomSite « » est créé avec un chemin physique personnalisé
+ Le site Web possède une liaison HTTP sur le port 8080 avec un nom d'hôte spécifique
+ L'application ASP.NET Core est déployée sur ce site Web personnalisé à l'aide du paramètre `iisWebSite`

## Utilisation du routage des demandes d'application (ARR)
<a name="dotnet-manifest-arr"></a>

Les modules Application Request Routing (ARR) et URL Rewrite sont préinstallés et disponibles dans Elastic Beanstalk Windows. AMIs Ces modules permettent des scénarios de routage avancés et la manipulation d'URL via la configuration IIS à l'aide d'extensions Web ou de la configuration d'applications.

L'exemple suivant montre un manifeste de déploiement simple qui configure un site Web avec un port personnalisé, combiné à une configuration ebextensions qui définit le routage ARR de base :

**Example aws-windows-deployment-manifest.json - Configuration ARR simple**  

```
{
  "manifestVersion": 1,
  "iisConfig": {
    "websites": [
      {
        "name": "ARRSite",
        "physicalPath": "C:\\inetpub\\wwwroot\\arrsite",
        "bindings": [
          {
            "protocol": "http",
            "port": 8080,
            "hostName": "localhost"
          }
        ]
      }
    ]
  },
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "BackendApp",
        "parameters": {
          "appBundle": "backend-app.zip",
          "iisWebSite": "ARRSite",
          "iisPath": "/backend"
        }
      }
    ]
  }
}
```

La configuration ARR se fait par le biais d'ebextensions. La configuration suivante définit les règles de routage ARR de base :

**Example .ebextensions/arr-config.config - Configuration ARR de base**  

```
files:
  "C:\\temp\\configure-arr.ps1":
    content: |
      # Enable ARR proxy at server level
      Set-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter 'system.webServer/proxy' -Name 'enabled' -Value 'True'
      
      # Clear any existing global rules to avoid conflicts
      Clear-WebConfiguration -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter 'system.webServer/rewrite/globalRules'

      # Add global rule to route all requests to backend
      Add-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' `
        -Filter 'system.webServer/rewrite/globalRules' `
        -Name '.' `
        -Value @{
          name = 'Route_to_Backend'
          stopProcessing = 'True'
          match = @{ url = '^(?!backend/)(.*)' }
          action = @{
            type = 'Rewrite'
            url = 'http://localhost:8080/backend/{R:1}'
          }
        }

container_commands:
  01_configure_arr:
    command: powershell -ExecutionPolicy Bypass -File "C:\\temp\\configure-arr.ps1"
    waitAfterCompletion: 0
```

Cette configuration crée un site Web sur le port 8080 et configure ARR pour acheminer toutes les demandes entrantes vers l'application principale exécutée sur ce site.

## Configuration de groupes d'applications
<a name="dotnet-manifest-apppool"></a>

Vous pouvez prendre en charge plusieurs applications dans votre environnement Windows. Vous avez le choix entre deux approches :
+ Vous pouvez utiliser le modèle out-of-process d'hébergement avec le serveur Web Kestrel. Avec ce modèle, vous configurez plusieurs applications pour qu'elles s'exécutent dans un groupe d'applications.
+ Vous pouvez utiliser le modèle d'hébergement en cours, avec lequel vous utilisez plusieurs groupes d'applications pour exécuter plusieurs applications avec une seule application dans chaque groupe. Si vous utilisez le serveur IIS et que vous avez besoin d'exécuter plusieurs applications, vous devez utiliser cette approche.

Pour configurer Kestrel de façon à exécuter plusieurs applications dans un groupe d'applications, ajoutez `hostingModel="OutofProcess"` dans le fichier `web.config`. Considérez les exemples suivants.

**Example web.config - pour le modèle d'hébergement Kestrel out-of-process**  

```
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add 
    name="aspNetCore" 
    path="*" verb="*" 
    modules="AspNetCoreModuleV2" 
    resourceType="Unspecified" />
</handlers>
<aspNetCore 
    processPath="dotnet" 
    arguments=".\CoreWebApp-5-0.dll" 
    stdoutLogEnabled="false" 
    stdoutLogFile=".\logs\stdout" 
    hostingModel="OutofProcess" />
</system.webServer>
</location>
</configuration>
```

**Example aws-windows-deployment-manifest.json - applications multiples**  

```
{
"manifestVersion": 1,
  "deployments": {"msDeploy": [
      {"name": "Web-app1",
        "parameters": {"archive": "site1.zip",
          "iisPath": "/"
        }
      },
      {"name": "Web-app2",
        "parameters": {"archive": "site2.zip",
          "iisPath": "/app2"
        }
      }
    ]
  }
}
```

IIS ne prend pas en charge plusieurs applications dans un groupe d'applications car il utilise le modèle d'hébergement en cours. Par conséquent, vous devez configurer plusieurs applications en affectant chaque application à un groupe d'applications. En d'autres termes, n'affectez qu'une seule application à un groupe d'applications.

Vous pouvez configurer IIS pour qu'il utilise différents groupes d'applications dans le fichier `aws-windows-deployment-manifest.json`. Effectuez les mises à jour suivantes lorsque vous vous référez au fichier exemple suivant :
+ Ajoutez une section `iisConfig` qui comprend une sous-section appelée `appPools`.
+ Dans le bloc `appPools`, répertoriez les groupes d'applications. 
+ Dans la section `deployments`, définissez une section `parameters` pour chaque application.
+ Pour chaque application, la section `parameters` spécifie une archive, un chemin d'accès pour l'exécuter et un `appPool` dans lequel s'exécuter.

Le manifeste de déploiement suivant configure deux groupes d'applications qui redémarrent leur application toutes les 10 minutes. En outre, ils attachent leurs applications à une application Web .NET Framework qui s'exécute au chemin spécifié.

**Example aws-windows-deployment-manifest.json : une application par pool d'applications**  

```
{
"manifestVersion": 1,
  "iisConfig": {"appPools": [
      {"name": "MyFirstPool",
       "recycling": {"regularTimeInterval": 10}
      },
      {"name": "MySecondPool",
       "recycling": {"regularTimeInterval": 10}
      }
     ]
    },
  "deployments": {"msDeploy": [
      {"name": "Web-app1",
        "parameters": {
           "archive": "site1.zip",
           "iisPath": "/",
           "appPool": "MyFirstPool"
           }
      },
      {"name": "Web-app2",
        "parameters": {
           "archive": "site2.zip",
           "iisPath": "/app2",
           "appPool": "MySecondPool"
          }
      }
     ]
    }
}
```

## Définition de déploiements personnalisés
<a name="dotnet-manifest-custom"></a>

Pour encore davantage de contrôle, vous pouvez personnaliser entièrement un déploiement d'applications en définissant un *déploiement personnalisé*.

Ce manifeste de déploiement indique à Elastic Beanstalk PowerShell d'exécuter des scripts en mode 32 bits. Il spécifie trois scripts : un `install` script (`siteInstall.ps1`) qui s'exécute lors du lancement et des déploiements de l'instance, un `uninstall` script (`siteUninstall.ps1`) qui s'exécute avant d'installer de nouvelles versions pendant les déploiements et un `restart` script (`siteRestart.ps1`) qui s'exécute lorsque vous sélectionnez [Redémarrer le serveur d'applications](environments-dashboard-actions.md) dans la AWS console de gestion.

**Example aws-windows-deployment-manifest.json - déploiement personnalisé**  

```
{
  "manifestVersion": 1,
  "deployments": {
    "custom": [
      {
        "name": "Custom site",
        "architecture" : 32,
        "scripts": {
          "install": {
            "file": "siteInstall.ps1"
          },
          "restart": {
            "file": "siteRestart.ps1"
          },
          "uninstall": {
            "file": "siteUninstall.ps1"
          }
        }
      }
    ]
  }
}
```

Incluez les artefacts requis pour exécuter l'application dans le bundle de fichiers source avec le manifeste et les scripts.

**Example ustom-site-bundleC.zip**  

```
.
|-- aws-windows-deployment-manifest.json
|-- siteInstall.ps1
|-- siteRestart.ps1
|-- siteUninstall.ps1
`-- site-contents.zip
```