

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.

# Étape 2.5 : Déployer une application
<a name="gettingstarted-windows-deploy"></a>

**Important**  
Le AWS OpsWorks Stacks service a atteint sa fin de vie le 26 mai 2024 et a été désactivé tant pour les nouveaux clients que pour les clients existants. Nous recommandons vivement aux clients de migrer leurs charges de travail vers d'autres solutions dès que possible. Si vous avez des questions sur la migration, contactez l' AWS Support équipe sur [AWS Re:Post](https://repost.aws/) ou via le [AWS Support](https://aws.amazon.com/support) Premium.

L'installation IIS crée un répertoire `C:\inetpub\wwwroot` pour le code de votre application et les fichiers associés. L'étape suivante consiste à installer une application dans ce répertoire. Pour cet exemple, vous allez installer une page d'accueil HTML statique, `default.html`, dans `C:\inetpub\wwwroot`. Vous pouvez facilement étendre l'approche générale pour gérer des scénarios plus complexes, telles que les applications ASP.NET.

Vous pouvez inclure les fichiers de l'application dans votre livre de recettes et faire en sorte qu'`install.rb` les copie dans `C:\inetpub\wwwroot`. Pour obtenir un exemple de la façon de procéder, consultez [Exemple 6 : Création de fichiers](cookbooks-101-basics-files.md). Cependant, cette approche n'est ni très flexible ni très efficace, et il est généralement préférable de séparer le développement du livre de recettes du développement de l'application.

La solution préférée consiste à implémenter une recette de déploiement distincte qui récupère le code de l'application et les fichiers associés d'un référentiel (le référentiel de votre choix, pas seulement le référentiel de livres de recettes) et l'installe sur chaque instance de serveur IIS. Cette approche sépare le développement de livres de recettes du développement d'applications et, lorsque vous avez besoin de mettre à jour votre application, elle vous permet simplement d'exécuter à nouveau la recette de déploiement sans avoir besoin de mettre à jour vos livres de recettes.

Cette rubrique montre comment implémenter une recette de déploiement simple qui déploie `default.htm` sur votre serveur IIS. Vous pouvez facilement étendre cet exemple à des applications plus complexes.

**Topics**
+ [Créer l'application et la stocker dans un référentiel](#w2ab1c14c47c17c23c25c15)
+ [Implémenter une recette pour déployer l'application](#w2ab1c14c47c17c23c25c17)
+ [Mettre à jour les livres de recette de l'instance](#w2ab1c14c47c17c23c25c19)
+ [Ajouter la recette à la couche IIS personnalisée](#w2ab1c14c47c17c23c25c21)
+ [Ajouter une application](#w2ab1c14c47c17c23c25c23)
+ [Déployer l'application et ouvrir l'application](#w2ab1c14c47c17c23c25c25)

## Créer l'application et la stocker dans un référentiel
<a name="w2ab1c14c47c17c23c25c15"></a>

Vous pouvez utiliser n'importe quel référentiel de votre choix pour vos applications. Pour plus de simplicité, cet exemple stocke `default.htm` dans un compartiment S3 public.

**Pour créer l'application**

1. Créez un répertoire nommé `iis-application` sur un emplacement approprié de votre ordinateur.

1. Ajoutez un fichier `default.htm` à `iis-application` avec le contenu suivant.

   ```
   <!DOCTYPE html>
   <html>
     <head>
       <title>IIS Example</title>
     </head>
     <body>
       <h1>Hello World!</h1>
     </body>
   </html>
   ```

1. [Créez un compartiment S3](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html), [chargez `default.htm` dans le compartiment](https://docs.aws.amazon.com/AmazonS3/latest/gsg/PuttingAnObjectInABucket.html) et enregistrez l'URL en vue d'une utilisation ultérieure. Pour des raisons de simplicité, [rendez le fichier public](https://docs.aws.amazon.com/AmazonS3/latest/gsg/OpeningAnObject.html). 
**Note**  
Il s'agit d'une application très simple, mais vous pouvez étendre les principes de base pour gérer les applications de niveau production.  
Pour les applications plus complexes avec plusieurs fichiers, il est généralement plus simple de créer une archive .zip d'`iis-application` et de la charger dans votre compartiment S3.  
Vous pouvez ensuite télécharger le fichier et extraire le contenu dans le répertoire approprié. Il n'y a pas besoin de télécharger plusieurs fichiers, de créer une structure de répertoire, etc.
Pour une application en production, vous devrez probablement conserver vos fichiers privés. Pour obtenir un exemple de la façon dont une recette télécharge les fichiers à partir d'un compartiment S3 privé, consultez [Utilisation du SDK pour Ruby sur OpsWorks une instance Stacks Windows](cookbooks-101-opsworks-s3-windows.md).
Vous pouvez stocker votre application dans n'importe quel référentiel approprié.  
Généralement, vous téléchargez l'application à l'aide de l'API publique d'un référentiel. Cet exemple utilise l'API Amazon S3. Si, par exemple, vous stockez votre application sur GitHub, vous pouvez utiliser l'[GitHub API](https://developer.github.com/guides/getting-started/).

## Implémenter une recette pour déployer l'application
<a name="w2ab1c14c47c17c23c25c17"></a>

Ajoutez une recette nommée `deploy.rb` au répertoire `iis-cookbook` `recipes` avec le contenu suivant.

```
chef_gem "aws-sdk-s3" do
  compile_time false
  action :install
end

ruby_block "download-object" do
  block do
    require 'aws-sdk-s3'

    #1  
    # Aws.config[:ssl_ca_bundle] = 'C:\ProgramData\Git\bin\curl-ca-bundle.crt'
    Aws.use_bundled_cert!

    #2  
    query = Chef::Search::Query.new
    app = query.search(:aws_opsworks_app, "type:other").first
    s3region = app[0][:environment][:S3REGION]
    s3bucket = app[0][:environment][:BUCKET]
    s3filename = app[0][:environment][:FILENAME]

    #3  
    s3_client = Aws::S3::Client.new(region: s3region)
    s3_client.get_object(bucket: s3bucket,
                         key: s3filename,
                         response_target: 'C:\inetpub\wwwroot\default.htm')
  end 
  action :run
end
```

Cet exemple utilise le [SDK pour Ruby v2 pour](https://docs.aws.amazon.com/sdkforruby/api/index.html) télécharger le fichier. Cependant, OpsWorks Stacks n'installe pas ce SDK sur les instances Windows. La recette commence donc par la [https://docs.chef.io/chef/resources.html#chef-gem](https://docs.chef.io/chef/resources.html#chef-gem)ressource, qui gère cette tâche.

**Note**  
La ressource `chef_gem` installe les GEM dans la version Ruby dédiée de Chef, qui est la version utilisée par les recettes. Si vous souhaitez installer un GEM pour une version Ruby à l'échelle du système, utilisez la ressource [gem\$1package](https://docs.chef.io/chef/resources.html#gem-package).

La majeure partie de la recette est une [https://docs.chef.io/chef/resources.html#ruby-block](https://docs.chef.io/chef/resources.html#ruby-block)ressource qui exécute un bloc de code Ruby qui utilise le SDK pour Ruby pour `default.htm` le téléchargement. Le code de `ruby_block` peut être réparti dans les sections suivantes, qui correspondent aux commentaires numérotés de l'exemple de code. 

**1 : Spécification d'un ensemble de certificats**  
Amazon S3 utilise le protocole SSL. Vous avez donc besoin d'un certificat approprié pour télécharger des objets depuis un compartiment S3. Le SDK pour Ruby v2 n'inclut pas de bundle de certificats, vous devez donc en fournir un et configurer le SDK pour Ruby pour l'utiliser. OpsWorks Stacks n'installe pas directement un bundle de certificats, mais il installe Git, qui inclut un bundle de certificats (`curl-ca-bundle.crt`). Pour plus de commodité, cet exemple configure le SDK pour Ruby afin d'utiliser le bundle de certificats Git pour SSL. Vous pouvez également installer votre propre ensemble et configurer le kit de développement logiciel SDK en conséquence.

**2 : Récupération des données du référentiel**  
Pour télécharger un objet depuis Amazon S3, vous avez besoin de la région AWS, du nom du compartiment et du nom de la clé. Comme décrit plus tard, cet exemple fournit les informations en associant un ensemble de variables d'environnement à l'application. Lorsque vous déployez une application, OpsWorks Stacks ajoute un ensemble d'attributs à l'objet nœud de l'instance. Ces attributs sont essentiellement une table de hachage qui contient la configuration de l'application, y compris les variables d'environnement. Les attributs d'application de cette application se présentent comme suit, au format JSON.   

```
{
  "app_id": "8f71a9b5-de7f-451c-8505-3f35086e5bb3",
  "app_source": {
      "password": null,
      "revision": null,
      "ssh_key": null,
      "type": "other",
      "url": null,
      "user": null
  },
  "attributes": {
      "auto_bundle_on_deploy": true,
      "aws_flow_ruby_settings": {},
      "document_root": null,
      "rails_env": null
  },
  "data_sources": [{"type": "None"}],
  "domains": ["iis_example_app"],
  "enable_ssl": false,
  "environment": {
      "S3REGION": "us-west-2",
      "BUCKET": "windows-example-app",
      "FILENAME": "default.htm"
  },
  "name": "IIS-Example-App",
  "shortname": "iis_example_app",
  "ssl_configuration": {
      "certificate": null,
      "private_key": null,
      "chain": null
  },
  "type": "other",
  "deploy": true
}
```
Les variables d'environnement de l'application sont stockées dans l'attribut `[:environment]`. Pour les récupérer, utilisez une requête de recherche Chef et extrayez la table de hachage de l'application ; qui se trouve sous le nœud `aws_opsworks_app`. Comme cette application sera définie comme ayant le type `other`, la requête recherche les applications de ce type. Comme la recette tire parti du fait qu'il n'y a qu'une seule application sur cette instance, la table de hachage digne d'intérêt est juste `app[0]`. Pour plus de commodité, la recette attribue ensuite les noms de région, de compartiment et de fichier à des variables.  
Pour plus d'informations sur l'utilisation de la recherche Chef, consultez [Obtention des valeurs d'attribut avec la recherche de Chef](cookbooks-101-opsworks-opsworks-stack-config-search.md).

**3 : Téléchargement du fichier**  
La troisième partie de la recette crée un [objet client S3](https://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Client.html) et utilise sa méthode `[get\$1object](https://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Client.html#get_object-instance_method)` pour télécharger `default.htm` dans le répertoire `C:\inetpub\wwwroot` de l'instance. 

**Note**  
Comme une recette est une application Ruby, le code Ruby ne doit pas nécessairement être dans un `ruby_block`. Cependant, le code du corps de la recette s'exécute en premier, suivi, dans l'ordre, par les ressources. Dans cet exemple, si vous insérez le code de téléchargement dans le corps de la recette, cela échouera car la `chef_gem` ressource n'aurait pas encore installé le SDK pour Ruby. Le code de la `ruby_block` ressource s'exécute lorsque la ressource s'exécute, une fois que la `chef_gem` ressource a installé le SDK pour Ruby.

## Mettre à jour les livres de recette de l'instance
<a name="w2ab1c14c47c17c23c25c19"></a>

OpsWorks Stacks installe automatiquement des livres de recettes personnalisés sur les nouvelles instances. Cependant, comme vous travaillez avec une instance existante, vous devez mettre à jour votre livre de recettes manuellement.

**Pour mettre à jour les livres de recette de l'instance**

1. Créez une archive `.zip` d'`iis-cookbook` et chargez-la dans le compartiment S3.

   Le livre de recettes existant est remplacé, mais comme l'URL demeure la même, vous n'avez pas besoin de mettre à jour la configuration de la pile.

1. Si votre instance n'est pas en ligne, redémarrez-la.

1. Une fois que l'instance est en ligne, choisissez **Stack (Pile)** dans le panneau de navigation, puis **Run Command (Exécuter une commande)**.

1. Pour **Command (Commande)**, choisissez [Update Custom Cookbooks (Mettre à jour les livres de recettes personnalisées)](workingstacks-commands.md). Cette commande installe le livre de recettes mis à jour sur l'instance.

1. Choisissez **Update Custom Cookbooks (Mettre à jour les livres de recettes personnalisées)**. L'exécution de la commande peut prendre quelques minutes.

## Ajouter la recette à la couche IIS personnalisée
<a name="w2ab1c14c47c17c23c25c21"></a>

Comme avec `install.rb`, le meilleur moyen de gérer le déploiement consiste à attribuer `deploy.rb` à l'événement du cycle de vie approprié. Généralement, vous assignez les recettes du déploiement à l'événement Deploy et celles-ci sont appelées collectivement recettes Deploy. L'affectation d'une recette à l'événement Deploy ne déclenche pas l'événement. Au lieu de cela :
+ Pour les nouvelles instances, OpsWorks Stacks exécute automatiquement les recettes de déploiement une fois les recettes de configuration terminées, de sorte que les nouvelles instances disposent automatiquement de la version actuelle de l'application.
+ Dans le cas des instances en ligne, vous utilisez une [commande deploy](workingapps-deploying.md) pour installer manuellement les applications nouvelles ou mises à jour.

  Cette commande déclenche un événement Deploy sur les instances de la pile, ce qui exécute les recettes Deploy.

**Pour attribuer deploy.rb à l'événement Deploy de la couche**

1. Choisissez **Layers** dans le volet de navigation, puis choisissez **Recipes** sous **Layer IISExample**.

1. Sous **Custom Chef Recipes (Recettes Chef personnalisées)**, ajoutez **iis-cookbook::deploy** à la zone des recettes **Deploy** et choisissez **\$1** pour ajouter la recette à la couche.

1. Choisissez **Save (Enregistrer)** pour enregistrer la nouvelle configuration. Les recettes Deploy personnalisées doivent désormais inclure `iis-cookbook::deploy`.

## Ajouter une application
<a name="w2ab1c14c47c17c23c25c23"></a>

La dernière tâche consiste à ajouter une application à la pile pour représenter votre application dans l'environnement OpsWorks Stacks. Une application inclut les métadonnées telles que le nom complet de l'application et les données requises pour télécharger l'application à partir de son référentiel.

**Pour ajouter l'application à la pile**

1. Choisissez **Apps (Applications)** dans le panneau de navigation, puis choisissez **Add an app (Ajouter une application)**.

1. Configurez l'application avec les paramètres suivants.
   + **Nom** — I **IIS-Example-App**
   + **Type de référentiel** — **Autre**
   + **Variables d'environnement** — Ajoutez les trois variables d'environnement suivantes :
     + **S3REGION**— La région du compartiment (dans ce cas,`us-west-1`).
     + **BUCKET**— Le nom du bucket, tel que`windows-example-app`.
     + **FILENAME**— Le nom du fichier :**default.htm**.

1. Acceptez les valeurs par défaut pour les paramètres restants, puis choisissez **Add App (Ajouter une application)** pour ajouter l'application à la pile.

**Note**  
Cet exemple utilise des variables d'environnement pour fournir les données de téléchargement. Une autre approche consiste à utiliser un type de référentiel S3 Archive et à fournir l'URL du fichier. OpsWorks Stacks ajoute les informations, ainsi que des données facultatives, telles que vos informations d'identification AWS, à l'`app_source`attribut de l'application. Votre recette Deploy doit récupérer l'URL à partir des attributs de l'application et l'analyser pour extraire la région, le nom du compartiment et le nom du fichier.

## Déployer l'application et ouvrir l'application
<a name="w2ab1c14c47c17c23c25c25"></a>

OpsWorks Stacks déploie automatiquement les applications sur les nouvelles instances, mais pas sur les instances en ligne. Comme votre instance est déjà en cours d'exécution, vous devez déployer l'application manuellement.

**Pour déployer l'application**

1. Choisissez **Apps (Applications)** dans le panneau de navigation, puis **deploy (déployer)** dans la colonne **Actions** de l'application.

1. **Command (Commande)** doit être défini sur **Deploy (Déployer)**. Choisissez **Deploy (Déployer)** dans le coin inférieur droit de la page **Deploy App (Déployer l’application)**. L'exécution de la commande peut prendre quelques minutes.

   Une fois que le déploiement est terminé, vous revenez à la page **Apps (Applications)**. L'indicateur **Status (Statut)** affiche **successful (succès)** en vert et le nom de l'application a une coche verte à côté pour indiquer un déploiement réussi.

**Note**  
Les applications Windows étant toujours de type d'application **Other**, le déploiement de l'application effectue ce qui suit :  
Ajoute les données de l'application aux [attributs de configuration et de déploiement de pile](workingcookbook-json.md), comme indiqué plus tôt.
Déclenche un événement Deploy sur les instances de la pile, ce qui exécute vos recettes Deploy personnalisées.

**Note**  
Pour plus d'informations sur le dépannage des applications ou des déploiements ayant échoué, consultez [Débogage des recettes](troubleshoot-debug.md).

L'application est maintenant installée. Vous pouvez l'ouvrir en choisissant **Instances** dans le volet **Navigation**, puis en choisissant l'adresse IP publique de l'instance. Cela envoie une demande HTTP à l'instance et vous devriez voir quelque chose comme ce qui suit s'afficher dans votre navigateur.

![\[Text displaying "Hello World!" in large, bold font against a white background.\]](http://docs.aws.amazon.com/fr_fr/opsworks/latest/userguide/images/windows-iis-app.png)
