

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Adicionar e personalizar recursos do ambiente do Elastic Beanstalk
<a name="environment-resources"></a>

Você também pode personalizar seus recursos de ambiente que são parte do ambiente do Elastic Beanstalk. Por exemplo, você pode querer adicionar uma fila do Amazon SQS e um alarme sobre a profundidade da fila, ou você pode querer adicionar um cluster da Amazon. ElastiCache Você pode personalizar facilmente seu ambiente ao mesmo tempo que implanta a versão do aplicativo incluindo um arquivo de configuração com o pacote de origem.

Você pode usar a `Resources` chave em um [arquivo de configuração](ebextensions.md) para criar e personalizar AWS recursos em seu ambiente. Os recursos definidos nos arquivos de configuração são adicionados ao CloudFormation modelo usado para iniciar seu ambiente. Todos os [tipos de CloudFormation recursos](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html) são compatíveis.

**nota**  
Sempre que você adicionar um recurso que não seja gerenciado pelo Elastic Beanstalk, não se esqueça de adicionar uma política de usuário com as permissões AWS Identity and Access Management apropriadas para seus usuários (IAM). As [políticas de usuário gerenciadas](AWSHowTo.iam.managed-policies.md) que o Elastic Beanstalk fornece apenas permissões de cobertura para recursos gerenciados pelo Elastic Beanstalk.

Por exemplo, o arquivo de configuração a seguir adiciona um gancho de ciclo de vida do Auto Scaling ao grupo de Auto Scaling padrão criado pelo 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"] }
```

Este exemplo define três recursos: `hookrole`, `hooktopic` e `lifecyclehook`. Os dois primeiros recursos são uma função do IAM, que concede permissão ao Amazon EC2 Auto Scaling para publicar mensagens no Amazon SNS, e um tópico do SNS, que retransmite mensagens do grupo Auto Scaling para um endereço de e-mail. O Elastic Beanstalk cria esses recursos com as propriedades e os tipos especificados.

O recurso final, `lifecyclehook`, é o ciclo de vida do gancho propriamente dito:

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

A definição de gancho do ciclo de vida usa duas [funções](ebextensions-functions.md) para preencher valores para as propriedades do gancho. `{ "Ref" : "AWSEBAutoScalingGroup" }` recupera o nome do grupo de Auto Scaling criado pelo Elastic Beanstalk para o ambiente. `AWSEBAutoScalingGroup` é um dos [nomes de recurso](customize-containers-format-resources-eb.md) padrão fornecidos pelo Elastic Beanstalk.

Para `[AWS::IAM::Role](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html#d0e48356)`, `Ref` retorna somente o nome da função, não o nome de região da Amazon (ARN). Para obter o ARN para o parâmetro `RoleARN`, use outra função intrínseca, `Fn::GetAtt`, que pode obter qualquer atributo de um recurso. `RoleARN: { "Fn::GetAtt" : [ "hookrole", "Arn"] }` obtém o atributo `Arn` do recurso `hookrole`.

`{ "Ref" : "hooktopic" }` obtém o ARN do tópico do Amazon SNS criado anteriormente no arquivo de configuração. O valor retornado por `Ref` varia de acordo com o tipo de recurso e pode ser encontrado no [tópico CloudFormation do Guia do Usuário para o tipo de AWS::SNS::Topic recurso](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html#d0e62250).

# Modificar os recursos criados pelo Elastic Beanstalk para o seu ambiente
<a name="customize-containers-format-resources-eb"></a>

Os recursos que o Elastic Beanstalk cria para o seu ambiente têm nomes. Você pode usar esses nomes para obter informações sobre os recursos com uma [função](ebextensions-functions.md)ou modificar as propriedades nos recursos para personalizar seu comportamento. Este tópico descreve os AWS recursos que o Elastic Beanstalk usa nos diferentes tipos de ambientes.

**nota**  
O tópico anterior, [Recursos personalizados](environment-resources.md), fornece alguns casos de uso e exemplos para personalizar recursos de ambientes. Você também pode encontrar mais exemplos de arquivos de configuração no tópico posterior: [Exemplos de recursos personalizados](customize-environment-resources-examples.md). 

Os ambientes de servidor da web tem os recursos a seguir.

**Ambientes de servidor da web**
+ `AWSEBAutoScalingGroup`([AWS::AutoScaling::AutoScalingGrupo](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html)) — O grupo Auto Scaling anexado ao seu ambiente.
+ Um dos dois recursos a seguir.
  + `AWSEBAutoScalingLaunchConfiguration`([AWS::AutoScaling::LaunchConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html)) — A configuração de lançamento anexada ao grupo de Auto Scaling do seu ambiente.
  + `AWSEBEC2LaunchTemplate`([AWS::EC2::LaunchTemplate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html)) — O modelo de lançamento do Amazon EC2 usado pelo grupo de Auto Scaling do seu ambiente.
**nota**  
Se o seu ambiente utilizar funcionalidades que requerem modelos de execução do Amazon EC2, e a sua política de usuário não tiver as permissões necessárias, a criação ou atualização do ambiente poderá falhar. [Use a política de [usuário gerenciada **AdministratorAccess- AWSElastic Beanstalk** ou adicione as permissões necessárias à sua política](AWSHowTo.iam.managed-policies.md) personalizada.](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)) — Seu ambiente.
+ `AWSEBSecurityGroup`([AWS::EC2::SecurityGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html)) — O grupo de segurança anexado ao seu grupo de Auto Scaling.
+ `AWSEBRDSDatabase`([AWS: :RDS:: DBInstance](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html)) — A instância de banco de dados Amazon RDS conectada ao seu ambiente (se aplicável).

Em um ambiente com balanceamento de carga, é possível acessar recursos adicionais relacionados ao load balancer. Os load balancers clássicos têm um recurso para o load balancer e outro para o grupo de segurança anexado a ele. Os load balancers de rede e de aplicativos têm recursos adicionais para listener padrão do load balancer para a regra do listener e para o grupo de destino.

**Ambientes de carga equilibrada**
+ `AWSEBLoadBalancer`([AWS::ElasticLoadBalancing::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html)) — O balanceador de carga clássico do seu ambiente.
+ `AWSEBV2LoadBalancer`([AWS::ElasticLoadBalancingV2::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html)) — O balanceador de carga do aplicativo ou da rede do seu ambiente.
+ `AWSEBLoadBalancerSecurityGroup`([AWS::EC2::SecurityGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html)) — Somente em uma [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/) personalizada (Amazon VPC), o nome do grupo de segurança que o Elastic Beanstalk cria para o balanceador de carga. Em uma VPC padrão ou no EC2 Classic, o Elastic Load Balancing atribui um grupo de segurança padrão ao balanceador de carga.
+ `AWSEBV2LoadBalancerListener`([AWS::ElasticLoadBalancingV2::Listener](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html)) — Um ouvinte que permite que o balanceador de carga verifique as solicitações de conexão e as encaminhe para um ou mais grupos-alvo.
+ `AWSEBV2LoadBalancerListenerRule`([AWS::ElasticLoadBalancingV2::ListenerRule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html)) — Define em quais solicitações um ouvinte do Elastic Load Balancing age e a ação que ele executa.
+ `AWSEBV2LoadBalancerTargetGroup`([AWS::ElasticLoadBalancingV2::TargetGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html)) — Um grupo-alvo do Elastic Load Balancing que encaminha solicitações para um ou mais destinos registrados, como instâncias do Amazon EC2.

Ambientes de operador têm recursos para a fila do SQS que armazena as solicitações de entrada, e uma tabela do Amazon DynamoDB que as instâncias usam para escolher o líder.

**Ambientes de operador**
+ `AWSEBWorkerQueue`([AWS::SQS::Queue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html)) — A fila do Amazon SQS da qual o daemon extrai solicitações que precisam ser processadas.
+ `AWSEBWorkerDeadLetterQueue`([AWS::SQS::Queue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html)) — A fila do Amazon SQS que armazena mensagens que não podem ser entregues ou que não foram processadas com sucesso pelo daemon.
+ `AWSEBWorkerCronLeaderRegistry`([AWS::DynamoDB::Table](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html)) — A tabela do Amazon DynamoDB que é o registro interno usado pelo daemon para tarefas periódicas.

# Outras chaves CloudFormation de modelo
<a name="ebextensions-otherkeys"></a>

Já introduzimos chaves de arquivo de configuração`Resources`, CloudFormation como`files`, `packages` e. O Elastic Beanstalk adiciona o conteúdo dos arquivos de configuração ao modelo que dá suporte CloudFormation ao seu ambiente, para que você possa CloudFormation usar outras seções para realizar tarefas avançadas em seus arquivos de configuração.

**Topics**
+ [Parâmetros](#ebextensions-otherkeys-parameters)
+ [Saídas](#ebextensions-otherkeys-outputs)
+ [Mapeamentos](#ebextensions-otherkeys-mappings)

## Parâmetros
<a name="ebextensions-otherkeys-parameters"></a>

Os parâmetros são uma alternativa para as [opções personalizadas](configuration-options-custom.md) próprias do Elastic Beanstalk que podem ser usadas para definir valores utilizados em outros lugares nos arquivos de configuração. Do mesmo modo que as opções personalizadas, você pode usar parâmetros para reunir valores configuráveis pelo usuário em um único lugar. Ao contrário das opções personalizadas, você não pode usar a API do Elastic Beanstalk para definir valores de parâmetros, e o número de parâmetros que você pode definir em um modelo é limitado por. CloudFormation

Um dos motivos pelos quais você pode querer usar parâmetros é fazer com que seus arquivos de configuração funcionem como CloudFormation modelos. Se você usar parâmetros em vez de opções personalizadas, poderá usar o arquivo de configuração para criar o mesmo recurso em CloudFormation sua própria pilha. Por exemplo, você pode ter um arquivo de configuração que adiciona um sistema de arquivos do Amazon EFS ao seu ambiente para fins de teste, e depois usar o mesmo arquivo para criar um sistema de arquivos independentes que não estejam vinculados ao ciclo de vida do seu ambiente para ser usado em produção.

O exemplo a seguir mostra a utilização de parâmetros para reunir valores configuráveis pelo usuário no início de um arquivo de configuração.

**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) — Parâmetros**  

```
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: ""
```

## Saídas
<a name="ebextensions-otherkeys-outputs"></a>

Você pode usar um bloco de `Outputs` para exportar informações sobre os recursos criados para o CloudFormation. Em seguida, você pode usar a `Fn::ImportValue` função para inserir o valor em um CloudFormation modelo fora do Elastic Beanstalk.

O exemplo a seguir cria um tópico do Amazon SNS e exporta seu ARN para CloudFormation com o nome. `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
```

Em um arquivo de configuração para um ambiente diferente ou em um CloudFormation modelo fora do Elastic Beanstalk, você pode `Fn::ImportValue` usar a função para obter o ARN exportado. Este exemplo atribui o valor exportado a uma propriedade do ambiente chamada `TOPIC_ARN`.

**Example env.config**  

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

## Mapeamentos
<a name="ebextensions-otherkeys-mappings"></a>

Você pode usar um mapeamento para armazenar pares de chave-valor organizados por namespace. Um mapeamento pode ajudar você a organizar os valores que utiliza em toda as configurações, ou alterar o valor de um parâmetro dependendo de outro valor. Por exemplo, a configuração a seguir define o valor de um parâmetro de ID de conta com base na região atual.

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

```
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
```

# Funções
<a name="ebextensions-functions"></a>

É possível usar funções nos arquivos de configuração para preencher valores de propriedades de recursos com informações de outros recursos ou das definições de opção de configuração do Elastic Beanstalk. O Elastic CloudFormation Beanstalk suporta `Ref` funções `Fn::GetAtt` (`Fn::Join`,,) e uma função específica do Elastic Beanstalk,. `Fn::GetOptionSetting`

**Topics**
+ [Ref.](#ebextensions-functions-ref)
+ [Fã:: GetAtt](#ebextensions-functions-getatt)
+ [Fn::Join](#ebextensions-functions-join)
+ [Fã:: GetOptionSetting](#ebextensions-functions-getoptionsetting)

## Ref.
<a name="ebextensions-functions-ref"></a>

Use `Ref` para recuperar a representação de string padrão de um AWS recurso. O valor retornado por `Ref`depende do tipo de recurso e, às vezes, depende também de outros fatores. Por exemplo, um grupo de segurança ([AWS::EC2::SecurityGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html)) retorna o nome ou a ID do grupo de segurança, dependendo se o grupo de segurança está em uma [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/) (Amazon VPC) padrão, EC2 clássica ou em uma VPC personalizada.

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

**nota**  
Para obter detalhes sobre cada tipo de recurso, incluindo os valores de retorno de `Ref`, consulte [Referência de tipos de recursos da AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html) no *Guia do usuário do CloudFormation *.

A partir do [gancho de ciclo de vida do Auto Scaling](environment-resources.md) demonstrativo:

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

Você também pode usar `Ref` para recuperar o valor de um CloudFormation parâmetro definido em outro lugar no mesmo arquivo ou em um arquivo de configuração diferente.

## Fã:: GetAtt
<a name="ebextensions-functions-getatt"></a>

Use `Fn::GetAtt` para recuperar o valor de um atributo em um AWS recurso.

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

A partir do [gancho de ciclo de vida do Auto Scaling](environment-resources.md) demonstrativo:

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

Consulte [Fn:: GetAtt](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html) para obter mais informações.

## Fn::Join
<a name="ebextensions-functions-join"></a>

Use `Fn::Join` para combinar strings com um delimitador. As strings podem ser codificadas ou usar a saída de `Fn::GetAtt` ou `Ref`.

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

Consulte [Fn::Join](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-join.html) para obter mais informações.

## Fã:: GetOptionSetting
<a name="ebextensions-functions-getoptionsetting"></a>

Use `Fn::GetOptionSetting` para recuperar o valor de uma definição de [opção de configuração](command-options.md) aplicada ao ambiente. 

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

No exemplo de [armazenamento de chaves privadas](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"
```

# Exemplos de recursos personalizados
<a name="customize-environment-resources-examples"></a>

Veja a seguir uma lista de arquivos de configuração demonstrativos que podem ser usados para personalizar os ambientes do Elastic Beanstalk:
+ [DynamoDB CloudWatch e SNS](https://elasticbeanstalk.s3.amazonaws.com/extensions/DynamoDB-with-CloudWatch-Alarms.config)
+ [Elastic Load Balancing e CloudWatch](https://elasticbeanstalk.s3.amazonaws.com/extensions/ELB-Alarms.config)
+ [ElastiCache](https://elasticbeanstalk.s3.amazonaws.com/extensions/ElastiCache.config)
+ [RDS e CloudWatch](https://elasticbeanstalk.s3.amazonaws.com/extensions/RDS-Alarms.config)
+ [SQS, SNS e CloudWatch](https://elasticbeanstalk.s3.amazonaws.com/extensions/SNS.config)

Os subtópicos desta página fornecem alguns exemplos estendidos para adicionar e configurar recursos personalizados em um ambiente do Elastic Beanstalk.

**Topics**
+ [Exemplo: ElastiCache.](customize-environment-resources-elasticache.md)
+ [Exemplo: SQS e CloudWatch SNS](customize-environment-resources-sqs.md)
+ [Exemplo: DynamoDB CloudWatch e SNS](customize-environment-resources-dynamodb.md)

# Exemplo: ElastiCache.
<a name="customize-environment-resources-elasticache"></a>

Os exemplos a seguir adicionam um ElastiCache cluster da Amazon às plataformas EC2-Classic e EC2-VPC (ambas padrão e personalizadas [Amazon Virtual Private Cloud (Amazon](https://docs.aws.amazon.com/vpc/latest/userguide/) VPC)). Para obter mais informações sobre essas plataformas e como você pode determinar quais são compatíveis com o EC2 para sua região e sua AWS conta, consulte[https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-platforms.html](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-platforms.html). Depois, consulte a seção neste tópico que se aplica à sua plataforma.
+ [Plataformas EC2-Classic](#customize-environment-resources-elasticache-classic)
+ [EC2-VPC (padrão)](#customize-environment-resources-elasticache-defaultvpc)
+ [EC2-VPC (personalizado)](#customize-environment-resources-elasticache-targetedvpc)

## Plataformas EC2-Classic
<a name="customize-environment-resources-elasticache-classic"></a>

Esse exemplo adiciona um ElastiCache cluster da Amazon a um ambiente com instâncias lançadas na plataforma EC2-Classic. Todas as propriedades listadas neste exemplo são as propriedades mínimas necessárias que devem ser definidas para cada tipo de recurso. Você pode baixar o exemplo em [ElastiCacheexample](https://elasticbeanstalk.s3.amazonaws.com/extensions/ElastiCache.config). 

**nota**  
Este exemplo cria AWS recursos, pelos quais você pode ser cobrado. Para obter mais informações sobre AWS preços, consulte[https://aws.amazon.com/pricing/](https://aws.amazon.com/pricing/). Alguns serviços fazem parte do nível de uso AWS gratuito. Se for um cliente novo, você pode testar esses serviços gratuitamente. Consulte [https://aws.amazon.com/free/](https://aws.amazon.com/free/) para obter mais informações.

Para usar esse exemplo, faça o seguinte:

1. Crie um diretório `[.ebextensions](ebextensions.md)` no diretório de nível superior do pacote de origem. 

1. Crie dois arquivos de configuração com a extensão `.config` e os coloque no diretório `.ebextensions`. Um arquivo de configuração define os recursos, e o outro arquivo de configuração define as opções.

1. Implante a aplicação no Elastic Beanstalk.

   YAML depende de um recuo consistente. Compare o nível de recuo ao substituir o conteúdo em um arquivo de configuração de exemplo e se confira se o editor de texto usa espaços, e não caracteres de tabulação, como recuo.

Crie um arquivo de configuração (por exemplo, `elasticache.config`) que define os recursos. Neste exemplo, criamos o ElastiCache cluster especificando o nome do recurso do ElastiCache cluster (`MyElastiCache`), declarando seu tipo e configurando as propriedades do cluster. O exemplo faz referência ao nome do recurso do grupo de ElastiCache segurança que é criado e definido nesse arquivo de configuração. Em seguida, criamos um grupo ElastiCache de segurança. Definimos o nome deste recurso, declaramos seu tipo e adicionamos uma descrição para o security group. Por fim, definimos as regras de entrada do grupo de ElastiCache segurança para permitir o acesso somente de instâncias dentro do grupo de ElastiCache segurança (`MyCacheSecurityGroup`) e do grupo de segurança do Elastic Beanstalk (). `AWSEBSecurityGroup` O nome do parâmetro, `AWSEBSecurityGroup`, é o nome do recurso fixo fornecido pelo Elastic Beanstalk. Você deve adicionar regras de entrada `AWSEBSecurityGroup` ao seu grupo de ElastiCache segurança para que seu aplicativo Elastic Beanstalk se conecte às instâncias em seu 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
```

Para obter mais informações sobre os recursos usados neste exemplo de arquivo de configuração, consulte as seguintes referências: 
+ [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)

Crie um arquivo de configuração separado chamado `options.config` e defina as opções de configurações personalizadas. 

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

Essas linhas fazem com que o Elastic Beanstalk obtenha os valores das propriedades,, e Engine dos valores **CacheNodeType,** e Engine em um arquivo **CacheNodeTypede NumCacheNodes** configuração (options.config em nosso exemplo) que contém uma seção option\$1settings **com** uma seção aws:elasticbeanstalk:customoption que contém um par nome-valor que contém o valor real a ser usado. NumCacheNodes No exemplo acima, isso significa que cache.m1.small, 1 e Memcached seriam usados para os valores. Para saber mais sobre o `Fn::GetOptionSetting`, consulte [Funções](ebextensions-functions.md).

## EC2-VPC (padrão)
<a name="customize-environment-resources-elasticache-defaultvpc"></a>

Esse exemplo adiciona um ElastiCache cluster da Amazon a um ambiente com instâncias lançadas na plataforma EC2-VPC. A informação nessa seção se aplica especificamente a um cenário em que o EC2 inicia instâncias na VPC padrão. Todas as propriedades neste exemplo são as mínimas necessárias que devem ser definidas para cada tipo de recurso. Para obter mais informações sobre o padrão VPCs, consulte [Sua VPC e sub-redes padrão](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html).

**nota**  
Este exemplo cria AWS recursos, pelos quais você pode ser cobrado. Para obter mais informações sobre AWS preços, consulte[https://aws.amazon.com/pricing/](https://aws.amazon.com/pricing/). Alguns serviços fazem parte do nível de uso AWS gratuito. Se for um cliente novo, você pode testar esses serviços gratuitamente. Consulte [https://aws.amazon.com/free/](https://aws.amazon.com/free/) para obter mais informações.

Para usar esse exemplo, faça o seguinte:

1. Crie um diretório `[.ebextensions](ebextensions.md)` no diretório de nível superior do pacote de origem. 

1. Crie dois arquivos de configuração com a extensão `.config` e os coloque no diretório `.ebextensions`. Um arquivo de configuração define os recursos, e o outro arquivo de configuração define as opções.

1. Implante a aplicação no Elastic Beanstalk.

   YAML depende de um recuo consistente. Compare o nível de recuo ao substituir o conteúdo em um arquivo de configuração de exemplo e se confira se o editor de texto usa espaços, e não caracteres de tabulação, como recuo.

Agora nomeie o arquivo de configuração de recursos `elasticache.config`. Para criar o ElastiCache cluster, este exemplo especifica o nome do recurso do ElastiCache cluster (`MyElastiCache`), declara seu tipo e, em seguida, configura as propriedades do cluster. O exemplo faz referência ao ID do recurso do security group que criamos e definimos neste arquivo de configuração.

Depois, criamos um security group do EC2. Definimos o nome deste recurso, declaramos o tipo, adicionamos uma descrição e definimos as regras de entrada no security group para permitir o acesso somente a partir de instâncias dentro do security group do Elastic Beanstalk (`AWSEBSecurityGroup`). (O nome do parâmetro,`AWSEBSecurityGroup`, é um nome de recurso fixo fornecido pelo Elastic Beanstalk. Você deve adicionar regras de entrada `AWSEBSecurityGroup` ao seu grupo de ElastiCache segurança para que seu aplicativo Elastic Beanstalk se conecte às instâncias em seu cluster.) ElastiCache 

As regras de entrada para o security group do EC2 também definem o protocolo de IP e os números de portas em que os nós de cache podem aceitar conexões. Para Redis, o número padrão da porta é `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"
```

Para obter mais informações sobre os recursos usados neste exemplo de arquivo de configuração, consulte as seguintes referências: 
+ [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)

Depois, nomeie o arquivo de configuração de opções `options.config` e defina as opções de configurações personalizadas. 

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

Essas linhas instruem o Elastic Beanstalk para obter os valores para as propriedades `CacheNodeType`, `NumCacheNodes`, `Engine` e `CachePort` dos valores `CacheNodeType`, `NumCacheNodes`, `Engine` e `CachePort` em um arquivo de configuração (`options.config` em nosso exemplo). Esse arquivo inclui uma seção de `aws:elasticbeanstalk:customoption` (em `option_settings`) que contém pares de nome e valor com o valores reais para serem usados. No exemplo anterior, `cache.t2.micro`, `1`, `redis` e `6379` seriam usados para os valores. Para saber mais sobre o `Fn::GetOptionSetting`, consulte [Funções](ebextensions-functions.md).

## EC2-VPC (personalizado)
<a name="customize-environment-resources-elasticache-targetedvpc"></a>

Se você criar uma VPC personalizada na plataforma EC2-VPC e especificá-la como a VPC na qual o EC2 executa instâncias, o processo de adicionar um ElastiCache cluster Amazon ao seu ambiente será diferente daquele de uma VPC padrão. A principal diferença é que você precisa criar um grupo de sub-redes para o ElastiCache cluster. Todas as propriedades neste exemplo são as mínimas necessárias que devem ser definidas para cada tipo de recurso.

**nota**  
Este exemplo cria AWS recursos, pelos quais você pode ser cobrado. Para obter mais informações sobre AWS preços, consulte[https://aws.amazon.com/pricing/](https://aws.amazon.com/pricing/). Alguns serviços fazem parte do nível de uso AWS gratuito. Se for um cliente novo, você pode testar esses serviços gratuitamente. Consulte [https://aws.amazon.com/free/](https://aws.amazon.com/free/) para obter mais informações.

Para usar esse exemplo, faça o seguinte:

1. Crie um diretório `[.ebextensions](ebextensions.md)` no diretório de nível superior do pacote de origem. 

1. Crie dois arquivos de configuração com a extensão `.config` e os coloque no diretório `.ebextensions`. Um arquivo de configuração define os recursos, e o outro arquivo de configuração define as opções.

1. Implante a aplicação no Elastic Beanstalk.

   YAML depende de um recuo consistente. Compare o nível de recuo ao substituir o conteúdo em um arquivo de configuração de exemplo e se confira se o editor de texto usa espaços, e não caracteres de tabulação, como recuo.

Agora nomeie o arquivo de configuração de recursos `elasticache.config`. Para criar o ElastiCache cluster, este exemplo especifica o nome do recurso do ElastiCache cluster (`MyElastiCache`), declara seu tipo e, em seguida, configura as propriedades do cluster. As propriedades no exemplo fazem referência ao nome do grupo de sub-redes do ElastiCache cluster, bem como ao ID do recurso do grupo de segurança que criamos e definimos nesse arquivo de configuração.

Depois, criamos um security group do EC2. Definimos o nome deste recurso, declaramos o tipo, adicionamos uma descrição, o ID da VPC, e definimos as regras de entrada no security group para permitir o acesso somente a partir das instâncias dentro do security group do Elastic Beanstalk (`AWSEBSecurityGroup`). (O nome do parâmetro,`AWSEBSecurityGroup`, é um nome de recurso fixo fornecido pelo Elastic Beanstalk. Você deve adicionar regras de entrada `AWSEBSecurityGroup` ao seu grupo de ElastiCache segurança para que seu aplicativo Elastic Beanstalk se conecte às instâncias em seu cluster.) ElastiCache 

As regras de entrada para o security group do EC2 também definem o protocolo de IP e os números de portas em que os nós de cache podem aceitar conexões. Para Redis, o número padrão da porta é `6379`. Por fim, esse exemplo cria um grupo de sub-redes para o ElastiCache cluster. Definimos o nome desse recurso, declaramos seu tipo e adicionamos uma descrição e um ID da sub-rede no grupo de sub-rede.

**nota**  
Recomendamos que você use sub-redes privadas para o ElastiCache cluster. Para obter mais informações sobre uma VPC com uma sub-rede privada, consulte [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"
```

Para obter mais informações sobre os recursos usados neste exemplo de arquivo de configuração, consulte as seguintes referências: 
+ [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)

Depois, nomeie o arquivo de configuração de opções `options.config` e defina as opções de configurações personalizadas.

**nota**  
No exemplo a seguir, substitua o exemplo `CacheSubnets` e os valores de `VpcId` com suas próprias sub-redes e 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
```

Essas linhas instruem o Elastic Beanstalk para obter os valores para as propriedades `CacheNodeType`, `NumCacheNodes`, `Engine`, `CachePort`, `CacheSubnets` e `VpcId` dos valores `CacheNodeType`, `NumCacheNodes`, `Engine`, `CachePort`, `CacheSubnets` e `VpcId` em um arquivo de configuração (`options.config` em nosso exemplo). Esse arquivo inclui uma seção de `aws:elasticbeanstalk:customoption` (em `option_settings`) que contém pares de nome e valor com os valores de exemplo. No exemplo acima, `cache.t2.micro`, `1`, `redis`, `6379`, `subnet-1a1a1a1a`, `subnet-2b2b2b2b`, `subnet-3c3c3c3c` e `vpc-4d4d4d4d` seriam usados para os valores. Para saber mais sobre o `Fn::GetOptionSetting`, consulte [Funções](ebextensions-functions.md).

# Exemplo: SQS e CloudWatch SNS
<a name="customize-environment-resources-sqs"></a>

Este exemplo adiciona uma fila do Amazon SQS e um alarme no comprimento da fila para o ambiente. As propriedades que você vê neste exemplo são as mínimas necessárias a serem definidas para cada um desses recursos. Você pode baixar o exemplo em [SQS, SNS e. CloudWatch](https://elasticbeanstalk.s3.amazonaws.com/extensions/SNS.config) 

**nota**  
Este exemplo cria AWS recursos, pelos quais você pode ser cobrado. Para obter mais informações sobre AWS preços, consulte[https://aws.amazon.com/pricing/](https://aws.amazon.com/pricing/). Alguns serviços fazem parte do nível de uso AWS gratuito. Se for um cliente novo, você pode testar esses serviços gratuitamente. Consulte [https://aws.amazon.com/free/](https://aws.amazon.com/free/) para obter mais informações.

Para usar esse exemplo, faça o seguinte:

1. Crie um diretório `[.ebextensions](ebextensions.md)` no diretório de nível superior do pacote de origem. 

1. Crie dois arquivos de configuração com a extensão `.config` e os coloque no diretório `.ebextensions`. Um arquivo de configuração define os recursos, e o outro arquivo de configuração define as opções.

1. Implante a aplicação no Elastic Beanstalk.

   YAML depende de um recuo consistente. Compare o nível de recuo ao substituir o conteúdo em um arquivo de configuração de exemplo e se confira se o editor de texto usa espaços, e não caracteres de tabulação, como recuo.

Crie um arquivo de configuração (por exemplo, sqs.config) que define os recursos. Neste exemplo, criamos uma fila SQS e definimos a propriedade `VisbilityTimeout` no recurso `MySQSQueue`. Em seguida, criamos um `Topic` SNS e especificamos que o e-mail seja enviado para `someone@example.com` quando o alarme for acionado. Por fim, criamos um CloudWatch alarme se a fila aumentar além de 10 mensagens. Na propriedade `Dimensions`, especificamos o nome da dimensão e o valor que representa a medida da dimensão. Usamos `Fn::GetAtt` para retornar o valor de `QueueName` do `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"]}
```

Para obter mais informações sobre os recursos usados neste exemplo de arquivo de configuração, consulte as seguintes referências: 
+ [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)

Crie um arquivo de configuração separado chamado `options.config` e defina as opções de configurações personalizadas.

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

Essas linhas instruem o Elastic Beanstalk a obter os valores das propriedades e Subscription Endpoint dos valores **VisibilityTimeout e** Subscription Endpoint em um arquivo **VisibilityTimeout de** configuração (options.config em nosso exemplo) que contém uma seção option\$1settings **com** uma seção aws:elasticbeanstalk:customoption que contém um par nome-valor que contém o valor real a ser usado. No exemplo acima, isso significa que 30 e "nobody@amazon.com" seriam usados para os valores. Para saber mais sobre o `Fn::GetOptionSetting`, consulte [Funções](ebextensions-functions.md).

# Exemplo: DynamoDB CloudWatch e SNS
<a name="customize-environment-resources-dynamodb"></a>

Esse arquivo de configuração configura a tabela do DynamoDB como um manipulador de sessão para um aplicativo baseado em PHP usando o SDK for PHP 2. AWS Para usar este exemplo, você deve ter um perfil de instância do IAM, que é adicionado às instâncias em seu ambiente e usado para acessar a tabela do DynamoDB.

 Você poderá fazer download do exemplo que usaremos nesta etapa em [Suporte de sessão do DynamoDB demonstrativo](https://elasticbeanstalk.s3.amazonaws.com/extensions/PHP-DynamoDB-Session-Support.zip). A amostra contém os seguintes arquivos:
+ O aplicativo de exemplo, `index.php`
+ Um arquivo de configuração,`dynamodb.config`, para criar e configurar uma tabela do DynamoDB e AWS outros recursos e instalar o software nas instâncias do EC2 que hospedam o aplicativo em um ambiente do Elastic Beanstalk
+ Um arquivo de configuração, `options.config`, que substitui os valores padrão em `dynamodb.config` por configurações específicas para essa determinada instalação

**`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.*"
```

No arquivo de configuração de exemplo, primeiro crie a tabela do DynamoDB e configure a chave primária da tabela e as unidades de capacidade para alocar recursos suficientes para fornecer a taxa de transferência solicitada. Em seguida, criamos CloudWatch alarmes para `WriteCapacity` e. `ReadCapacity` Criamos um tópico do SNS que envia um e-mail para "nobody@amazon.com" caso os limites de alarme sejam violados. 

Depois de criar e configurar nossos AWS recursos para nosso ambiente, precisamos personalizar as instâncias do EC2. Usamos a `files` chave para passar os detalhes da tabela do DynamoDB para as instâncias do EC2 em nosso ambiente, bem como adicionar um “require” no arquivo `composer.json` do SDK AWS for PHP 2. Por fim, executamos comandos de contêiner para instalar o Composer, as dependências necessárias e, em seguida, remover o instalador.

**`.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
```

Substitua o SessionAlarmEmail valor pelo e-mail para o qual você deseja que as notificações de alarme sejam enviadas. O arquivo `options.config` contém os valores usados para algumas das variáveis definidas em `dynamodb.config`. Por exemplo, `dynamodb.config` contém as seguintes linhas:

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

**Essas linhas que fazem com que o Elastic Beanstalk obtenha o valor da propriedade Endpoint a **SessionAlarmEmail**partir do valor em um `options.config` arquivo de configuração (em nosso aplicativo de amostra) que contém uma seção option\$1settings **com** uma seção aws:elasticbeanstalk:customoption que contém um par nome-valor que contém o valor real a ser usado.** No exemplo acima, isso significa que **SessionAlarmEmail**seria atribuído o valor`nobody@amazon.com`.

Para obter mais informações sobre os CloudFormation recursos usados neste exemplo, consulte as seguintes referências:
+ [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)