

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.

# Ajout et personnalisation des ressources de l'environnement Elastic Beanstalk
Ressources personnalisées

Vous pouvez personnaliser les ressources de votre environnement qui font partie de votre environnement Elastic Beanstalk. Par exemple, vous pouvez ajouter une file d'attente Amazon SQS et une alarme indiquant la profondeur de la file d'attente, ou vous pouvez ajouter un cluster Amazon ElastiCache . Vous pouvez facilement personnaliser votre environnement en même temps que vous déployez votre version d'application, en incluant un fichier de configuration dans votre bundle source.

Vous pouvez utiliser la `Resources` clé d'un [fichier de configuration](ebextensions.md) pour créer et personnaliser AWS des ressources dans votre environnement. Les ressources définies dans les fichiers de configuration sont ajoutées au CloudFormation modèle utilisé pour lancer votre environnement. Tous les [types de CloudFormation ressources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html) sont pris en charge.

**Note**  
Chaque fois que vous ajoutez une ressource qui n'est pas gérée par Elastic Beanstalk, veillez à ajouter une politique utilisateur avec les autorisations appropriées Gestion des identités et des accès AWS pour vos utilisateurs (IAM). Les [politiques d'utilisateur gérées](AWSHowTo.iam.managed-policies.md) fournies par Elastic Beanstalk ne couvrent que les autorisations pour les ressources gérées par Elastic Beanstalk.

Par exemple, le fichier de configuration suivant ajoute un hook de cycle de vie Auto Scaling au groupe Auto Scaling par défaut créé par Elastic Beanstalk :

**`~/my-app/.ebextensions/as-hook.config`**

```
Resources:
  hookrole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument: {
               "Version": "2012-10-17",		 	 	 
               "Statement": [ {
                  "Effect": "Allow",
                  "Principal": {
                     "Service": [ "autoscaling.amazonaws.com" ]
                  },
                  "Action": [ "sts:AssumeRole" ]
               } ]
            }
      Policies: [ {
               "PolicyName": "SNS",
               "PolicyDocument": {
                      "Version": "2012-10-17",		 	 	 
                      "Statement": [{
                          "Effect": "Allow",
                          "Resource": "*",
                          "Action": [
                              "sqs:SendMessage",
                              "sqs:GetQueueUrl",
                              "sns:Publish"
                          ]
                        }
                      ]
                  }
               } ]
  hooktopic:
    Type: AWS::SNS::Topic
    Properties:
      Subscription:
        - Endpoint: "my-email@example.com"
          Protocol: email
  lifecyclehook:
    Type: AWS::AutoScaling::LifecycleHook
    Properties:
      AutoScalingGroupName: { "Ref" : "AWSEBAutoScalingGroup" }
      LifecycleTransition: autoscaling:EC2_INSTANCE_TERMINATING
      NotificationTargetARN: { "Ref" : "hooktopic" }
      RoleARN: { "Fn::GetAtt" : [ "hookrole", "Arn"] }
```

Cet exemple définit trois ressources : `hookrole`, `hooktopic` et `lifecyclehook`. Les deux premières ressources sont un rôle IAM, qui autorise Amazon EC2 Auto Scaling à publier des messages sur Amazon SNS, et une rubrique SNS, qui transmet les messages du groupe Auto Scaling vers une adresse e-mail. Elastic Beanstalk crée ces ressources avec les propriétés et les types spécifiés.

La ressource finale, `lifecyclehook`, correspond au hook du cycle de vie lui-même :

```
  lifecyclehook:
    Type: AWS::AutoScaling::LifecycleHook
    Properties:
      AutoScalingGroupName: { "Ref" : "AWSEBAutoScalingGroup" }
      LifecycleTransition: autoscaling:EC2_INSTANCE_TERMINATING
      NotificationTargetARN: { "Ref" : "hooktopic" }
      RoleARN: { "Fn::GetAtt" : [ "hookrole", "Arn"] }
```

La définition du hook de cycle de vie utilise deux [fonctions](ebextensions-functions.md) pour renseigner les valeurs relatives aux propriétés du hook. `{ "Ref" : "AWSEBAutoScalingGroup" }` récupère le nom du groupe Auto Scaling créé par Elastic Beanstalk pour l'environnement. `AWSEBAutoScalingGroup` est l'un des [noms de ressource](customize-containers-format-resources-eb.md) standard fournis par Elastic Beanstalk.

Pour `[AWS::IAM::Role](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html#d0e48356)`, `Ref` renvoie uniquement le nom du rôle, pas l'ARN. Pour obtenir l'ARN du paramètre `RoleARN`, vous devez utiliser une autre fonction intrinsèque, `Fn::GetAtt`, qui permet d'obtenir un attribut à partir d'une ressource. `RoleARN: { "Fn::GetAtt" : [ "hookrole", "Arn"] }` obtient l'attribut `Arn` depuis la ressource `hookrole`.

`{ "Ref" : "hooktopic" }` permet d'obtenir l'ARN de la rubrique Amazon SNS créée précédemment dans le fichier de configuration. La valeur renvoyée par `Ref` varie en fonction du type de ressource et se trouve dans la [rubrique du Guide de CloudFormation l'utilisateur relative au type de AWS::SNS::Topic ressource](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html#d0e62250).

# Modification des ressources créées par Elastic Beanstalk pour votre environnement
Ressources Elastic Beanstalk

Les ressources créées par Elastic Beanstalk pour votre environnement ont des noms. Vous pouvez utiliser ces noms pour obtenir des informations sur les ressources avec une [fonction](ebextensions-functions.md), ou modifier les propriétés sur les ressources pour personnaliser leur comportement. Cette rubrique décrit les AWS ressources utilisées par Elastic Beanstalk dans les différents types d'environnements.

**Note**  
La rubrique précédente [Ressources personnalisées](environment-resources.md) fournit quelques cas d'utilisation et des exemples de personnalisation des ressources d'environnement. Vous pouvez également trouver d'autres exemples de fichiers de configuration dans la rubrique suivante [Exemples de ressources personnalisées](customize-environment-resources-examples.md). 

Les environnements de serveur Web disposent des ressources suivantes.

**Environnements de serveur web**
+ `AWSEBAutoScalingGroup`([AWS::AutoScaling::AutoScalingGroupe](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html)) — Le groupe Auto Scaling rattaché à votre environnement.
+ Une des deux ressources suivantes.
  + `AWSEBAutoScalingLaunchConfiguration`([AWS::AutoScaling::LaunchConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html)) — La configuration de lancement attachée au groupe Auto Scaling de votre environnement.
  + `AWSEBEC2LaunchTemplate`([AWS::EC2::LaunchTemplate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html)) — Le modèle de lancement Amazon EC2 utilisé par le groupe Auto Scaling de votre environnement.
**Note**  
Si votre environnement utilise une fonctionnalité qui exige des modèles de lancement Amazon EC2 et que votre stratégie utilisateur ne dispose pas des autorisations requises, la création ou la mise à jour de l'environnement peut échouer. [Utilisez la AdministratorAccess politique des [utilisateurs gérés par **AWSElasticBeanstalk** ou ajoutez les autorisations requises à votre politique](AWSHowTo.iam.managed-policies.md) personnalisée.](AWSHowTo.iam.managed-policies.md#AWSHowTo.iam.policies)
+ `AWSEBEnvironmentName`([AWS::ElasticBeanstalk::Environment](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment.html)) — Votre environnement.
+ `AWSEBSecurityGroup`([AWS::EC2::SecurityGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html)) — Le groupe de sécurité attaché à votre groupe Auto Scaling.
+ `AWSEBRDSDatabase`([AWS : :RDS : : DBInstance](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html)) — L'instance de base de données Amazon RDS attachée à votre environnement (le cas échéant).

Dans un environnement à charge équilibrée, vous pouvez accéder à des ressources supplémentaires liées à l'équilibreur de charge. Les équilibreurs de charge classiques disposent d'une ressource pour le programme d'équilibrage de charge et d'une autre pour le groupe de sécurité attaché à celui-ci. Les équilibreurs de charge d'application et de réseau ont des ressources supplémentaires pour l'écouteur par défaut, la règle de l'écouteur et le groupe cible de l'équilibreur de charge.

**Environnements à charge équilibrée**
+ `AWSEBLoadBalancer`([AWS::ElasticLoadBalancing::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html)) — L'équilibreur de charge classique de votre environnement.
+ `AWSEBV2LoadBalancer`([AWS::ElasticLoadBalancingV2::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html)) — Équilibreur de charge d'application ou de réseau de votre environnement.
+ `AWSEBLoadBalancerSecurityGroup`([AWS::EC2::SecurityGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html)) — Dans un [Amazon Virtual Private Cloud (Amazon](https://docs.aws.amazon.com/vpc/latest/userguide/) VPC) personnalisé uniquement, le nom du groupe de sécurité créé par Elastic Beanstalk pour l'équilibreur de charge. Dans un VPC par défaut ou dans EC2-Classic, Elastic Load Balancing attribue un groupe de sécurité par défaut à l'équilibreur de charge.
+ `AWSEBV2LoadBalancerListener`([AWS::ElasticLoadBalancingV2::Listener](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html)) — Un écouteur qui permet à l'équilibreur de charge de vérifier les demandes de connexion et de les transmettre à un ou plusieurs groupes cibles.
+ `AWSEBV2LoadBalancerListenerRule`([AWS::ElasticLoadBalancingV2::ListenerRule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html)) — Définit les requêtes sur lesquelles un écouteur Elastic Load Balancing agit et les actions qu'il entreprend.
+ `AWSEBV2LoadBalancerTargetGroup`([AWS::ElasticLoadBalancingV2::TargetGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html)) — Un groupe cible Elastic Load Balancing qui achemine les demandes vers une ou plusieurs cibles enregistrées, telles que les instances Amazon EC2.

Les environnements de travail disposent de ressources pour la file d'attente SQS qui place en mémoire tampon les demandes entrantes, et d'une table Amazon DynamoDB utilisée par les instances pour effectuer le choix principal.

**Environnements Worker**
+ `AWSEBWorkerQueue`([AWS::SQS::Queue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html)) — La file d'attente Amazon SQS à partir de laquelle le démon extrait les demandes qui doivent être traitées.
+ `AWSEBWorkerDeadLetterQueue`([AWS::SQS::Queue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html)) — La file d'attente Amazon SQS qui stocke les messages qui ne peuvent pas être livrés ou qui n'ont pas été traités correctement par le daemon.
+ `AWSEBWorkerCronLeaderRegistry`([AWS::DynamoDB::Table](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html)) — La table Amazon DynamoDB qui est le registre interne utilisé par le démon pour les tâches périodiques.

# Autres clés CloudFormation de modèle
Paramètres et autres clés

Nous avons déjà introduit des clés de fichier de configuration CloudFormation telles que `Resources``files`, et`packages`. Elastic Beanstalk ajoute le contenu des fichiers CloudFormation de configuration au modèle compatible avec votre environnement. Vous pouvez ainsi CloudFormation utiliser d'autres sections pour effectuer des tâches avancées dans vos fichiers de configuration.

**Topics**
+ [

## Parameters
](#ebextensions-otherkeys-parameters)
+ [

## Sorties
](#ebextensions-otherkeys-outputs)
+ [

## Mappages
](#ebextensions-otherkeys-mappings)

## Parameters


Les paramètres constituent une alternative aux [options personnalisées](configuration-options-custom.md) d'Elastic Beanstalk que vous pouvez utiliser pour définir des valeurs utilisées dans d'autres endroits de vos fichiers de configuration. À l'instar des options personnalisées, vous pouvez utiliser des paramètres pour rassembler des valeurs configurables par l'utilisateur dans un seul endroit. Contrairement aux options personnalisées, vous ne pouvez pas utiliser l'API d'Elastic Beanstalk pour définir des valeurs de paramètres, et le nombre de paramètres que vous pouvez définir dans un modèle est limité par. CloudFormation

L'une des raisons pour lesquelles vous souhaiterez peut-être utiliser des paramètres est de faire en sorte que vos fichiers de configuration servent également CloudFormation de modèles. Si vous utilisez des paramètres plutôt que des options personnalisées, vous pouvez utiliser le fichier de configuration pour créer la même ressource dans CloudFormation sa propre pile. Par exemple, vous pouvez disposer d'un fichier de configuration qui ajoute un système de fichiers Amazon EFS à votre environnement à des fins de test, puis utiliser le même fichier pour créer un système de fichiers indépendant non rattaché au cycle de vie de votre environnement pour une utilisation en production.

L'exemple suivant illustre l'utilisation de paramètres pour rassembler des valeurs configurables par l'utilisateur au début d'un fichier de configuration.

**Example [L oadbalancer-accesslogs-existingbucket .config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/resource-configuration/loadbalancer-accesslogs-existingbucket.config) — Paramètres**  

```
Parameters:
  bucket:
    Type: String
    Description: "Name of the Amazon S3 bucket in which to store load balancer logs"
    Default: "amzn-s3-demo-bucket"
  bucketprefix:
    Type: String
    Description: "Optional prefix. Can't start or end with a /, or contain the word AWSLogs"
    Default: ""
```

## Sorties


Vous pouvez utiliser un bloc `Outputs` pour exporter des informations sur les ressources créées vers CloudFormation. Vous pouvez ensuite utiliser la `Fn::ImportValue` fonction pour extraire la valeur dans un CloudFormation modèle extérieur à Elastic Beanstalk.

L'exemple suivant crée une rubrique Amazon SNS et exporte son ARN vers celui-ci CloudFormation avec le nom. `NotificationTopicArn`

**Example [sns-topic.config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/resource-configuration/sns-topic.config)**  

```
Resources:
  NotificationTopic:
    Type: AWS::SNS::Topic

Outputs:
  NotificationTopicArn:
    Description: Notification topic ARN
    Value: { "Ref" : "NotificationTopic" }
    Export:
      Name: NotificationTopicArn
```

Dans un fichier de configuration pour un autre environnement, ou dans un CloudFormation modèle externe à Elastic Beanstalk, vous pouvez `Fn::ImportValue` utiliser la fonction pour obtenir l'ARN exporté. Cet exemple affecte la valeur exportée à une propriété d'environnement nommée `TOPIC_ARN`.

**Example env.config**  

```
option_settings:
  aws:elasticbeanstalk:application:environment:
    TOPIC_ARN: '`{ "Fn::ImportValue" : "NotificationTopicArn" }`'
```

## Mappages


Vous pouvez utiliser un mappage pour stocker des paires clé/valeur organisées par espace de noms. Un mappage peut vous aider à organiser les valeurs que vous utilisez dans l'ensemble de vos configurations, ou à modifier une valeur de paramètre en fonction d'une autre valeur. Par exemple, la configuration suivante définit la valeur d'un paramètre d'ID de compte en fonction de la région en cours.

**Example [oadbalancer-accesslogs-newbucketL.config — Mappages](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/resource-configuration/loadbalancer-accesslogs-newbucket.config)**  

```
Mappings: 
  Region2ELBAccountId: 
    us-east-1: 
      AccountId: "111122223333"
    us-west-2: 
      AccountId: "444455556666"
    us-west-1: 
      AccountId: "123456789012"
    eu-west-1: 
      AccountId: "777788889999"
...
            Principal: 
              AWS: 
                ? "Fn::FindInMap"
                : 
                  - Region2ELBAccountId
                  - 
                    Ref: "AWS::Region"
                  - AccountId
```

# Fonctions


Vous pouvez utiliser des fonctions dans vos fichiers de configuration pour renseigner les valeurs des propriétés de ressource à l'aide des informations issues d'autres ressources ou de paramètres d'option de configuration Elastic Beanstalk. Elastic CloudFormation Beanstalk prend en charge les `Ref` fonctions `Fn::GetAtt` (`Fn::Join`,,) et une fonction spécifique à Elastic Beanstalk,. `Fn::GetOptionSetting`

**Topics**
+ [

## Réf
](#ebextensions-functions-ref)
+ [

## Ventilateur : GetAtt
](#ebextensions-functions-getatt)
+ [

## Fn::Join
](#ebextensions-functions-join)
+ [

## Ventilateur : GetOptionSetting
](#ebextensions-functions-getoptionsetting)

## Réf


Permet `Ref` de récupérer la représentation sous forme de chaîne par défaut d'une AWS ressource. La valeur renvoyée par `Ref` dépend du type de ressource et parfois d'autres facteurs également. Par exemple, un groupe de sécurité ([AWS::EC2::SecurityGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html)) renvoie le nom ou l'ID du groupe de sécurité, selon que le groupe de sécurité se trouve dans un [Amazon Virtual Private Cloud (Amazon](https://docs.aws.amazon.com/vpc/latest/userguide/) VPC) par défaut, un VPC EC2 classique ou un VPC personnalisé.

```
{ "Ref" : "resource name" }
```

**Note**  
Pour plus d'informations sur chaque type de ressource, y compris la ou les valeurs de renvoi de `Ref`, consultez [Référence des types de ressources AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html) dans le *Guide de l'utilisateur CloudFormation *.

À partir de l'exemple de [hook de cycle de vie Auto Scaling](environment-resources.md) :

```
Resources:
  lifecyclehook:
    Type: AWS::AutoScaling::LifecycleHook
    Properties:
      AutoScalingGroupName: { "Ref" : "AWSEBAutoScalingGroup" }
```

Vous pouvez également l'utiliser `Ref` pour récupérer la valeur d'un CloudFormation paramètre défini ailleurs dans le même fichier ou dans un autre fichier de configuration.

## Ventilateur : GetAtt


Permet `Fn::GetAtt` de récupérer la valeur d'un attribut d'une AWS ressource.

```
{ "Fn::GetAtt" : [ "resource name", "attribute name"] }
```

À partir de l'exemple de [hook de cycle de vie Auto Scaling](environment-resources.md) :

```
Resources:
  lifecyclehook:
    Type: AWS::AutoScaling::LifecycleHook
    Properties:
      RoleARN: { "Fn::GetAtt" : [ "hookrole", "Arn"] }
```

Voir [Fn : : GetAtt](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html) pour plus d'informations.

## Fn::Join


Utilisez `Fn::Join` pour associer des chaînes avec un délimiteur. Les chaînes peuvent être codées en dur ou utiliser le résultat de `Fn::GetAtt` ou `Ref`.

```
{ "Fn::Join" : [ "delimiter", [ "string1", "string2" ] ] }
```

Pour plus d'informations, consultez [Fn::Join](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-join.html).

## Ventilateur : GetOptionSetting


Utilisez `Fn::GetOptionSetting` pour récupérer la valeur d'un paramètre d'[option de configuration](command-options.md) appliqué à l'environnement. 

```
"Fn::GetOptionSetting":
  Namespace: "namespace"
  OptionName: "option name"
  DefaultValue: "default value"
```

À partir de l'exemple [stockage de clés privées](https-storingprivatekeys.md) :

```
Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Auth:
          type: "s3"
          buckets: ["elasticbeanstalk-us-west-2-123456789012"]
          roleName: 
            "Fn::GetOptionSetting": 
              Namespace: "aws:autoscaling:launchconfiguration"
              OptionName: "IamInstanceProfile"
              DefaultValue: "aws-elasticbeanstalk-ec2-role"
```

# Exemples de ressources personnalisées


Voici une liste d'exemples de fichiers de configuration que vous pouvez utiliser pour personnaliser vos environnements Elastic Beanstalk :
+ [DynamoDB et SNS CloudWatch](https://elasticbeanstalk.s3.amazonaws.com/extensions/DynamoDB-with-CloudWatch-Alarms.config)
+ [Elastic Load Balancing et CloudWatch](https://elasticbeanstalk.s3.amazonaws.com/extensions/ELB-Alarms.config)
+ [ElastiCache](https://elasticbeanstalk.s3.amazonaws.com/extensions/ElastiCache.config)
+ [RDS et CloudWatch](https://elasticbeanstalk.s3.amazonaws.com/extensions/RDS-Alarms.config)
+ [SQS, SNS et CloudWatch](https://elasticbeanstalk.s3.amazonaws.com/extensions/SNS.config)

Les sous-rubriques de cette page fournissent des exemples étendus pour l'ajout et la configuration de ressources personnalisées dans un environnement Elastic Beanstalk.

**Topics**
+ [

# Exemple : ElastiCache
](customize-environment-resources-elasticache.md)
+ [

# Exemple : SQS et CloudWatch SNS
](customize-environment-resources-sqs.md)
+ [

# Exemple : DynamoDB, et SNS CloudWatch
](customize-environment-resources-dynamodb.md)

# Exemple : ElastiCache


Les exemples suivants ajoutent un ElastiCache cluster Amazon aux plateformes EC2-Classic et EC2-VPC (Amazon Virtual [Private Cloud (Amazon VPC) par défaut et personnalisées](https://docs.aws.amazon.com/vpc/latest/userguide/)). Pour plus d'informations sur ces plateformes et sur la manière de déterminer celles prises en charge par EC2 pour votre région et votre AWS compte, consultez[https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-platforms.html](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-platforms.html). Consultez ensuite la section de cette rubrique qui s'applique à votre plateforme.
+ [Plateformes EC2-classic](#customize-environment-resources-elasticache-classic)
+ [EC2-VPC (par défaut)](#customize-environment-resources-elasticache-defaultvpc)
+ [EC2-VPC (personnalisé)](#customize-environment-resources-elasticache-targetedvpc)

## Plateformes EC2-classic


Cet exemple ajoute un ElastiCache cluster Amazon à un environnement avec des instances lancées sur la plateforme EC2-Classic. Toutes les propriétés répertoriées dans cet exemple correspondent aux propriétés requises minimales qui doivent être définies pour chaque type de ressource. Vous pouvez télécharger l'exemple [ElastiCacheci-dessous](https://elasticbeanstalk.s3.amazonaws.com/extensions/ElastiCache.config). 

**Note**  
Cet exemple crée AWS des ressources qui peuvent vous être facturées. Pour plus d'informations sur la AWS tarification, consultez[https://aws.amazon.com/pricing/](https://aws.amazon.com/pricing/). Certains services font partie du niveau d'utilisation AWS gratuit. Si vous êtes un nouveau client, vous pouvez essayer ces services gratuitement. Pour plus d’informations, consultez [https://aws.amazon.com/free/](https://aws.amazon.com/free/).

Pour utiliser cet exemple, procédez comme suit :

1. Créez un répertoire `[.ebextensions](ebextensions.md)` dans le répertoire de niveau supérieur de votre bundle de fichiers source. 

1. Créez deux fichiers de configuration avec l'extension `.config`, puis placez-les dans votre répertoire `.ebextensions`. Un fichier de configuration définit les ressources et l'autre fichier de configuration définit les options.

1. Déployez votre application sur Elastic Beanstalk.

   YAML utilise une mise en retrait cohérente. Respectez le niveau de retrait lorsque vous remplacez du contenu dans un exemple de fichier de configuration et veillez à ce que votre éditeur de texte utilise des espaces, et non des caractères de tabulation, pour la mise en retrait.

Créez un fichier de configuration (par exemple, `elasticache.config`) qui définit les ressources. Dans cet exemple, nous créons le ElastiCache cluster en spécifiant le nom de la ressource du ElastiCache cluster (`MyElastiCache`), en déclarant son type, puis en configurant les propriétés du cluster. L'exemple fait référence au nom de la ressource du groupe de ElastiCache sécurité créée et définie dans ce fichier de configuration. Ensuite, nous créons un groupe ElastiCache de sécurité. Nous définissons le nom de cette ressource, nous déclarons son type, puis nous ajoutons une description du groupe de sécurité. Enfin, nous avons défini les règles d'entrée pour le groupe de ElastiCache sécurité afin d'autoriser l'accès uniquement depuis les instances du groupe de ElastiCache sécurité (`MyCacheSecurityGroup`) et du groupe de sécurité Elastic Beanstalk (). `AWSEBSecurityGroup` Le nom du paramètre, `AWSEBSecurityGroup`, est un nom de ressource fixe fourni par Elastic Beanstalk. Vous devez ajouter des règles d'entrée `AWSEBSecurityGroup` à votre groupe de ElastiCache sécurité pour que votre application Elastic Beanstalk puisse se connecter aux instances de votre cluster. ElastiCache 

```
#This sample requires you to create a separate configuration file that defines the custom option settings for CacheCluster properties.
          
Resources:
  MyElastiCache:
    Type: AWS::ElastiCache::CacheCluster
    Properties:
      CacheNodeType: 
         Fn::GetOptionSetting:
             OptionName : CacheNodeType
             DefaultValue: cache.m1.small
      NumCacheNodes: 
           Fn::GetOptionSetting:
             OptionName : NumCacheNodes
             DefaultValue: 1
      Engine: 
           Fn::GetOptionSetting:
             OptionName : Engine
             DefaultValue: memcached
      CacheSecurityGroupNames:
        - Ref: MyCacheSecurityGroup
  MyCacheSecurityGroup:
    Type: AWS::ElastiCache::SecurityGroup
    Properties:
      Description: "Lock cache down to webserver access only"
  MyCacheSecurityGroupIngress:
    Type: AWS::ElastiCache::SecurityGroupIngress
    Properties:
      CacheSecurityGroupName: 
        Ref: MyCacheSecurityGroup
      EC2SecurityGroupName:
        Ref: AWSEBSecurityGroup
```

Pour plus d'informations sur les ressources utilisées dans cet exemple de fichier de configuration, consultez les références suivantes : 
+ [AWS::ElastiCache::CacheCluster](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html)
+ [AWS::ElastiCache::SecurityGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-security-group.html)
+ [AWS::ElastiCache : SecurityGroupIngress](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-security-group-ingress.html)

Créez un fichier de configuration distinct nommé `options.config` et définissez les paramètres d'option personnalisés. 

```
option_settings:
  "aws:elasticbeanstalk:customoption":
     CacheNodeType : cache.m1.small
     NumCacheNodes : 1
     Engine : memcached
```

Ces lignes indiquent à Elastic Beanstalk d'obtenir les valeurs des propriétés,, et Engine à **CacheNodeTypepartir NumCacheNodes** des valeurs **CacheNodeType,** et Engine dans un fichier de configuration (options.config dans notre exemple) qui contient une section option\$1settings **avec** une section aws:elasticbeanstalk:customoption contenant une paire nom-valeur contenant la valeur réelle à utiliser. NumCacheNodes Dans l'exemple ci-dessus, cela signifie que les éléments cache.m1.small, 1 et memcached seraient utilisés pour les valeurs. Pour plus d’informations sur `Fn::GetOptionSetting`, consultez [Fonctions](ebextensions-functions.md).

## EC2-VPC (par défaut)


Cet exemple ajoute un ElastiCache cluster Amazon à un environnement avec des instances lancées sur la plateforme EC2-VPC. Plus précisément, les informations de cette section s'appliquent à un scénario où EC2 lance des instances dans le VPC par défaut. Toutes les propriétés figurant dans cet exemple correspondent aux propriétés requises minimales qui doivent être définies pour chaque type de ressource. Pour plus d'informations sur le VPC et les VPCs sous-réseaux par défaut, consultez la section [Votre VPC et vos sous-réseaux par](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html) défaut.

**Note**  
Cet exemple crée AWS des ressources qui peuvent vous être facturées. Pour plus d'informations sur la AWS tarification, consultez[https://aws.amazon.com/pricing/](https://aws.amazon.com/pricing/). Certains services font partie du niveau d'utilisation AWS gratuit. Si vous êtes un nouveau client, vous pouvez essayer ces services gratuitement. Pour plus d’informations, consultez [https://aws.amazon.com/free/](https://aws.amazon.com/free/).

Pour utiliser cet exemple, procédez comme suit :

1. Créez un répertoire `[.ebextensions](ebextensions.md)` dans le répertoire de niveau supérieur de votre bundle de fichiers source. 

1. Créez deux fichiers de configuration avec l'extension `.config`, puis placez-les dans votre répertoire `.ebextensions`. Un fichier de configuration définit les ressources et l'autre fichier de configuration définit les options.

1. Déployez votre application sur Elastic Beanstalk.

   YAML utilise une mise en retrait cohérente. Respectez le niveau de retrait lorsque vous remplacez du contenu dans un exemple de fichier de configuration et veillez à ce que votre éditeur de texte utilise des espaces, et non des caractères de tabulation, pour la mise en retrait.

Ensuite, attribuez le nom `elasticache.config` au fichier de configuration de ressources. Pour créer le ElastiCache cluster, cet exemple indique le nom de la ressource du ElastiCache cluster (`MyElastiCache`), déclare son type, puis configure les propriétés du cluster. L'exemple fait référence à l'ID de la ressource de groupe de sécurité que nous créons et définissons dans ce fichier de configuration.

Ensuite, nous créons un groupe de sécurité EC2. Nous définissons le nom de cette ressource, déclarons son type, ajoutons une description et définissons les règles de trafic entrant pour le groupe de sécurité afin de n'autoriser l'accès qu'à partir des instances incluses dans le groupe de sécurité Elastic Beanstalk (`AWSEBSecurityGroup`). (Le nom du paramètre`AWSEBSecurityGroup`, est un nom de ressource fixe fourni par Elastic Beanstalk. Vous devez ajouter des règles d'entrée `AWSEBSecurityGroup` à votre groupe de ElastiCache sécurité pour que votre application Elastic Beanstalk puisse se connecter aux instances de votre cluster.) ElastiCache 

Les règles de trafic entrant pour le groupe de sécurité EC2 définissent également le protocole IP et les numéros de port sur lesquels les nœuds de cache peuvent accepter des connexions. Pour Redis, le numéro de port par défaut est `6379`.

```
#This sample requires you to create a separate configuration file that defines the custom option settings for CacheCluster properties.

Resources:
  MyCacheSecurityGroup:
    Type: "AWS::EC2::SecurityGroup"
    Properties:
      GroupDescription: "Lock cache down to webserver access only"
      SecurityGroupIngress :
        - IpProtocol : "tcp"
          FromPort :
            Fn::GetOptionSetting:
              OptionName : "CachePort"
              DefaultValue: "6379"
          ToPort :
            Fn::GetOptionSetting:
              OptionName : "CachePort"
              DefaultValue: "6379"
          SourceSecurityGroupName:
            Ref: "AWSEBSecurityGroup"
  MyElastiCache:
    Type: "AWS::ElastiCache::CacheCluster"
    Properties:
      CacheNodeType:
        Fn::GetOptionSetting:
          OptionName : "CacheNodeType"
          DefaultValue : "cache.t2.micro"
      NumCacheNodes:
        Fn::GetOptionSetting:
          OptionName : "NumCacheNodes"
          DefaultValue : "1"
      Engine:
        Fn::GetOptionSetting:
          OptionName : "Engine"
          DefaultValue : "redis"
      VpcSecurityGroupIds:
        -
          Fn::GetAtt:
            - MyCacheSecurityGroup
            - GroupId

Outputs:
  ElastiCache:
    Description : "ID of ElastiCache Cache Cluster with Redis Engine"
    Value :
      Ref : "MyElastiCache"
```

Pour plus d'informations sur les ressources utilisées dans cet exemple de fichier de configuration, consultez les références suivantes : 
+ [AWS::ElastiCache::CacheCluster](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html)
+ [AWS::EC2::SecurityGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html)

Ensuite, attribuez le nom `options.config` au fichier de configuration des options et définissez les paramètres d'option personnalisés. 

```
option_settings:
  "aws:elasticbeanstalk:customoption":
    CacheNodeType : cache.t2.micro
    NumCacheNodes : 1
    Engine : redis
    CachePort : 6379
```

Avec ces lignes de code, Elastic Beanstalk récupère les valeurs des propriétés `CacheNodeType`, `NumCacheNodes`, `Engine` et `CachePort` à partir des valeurs `CacheNodeType`, `NumCacheNodes`, `Engine` et `CachePort` figurant dans un fichier de configuration (`options.config` dans notre exemple). Ce fichier inclut une section `aws:elasticbeanstalk:customoption` (sous `option_settings`) qui contient des paires nom-valeur incluant les valeurs réelles à utiliser. Dans l'exemple précédent, les éléments `cache.t2.micro`, `1`, `redis` et `6379` seraient utilisés pour les valeurs. Pour plus d’informations sur `Fn::GetOptionSetting`, consultez [Fonctions](ebextensions-functions.md).

## EC2-VPC (personnalisé)


Si vous créez un VPC personnalisé sur la plateforme EC2-VPC et que vous le spécifiez comme VPC dans lequel EC2 lance les instances, le processus d'ajout d'un ElastiCache cluster Amazon à votre environnement est différent de celui d'un VPC par défaut. La principale différence est que vous devez créer un groupe de sous-réseaux pour le ElastiCache cluster. Toutes les propriétés figurant dans cet exemple correspondent aux propriétés requises minimales qui doivent être définies pour chaque type de ressource.

**Note**  
Cet exemple crée AWS des ressources qui peuvent vous être facturées. Pour plus d'informations sur la AWS tarification, consultez[https://aws.amazon.com/pricing/](https://aws.amazon.com/pricing/). Certains services font partie du niveau d'utilisation AWS gratuit. Si vous êtes un nouveau client, vous pouvez essayer ces services gratuitement. Pour plus d’informations, consultez [https://aws.amazon.com/free/](https://aws.amazon.com/free/).

Pour utiliser cet exemple, procédez comme suit :

1. Créez un répertoire `[.ebextensions](ebextensions.md)` dans le répertoire de niveau supérieur de votre bundle de fichiers source. 

1. Créez deux fichiers de configuration avec l'extension `.config`, puis placez-les dans votre répertoire `.ebextensions`. Un fichier de configuration définit les ressources et l'autre fichier de configuration définit les options.

1. Déployez votre application sur Elastic Beanstalk.

   YAML utilise une mise en retrait cohérente. Respectez le niveau de retrait lorsque vous remplacez du contenu dans un exemple de fichier de configuration et veillez à ce que votre éditeur de texte utilise des espaces, et non des caractères de tabulation, pour la mise en retrait.

Ensuite, attribuez le nom `elasticache.config` au fichier de configuration de ressources. Pour créer le ElastiCache cluster, cet exemple indique le nom de la ressource du ElastiCache cluster (`MyElastiCache`), déclare son type, puis configure les propriétés du cluster. Les propriétés de l'exemple font référence au nom du groupe de sous-réseaux du ElastiCache cluster ainsi qu'à l'ID de la ressource du groupe de sécurité que nous créons et définissons dans ce fichier de configuration.

Ensuite, nous créons un groupe de sécurité EC2. Nous définissons le nom de cette ressource, déclarons son type, ajoutons une description et l'ID de VPC, et définissons les règles de trafic entrant pour le groupe de sécurité afin de n'autoriser l'accès qu'à partir des instances incluses dans le groupe de sécurité Elastic Beanstalk (`AWSEBSecurityGroup`). (Le nom du paramètre`AWSEBSecurityGroup`, est un nom de ressource fixe fourni par Elastic Beanstalk. Vous devez ajouter des règles d'entrée `AWSEBSecurityGroup` à votre groupe de ElastiCache sécurité pour que votre application Elastic Beanstalk puisse se connecter aux instances de votre cluster.) ElastiCache 

Les règles de trafic entrant pour le groupe de sécurité EC2 définissent également le protocole IP et les numéros de port sur lesquels les nœuds de cache peuvent accepter des connexions. Pour Redis, le numéro de port par défaut est `6379`. Enfin, cet exemple crée un groupe de sous-réseaux pour le ElastiCache cluster. Nous définissons le nom de cette ressource, déclarons son type et ajoutons la description et l'ID du sous-réseau dans le groupe de sous-réseaux.

**Note**  
Nous vous recommandons d'utiliser des sous-réseaux privés pour le ElastiCache cluster. Pour plus d'informations sur un VPC avec un sous-réseau privé, consultez [https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html).

```
#This sample requires you to create a separate configuration file that defines the custom option settings for CacheCluster properties.

Resources:
  MyElastiCache:
    Type: "AWS::ElastiCache::CacheCluster"
    Properties:
      CacheNodeType:
        Fn::GetOptionSetting:
          OptionName : "CacheNodeType"
          DefaultValue : "cache.t2.micro"
      NumCacheNodes:
        Fn::GetOptionSetting:
          OptionName : "NumCacheNodes"
          DefaultValue : "1"
      Engine:
        Fn::GetOptionSetting:
          OptionName : "Engine"
          DefaultValue : "redis"
      CacheSubnetGroupName:
        Ref: "MyCacheSubnets"
      VpcSecurityGroupIds:
        - Ref: "MyCacheSecurityGroup"
  MyCacheSecurityGroup:
    Type: "AWS::EC2::SecurityGroup"
    Properties:
      GroupDescription: "Lock cache down to webserver access only"
      VpcId:
        Fn::GetOptionSetting:
          OptionName : "VpcId"
      SecurityGroupIngress :
        - IpProtocol : "tcp"
          FromPort :
            Fn::GetOptionSetting:
              OptionName : "CachePort"
              DefaultValue: "6379"
          ToPort :
            Fn::GetOptionSetting:
              OptionName : "CachePort"
              DefaultValue: "6379"
          SourceSecurityGroupId:
            Ref: "AWSEBSecurityGroup"
  MyCacheSubnets:
    Type: "AWS::ElastiCache::SubnetGroup"
    Properties:
      Description: "Subnets for ElastiCache"
      SubnetIds:
        Fn::GetOptionSetting:
          OptionName : "CacheSubnets"
Outputs:
  ElastiCache:
    Description : "ID of ElastiCache Cache Cluster with Redis Engine"
    Value :
      Ref : "MyElastiCache"
```

Pour plus d'informations sur les ressources utilisées dans cet exemple de fichier de configuration, consultez les références suivantes : 
+ [AWS::ElastiCache::CacheCluster](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html)
+ [AWS::EC2::SecurityGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html)
+ [AWS::ElastiCache::SubnetGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-subnetgroup.html)

Ensuite, attribuez le nom `options.config` au fichier de configuration des options et définissez les paramètres d'option personnalisés.

**Note**  
Dans l'exemple suivant, remplacez les exemples de valeurs `CacheSubnets` et `VpcId` par vos propres sous-réseaux et VPC.

```
option_settings:
  "aws:elasticbeanstalk:customoption":
    CacheNodeType : cache.t2.micro
    NumCacheNodes : 1
    Engine : redis
    CachePort : 6379
    CacheSubnets:
      - subnet-1a1a1a1a
      - subnet-2b2b2b2b
      - subnet-3c3c3c3c
    VpcId: vpc-4d4d4d4d
```

Avec ces lignes de code, Elastic Beanstalk récupère les valeurs des propriétés `CacheNodeType`, `NumCacheNodes`, `Engine`, `CachePort`, `CacheSubnets` et `VpcId` à partir des valeurs `CacheNodeType`, `NumCacheNodes`, `Engine`, `CachePort`, `CacheSubnets` et `VpcId` figurant dans un fichier de configuration (`options.config` dans notre exemple). Ce fichier inclut une section `aws:elasticbeanstalk:customoption` (sous `option_settings`) qui contient des paires nom-valeur incluant des exemples de valeurs. Dans l'exemple ci-dessus, les éléments `cache.t2.micro`, `1`, `redis`, `6379`, `subnet-1a1a1a1a`, `subnet-2b2b2b2b`, `subnet-3c3c3c3c` et `vpc-4d4d4d4d` seraient utilisés pour les valeurs. Pour plus d’informations sur `Fn::GetOptionSetting`, consultez [Fonctions](ebextensions-functions.md).

# Exemple : SQS et CloudWatch SNS


Dans cet exemple, une file d'attente Amazon SQS et une alarme relative à la longueur de la file d'attente sont ajoutées à l'environnement. Les propriétés que vous voyez dans cet exemple correspondent aux propriétés minimales requises que vous devez définir pour chacune de ces ressources. Vous pouvez télécharger l'exemple sur [SQS, SNS et](https://elasticbeanstalk.s3.amazonaws.com/extensions/SNS.config). CloudWatch 

**Note**  
Cet exemple crée AWS des ressources qui peuvent vous être facturées. Pour plus d'informations sur la AWS tarification, consultez[https://aws.amazon.com/pricing/](https://aws.amazon.com/pricing/). Certains services font partie du niveau d'utilisation AWS gratuit. Si vous êtes un nouveau client, vous pouvez essayer ces services gratuitement. Pour plus d’informations, consultez [https://aws.amazon.com/free/](https://aws.amazon.com/free/).

Pour utiliser cet exemple, procédez comme suit :

1. Créez un répertoire `[.ebextensions](ebextensions.md)` dans le répertoire de niveau supérieur de votre bundle de fichiers source. 

1. Créez deux fichiers de configuration avec l'extension `.config`, puis placez-les dans votre répertoire `.ebextensions`. Un fichier de configuration définit les ressources et l'autre fichier de configuration définit les options.

1. Déployez votre application sur Elastic Beanstalk.

   YAML utilise une mise en retrait cohérente. Respectez le niveau de retrait lorsque vous remplacez du contenu dans un exemple de fichier de configuration et veillez à ce que votre éditeur de texte utilise des espaces, et non des caractères de tabulation, pour la mise en retrait.

Créez un fichier de configuration (par exemple, sqs.config) qui définit les ressources. Dans cet exemple, nous créons une file d'attente SQS et définissons la propriété `VisbilityTimeout` dans la ressource `MySQSQueue`. Ensuite, nous créons une rubrique (`Topic`) SNS et nous indiquons que l'e-mail doit être envoyé à `someone@example.com` lorsque l'alarme se déclenche. Enfin, nous créons une CloudWatch alarme si la file d'attente dépasse 10 messages. Dans la propriété `Dimensions`, nous spécifions le nom de la dimension et la valeur représentant la mesure de la dimension. Nous utilisons `Fn::GetAtt` pour renvoyer la valeur de `QueueName` à partir de `MySQSQueue`.

```
#This sample requires you to create a separate configuration file to define the custom options for the SNS topic and SQS queue.
Resources:
  MySQSQueue:
    Type: AWS::SQS::Queue
    Properties: 
      VisibilityTimeout:
        Fn::GetOptionSetting:
          OptionName: VisibilityTimeout
          DefaultValue: 30
  AlarmTopic:
    Type: AWS::SNS::Topic
    Properties: 
      Subscription:
        - Endpoint:
            Fn::GetOptionSetting:
              OptionName: AlarmEmail
              DefaultValue: "nobody@amazon.com"
          Protocol: email
  QueueDepthAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmDescription: "Alarm if queue depth grows beyond 10 messages"
      Namespace: "AWS/SQS"
      MetricName: ApproximateNumberOfMessagesVisible
      Dimensions:
        - Name: QueueName
          Value : { "Fn::GetAtt" : [ "MySQSQueue", "QueueName"] }
      Statistic: Sum
      Period: 300
      EvaluationPeriods: 1
      Threshold: 10
      ComparisonOperator: GreaterThanThreshold
      AlarmActions:
        - Ref: AlarmTopic
      InsufficientDataActions:
        - Ref: AlarmTopic

Outputs :
  QueueURL: 
    Description : "URL of newly created SQS Queue"
    Value : { Ref : "MySQSQueue" }
  QueueARN :
    Description : "ARN of newly created SQS Queue"
    Value : { "Fn::GetAtt" : [ "MySQSQueue", "Arn"]}
  QueueName :
    Description : "Name newly created SQS Queue"
    Value : { "Fn::GetAtt" : [ "MySQSQueue", "QueueName"]}
```

Pour plus d'informations sur les ressources utilisées dans cet exemple de fichier de configuration, consultez les références suivantes : 
+ [AWS::SQS::Queue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html)
+ [AWS::SNS::Topic](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html)
+ [AWS::CloudWatch::Alarm](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html)

Créez un fichier de configuration distinct nommé `options.config` et définissez les paramètres d'option personnalisés.

```
option_settings:
  "aws:elasticbeanstalk:customoption":
     VisibilityTimeout : 30
     AlarmEmail : "nobody@example.com"
```

Ces lignes indiquent à Elastic Beanstalk d'obtenir les valeurs des propriétés **et du point de terminaison d'abonnement à **VisibilityTimeout partir** des valeurs VisibilityTimeout du** point de terminaison d'abonnement dans un fichier de configuration (options.config dans notre exemple) qui contient une section option\$1settings **avec une section aws:elasticbeanstalk:customoption contenant une paire nom-valeur** contenant la valeur réelle à utiliser. Dans l'exemple ci-dessus, cela signifie que les valeurs 30 et « nobody@amazon.com » seraient utilisées. Pour plus d’informations sur `Fn::GetOptionSetting`, consultez [Fonctions](ebextensions-functions.md).

# Exemple : DynamoDB, et SNS CloudWatch


Ce fichier de configuration définit la table DynamoDB en tant que gestionnaire de session pour une application basée sur PHP utilisant le SDK pour PHP 2. AWS Pour utiliser cet exemple, vous devez disposer d'un profil d'instance IAM, qui est ajouté aux instances de votre environnement et utilisé pour accéder à la table DynamoDB.

 Vous pouvez télécharger ici l'exemple que nous utiliserons dans cette étape : [Exemple de prise en charge de session DynamoDB](https://elasticbeanstalk.s3.amazonaws.com/extensions/PHP-DynamoDB-Session-Support.zip). L'exemple contient les fichiers suivants :
+ Exemple d'application, `index.php`
+ Un fichier de configuration`dynamodb.config`, pour créer et configurer une table DynamoDB et d' AWS autres ressources et pour installer le logiciel sur les instances EC2 qui hébergent l'application dans un environnement Elastic Beanstalk
+ Un fichier de configuration `options.config` qui remplace les valeurs par défaut dans `dynamodb.config` par des paramètres propres à cette installation spécifique

**`index.php`**

```
<?php

// Include the SDK using the Composer autoloader
require '../vendor/autoload.php';

use Aws\DynamoDb\DynamoDbClient;

// Grab the session table name and region from the configuration file
list($tableName, $region) = file(__DIR__ . '/../sessiontable');
$tableName = rtrim($tableName);
$region = rtrim($region);

// Create a DynamoDB client and register the table as the session handler
$dynamodb = DynamoDbClient::factory(array('region' => $region));
$handler = $dynamodb->registerSessionHandler(array('table_name' => $tableName, 'hash_key' => 'username'));

// Grab the instance ID so we can display the EC2 instance that services the request
$instanceId = file_get_contents("http://169.254.169.254/latest/meta-data/instance-id");
?>
<h1>Elastic Beanstalk PHP Sessions Sample</h1>
<p>This sample application shows the integration of the Elastic Beanstalk PHP
container and the session support for DynamoDB from the AWS SDK for PHP 2.
Using DynamoDB session support, the application can be scaled out across
multiple web servers. For more details, see the
<a href="https://aws.amazon.com/php/">PHP Developer Center</a>.</p>

<form id="SimpleForm" name="SimpleForm" method="post" action="index.php">
<?php
echo 'Request serviced from instance ' . $instanceId . '<br/>';
echo '<br/>';

if (isset($_POST['continue'])) {
  session_start();
  $_SESSION['visits'] = $_SESSION['visits'] + 1;
  echo 'Welcome back ' . $_SESSION['username'] . '<br/>';
  echo 'This is visit number ' . $_SESSION['visits'] . '<br/>';
  session_write_close();
  echo '<br/>';
  echo '<input type="Submit" value="Refresh" name="continue" id="continue"/>';
  echo '<input type="Submit" value="Delete Session" name="killsession" id="killsession"/>';
} elseif (isset($_POST['killsession'])) {
  session_start();
  echo 'Goodbye ' . $_SESSION['username'] . '<br/>';
  session_destroy();
  echo 'Username: <input type="text" name="username" id="username" size="30"/><br/>';
  echo '<br/>';
  echo '<input type="Submit" value="New Session" name="newsession" id="newsession"/>';
} elseif (isset($_POST['newsession'])) {
  session_start();
  $_SESSION['username'] = $_POST['username'];
  $_SESSION['visits'] = 1;
  echo 'Welcome to a new session ' . $_SESSION['username'] . '<br/>';
  session_write_close();
  echo '<br/>';
  echo '<input type="Submit" value="Refresh" name="continue" id="continue"/>';
  echo '<input type="Submit" value="Delete Session" name="killsession" id="killsession"/>';
} else {
  echo 'To get started, enter a username.<br/>';
  echo '<br/>';
  echo 'Username: <input type="text" name="username" id="username" size="30"/><br/>';
  echo '<input type="Submit" value="New Session" name="newsession" id="newsession"/>';
}
?>
</form>
```

**`.ebextensions/dynamodb.config`**

```
Resources:
  SessionTable:
    Type: AWS::DynamoDB::Table
    Properties:
      KeySchema: 
        HashKeyElement:
          AttributeName:
            Fn::GetOptionSetting:
              OptionName : SessionHashKeyName
              DefaultValue: "username"
          AttributeType:
            Fn::GetOptionSetting:
              OptionName : SessionHashKeyType
              DefaultValue: "S"
      ProvisionedThroughput:
        ReadCapacityUnits:
          Fn::GetOptionSetting:
            OptionName : SessionReadCapacityUnits
            DefaultValue: 1
        WriteCapacityUnits:
          Fn::GetOptionSetting:
            OptionName : SessionWriteCapacityUnits
            DefaultValue: 1

  SessionWriteCapacityUnitsLimit:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmDescription: { "Fn::Join" : ["", [{ "Ref" : "AWSEBEnvironmentName" }, " write capacity limit on the session table." ]]}
      Namespace: "AWS/DynamoDB"
      MetricName: ConsumedWriteCapacityUnits
      Dimensions:
        - Name: TableName
          Value: { "Ref" : "SessionTable" }
      Statistic: Sum
      Period: 300
      EvaluationPeriods: 12
      Threshold:
          Fn::GetOptionSetting:
            OptionName : SessionWriteCapacityUnitsAlarmThreshold
            DefaultValue: 240
      ComparisonOperator: GreaterThanThreshold
      AlarmActions:
        - Ref: SessionAlarmTopic
      InsufficientDataActions:
        - Ref: SessionAlarmTopic

  SessionReadCapacityUnitsLimit:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmDescription: { "Fn::Join" : ["", [{ "Ref" : "AWSEBEnvironmentName" }, " read capacity limit on the session table." ]]}
      Namespace: "AWS/DynamoDB"
      MetricName: ConsumedReadCapacityUnits
      Dimensions:
        - Name: TableName
          Value: { "Ref" : "SessionTable" }
      Statistic: Sum
      Period: 300
      EvaluationPeriods: 12
      Threshold:
          Fn::GetOptionSetting:
            OptionName : SessionReadCapacityUnitsAlarmThreshold
            DefaultValue: 240
      ComparisonOperator: GreaterThanThreshold
      AlarmActions:
        - Ref: SessionAlarmTopic
      InsufficientDataActions:
        - Ref: SessionAlarmTopic

  SessionThrottledRequestsAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmDescription: { "Fn::Join" : ["", [{ "Ref" : "AWSEBEnvironmentName" }, ": requests are being throttled." ]]}
      Namespace: AWS/DynamoDB
      MetricName: ThrottledRequests
      Dimensions:
        - Name: TableName
          Value: { "Ref" : "SessionTable" }
      Statistic: Sum
      Period: 300
      EvaluationPeriods: 1
      Threshold: 
        Fn::GetOptionSetting:
          OptionName: SessionThrottledRequestsThreshold
          DefaultValue: 1
      ComparisonOperator: GreaterThanThreshold
      AlarmActions:
        - Ref: SessionAlarmTopic
      InsufficientDataActions:
        - Ref: SessionAlarmTopic

  SessionAlarmTopic:
    Type: AWS::SNS::Topic
    Properties:
      Subscription:
        - Endpoint:
            Fn::GetOptionSetting:
              OptionName: SessionAlarmEmail
              DefaultValue: "nobody@amazon.com"
          Protocol: email

files:
  "/var/app/sessiontable":
    mode: "000444"
    content: |
      `{"Ref" : "SessionTable"}`
      `{"Ref" : "AWS::Region"}`

  "/var/app/composer.json":
    mode: "000744"
    content:
      {
        "require": {
           "aws/aws-sdk-php": "*"
        }
      }

container_commands:
 "1-install-composer":
   command: "cd /var/app; curl -s http://getcomposer.org/installer | php"
 "2-install-dependencies":
   command: "cd /var/app; php composer.phar install"
 "3-cleanup-composer":
   command: "rm -Rf /var/app/composer.*"
```

Dans le modèle de fichier de configuration, nous commençons par créer la table DynamoDB et configurer la structure de clé primaire pour la table et les unités de capacités afin d'allouer des ressources suffisantes pour offrir le débit demandé. Ensuite, nous créons des CloudWatch alarmes pour `WriteCapacity` et`ReadCapacity`. Nous créons une rubrique SNS qui envoie un e-mail à « nobody@amazon.com » si le seuil d'alarme est dépassé. 

Après avoir créé et configuré nos AWS ressources pour notre environnement, nous devons personnaliser les instances EC2. Nous utilisons cette `files` clé pour transmettre les détails de la table DynamoDB aux instances EC2 de notre environnement et pour ajouter un « require » dans `composer.json` le fichier du SDK AWS pour PHP 2. Enfin, nous exécutons des commandes de conteneur pour installer Composer, les dépendances requises, puis nous supprimons le programme d'installation.

**`.ebextensions/options.config`**

```
option_settings:
  "aws:elasticbeanstalk:customoption":
     SessionHashKeyName                      : username
     SessionHashKeyType                      : S
     SessionReadCapacityUnits                : 1
     SessionReadCapacityUnitsAlarmThreshold  : 240
     SessionWriteCapacityUnits               : 1 
     SessionWriteCapacityUnitsAlarmThreshold : 240
     SessionThrottledRequestsThreshold       : 1
     SessionAlarmEmail                       : me@example.com
```

Remplacez la SessionAlarmEmail valeur par l'e-mail dans lequel vous souhaitez que les notifications d'alarme soient envoyées. Le fichier `options.config` contient les valeurs utilisées pour certaines des variables définies dans `dynamodb.config`. Par exemple, `dynamodb.config` contient les lignes suivantes :

```
Subscription:
  - Endpoint:
      Fn::GetOptionSetting:
        OptionName: SessionAlarmEmail
        DefaultValue: "nobody@amazon.com"
```

**Ces lignes indiquent à Elastic Beanstalk d'obtenir la valeur de la propriété Endpoint à **SessionAlarmEmail**partir de la valeur d'un `options.config` fichier de configuration (dans notre exemple d'application) qui contient une section option\$1settings **avec** une section aws:elasticbeanstalk:customoption contenant une paire nom-valeur contenant la valeur réelle à utiliser.** Dans l'exemple ci-dessus, la valeur **SessionAlarmEmail**serait affectée à ce moyen`nobody@amazon.com`.

Pour plus d'informations sur les CloudFormation ressources utilisées dans cet exemple, consultez les références suivantes :
+ [AWS::DynamoDB::Table](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html)
+ [AWS::CloudWatch::Alarm](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html)
+ [AWS::SNS::Topic](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html)