Iniciando com o AWS SDK no Symfony

Rafael Mello
4 min readNov 2, 2016

--

Bom dia pessoal,

Hoje venho iniciar uma nova sequencia de tutoriais, dessa vez voltado ao uso de serviços da AWS(Amazon Web Services) integrado com o Symfony.

Nessa primeira etapa, irei explicar a como instalar o SDK da Amazon no Symfony, quais configurações são necessárias e quais são e como chamar os serviços disponíveis. Nas próximas etapas entrei em detalhes sobre alguns serviços específicos, então não percam. ;)

Requisitos de conhecimento

Este guia requer que você possua alguns conhecimentos base, são eles:

  • Utilizando o composer
  • Como instalar e configurar o Symfony

Caso não os possua procure por demais guias neste mesmo blog ou pelas documentações iniciais para poder aprender a como instalar este serviço.

Versões do AWS SDK para PHP

No GitHub da AWS temos cinco distribuições do SDK disponíveis para PHP, são elas:

AWS SDK para PHP
aws/aws-sdk-php
SDK da AWS voltada para todas as aplicações em PHP.

AWS SDK para Symfony
aws/aws-sdk-php-symfony
Integra o “AWS SDK para PHP” com o Symfony;

AWS SDK para Laravel
aws/aws-sdk-php-laravel
Integra o “AWS SDK para PHP” com o Laravel nas versões 5 e 4;

AWS SDK para Zend Framework
aws/aws-sdk-php-zf2
Integra o “AWS SDK para PHP” com o Zend Framework 2;

AWS SDK para Silex
aws/aws-sdk-php-silex
Integra o “AWS SDK para PHP” com o Silex.

Neste post estaremos falando especificamente de sua versão para Symfony, mas caso queira utilizar uma das versões relacionadas a outras frameworks, basta clicar no link de seu respectivo pacote acima que você terá acesso a documentação oficial.

Instalando o AWS SDK para Symfony

A instalação da versão do AWS SDK para Symfony é feita diretamente pelo composer. Para isso, acesse a pasta de seu projeto e execute o comando abaixo.

$ composer require aws/aws-sdk-php-symfony

Após executar o comando acima, o composer irá instalar o SDK para Symfony na vendor de seu projeto. Feito isso, é será necessário carregar o bundle da AWS no kernel de sua aplicação(app/AppKernel.php).

class AppKernel extends Kernel
{
public function registerBundles()
{
return [
...
new Aws\Symfony\AwsBundle(),
];
}
...
}

Configurando o AWS SDK para Symfony

Após o bundle carregado no kernel de sua aplicação, a mesma poderá apresentar alguns erros devido a falta de configuração do AwsBundle. Então, antes de acessarmos o projeto novamente, vamos configurar o SDK da AWS adicionando no final do arquivo app/config/config.yml a seguinte configuração:

# AWS Configuration
aws:
version: latest
region: us-east-1 # Região onde os serviços estão hospedados
credentials: # Credenciais de acesso
key: 'not-a-real-key'
secret: 'not-a-real-secret'

Pronto, o SDK da AWS para Symfony está instalado e configurado e você já poderá acessar seu projeto normalmente, além usar os serviços da AWS carregados na framework.

Serviços da AWS carregados no Symfony

A lista poderá variar de acordo com as versões futuras do SDK que serão lançadas, caso queira saber pela própria framework os serviços carregados, você poderá listá-los utilizando o comando abaixo.

Symfony 2

$ php app/console debug:container | grep aws

Symfony 3

$ php bin/console debug:container | grep aws

Serviços carregados na versão 1.1.0 do SDK para Symfony

$ php bin/console debug:container | grep aws
aws.acm Aws\Acm\AcmClient
aws.apigateway Aws\ApiGateway\ApiGatewayClient
aws.autoscaling Aws\AutoScaling\AutoScalingClient
aws.cloudformation Aws\CloudFormation\CloudFormationClient
aws.cloudfront Aws\CloudFront\CloudFrontClient
aws.cloudhsm Aws\CloudHsm\CloudHsmClient
aws.cloudsearch Aws\CloudSearch\CloudSearchClient
aws.cloudsearchdomain Aws\CloudSearchDomain\CloudSearchDomainClient
aws.cloudtrail Aws\CloudTrail\CloudTrailClient
aws.cloudwatch Aws\CloudWatch\CloudWatchClient
aws.cloudwatchevents Aws\CloudWatchEvents\CloudWatchEventsClient
aws.cloudwatchlogs Aws\CloudWatchLogs\CloudWatchLogsClient
aws.codecommit Aws\CodeCommit\CodeCommitClient
aws.codedeploy Aws\CodeDeploy\CodeDeployClient
aws.codepipeline Aws\CodePipeline\CodePipelineClient
aws.cognitoidentity Aws\CognitoIdentity\CognitoIdentityClient
aws.cognitosync Aws\CognitoSync\CognitoSyncClient
aws.configservice Aws\ConfigService\ConfigServiceClient
aws.databasemigrationservice Aws\DatabaseMigrationService\DatabaseMigrationServiceClient
aws.datapipeline Aws\DataPipeline\DataPipelineClient
aws.devicefarm Aws\DeviceFarm\DeviceFarmClient
aws.directconnect Aws\DirectConnect\DirectConnectClient
aws.directoryservice Aws\DirectoryService\DirectoryServiceClient
aws.dynamodb Aws\DynamoDb\DynamoDbClient
aws.dynamodbstreams Aws\DynamoDbStreams\DynamoDbStreamsClient
aws.ec2 Aws\Ec2\Ec2Client
aws.ecr Aws\Ecr\EcrClient
aws.ecs Aws\Ecs\EcsClient
aws.efs Aws\Efs\EfsClient
aws.elasticache Aws\ElastiCache\ElastiCacheClient
aws.elasticbeanstalk Aws\ElasticBeanstalk\ElasticBeanstalkClient
aws.elasticloadbalancing Aws\ElasticLoadBalancing\ElasticLoadBalancingClient
aws.elasticsearchservice Aws\ElasticsearchService\ElasticsearchServiceClient
aws.elastictranscoder Aws\ElasticTranscoder\ElasticTranscoderClient
aws.emr Aws\Emr\EmrClient
aws.firehose Aws\Firehose\FirehoseClient
aws.gamelift Aws\GameLift\GameLiftClient
aws.glacier Aws\Glacier\GlacierClient
aws.iam Aws\Iam\IamClient
aws.inspector Aws\Inspector\InspectorClient
aws.iot Aws\Iot\IotClient
aws.iotdataplane Aws\IotDataPlane\IotDataPlaneClient
aws.kinesis Aws\Kinesis\KinesisClient
aws.kms Aws\Kms\KmsClient
aws.lambda Aws\Lambda\LambdaClient
aws.machinelearning Aws\MachineLearning\MachineLearningClient
aws.marketplacecommerceanalytics Aws\MarketplaceCommerceAnalytics\MarketplaceCommerceAnalyticsClient
aws.marketplacemetering Aws\MarketplaceMetering\MarketplaceMeteringClient
aws.opsworks Aws\OpsWorks\OpsWorksClient
aws.rds Aws\Rds\RdsClient
aws.redshift Aws\Redshift\RedshiftClient
aws.route53 Aws\Route53\Route53Client
aws.route53domains Aws\Route53Domains\Route53DomainsClient
aws.s3 Aws\S3\S3Client
aws.ses Aws\Ses\SesClient
aws.sns Aws\Sns\SnsClient
aws.sqs Aws\Sqs\SqsClient
aws.ssm Aws\Ssm\SsmClient
aws.storagegateway Aws\StorageGateway\StorageGatewayClient
aws.sts Aws\Sts\StsClient
aws.support Aws\Support\SupportClient
aws.swf Aws\Swf\SwfClient
aws.waf Aws\Waf\WafClient
aws.workspaces Aws\WorkSpaces\WorkSpacesClient
aws_sdk Aws\Sdk

Como utilizar os recursos da SDK

Basicamente, o SDK para Symfony carrega os clientes dos serviços da AWS no service container da framework, não necessitando que você os crie manualmente como ocorreria se utilizasse diretamente o SDK para PHP.

Uma vez chamado o serviço, a framework lhe retornará o cliente do mesmo. A partir dai, basta você seguir a documentação oficial do AWS SDK para PHP.

Como chamar um serviço em uma controller

Neste tópico não entrarei em detalhes sobre como funciona o container serviços do Symfony por não se tratar do foco principal do guia, porem, você poderá chamar o cliente do S3 por exemplo utilizando o serviço “aws.s3” carregado na framework. Abaixo estou colocando uma controller de demostração.

/**
* @Route("/demo")
*/
class DemoController extends Controller
{
/**
* @Route("/")
*/
public function indexAction()
{
$s3 = $this->get('aws.s3'); //Neste caso, a variável $s3 receberá o objeto Aws\S3\S3Client
}
}

Próximos posts

Nos próximos posts estarei explicando a como armazenar a sessão do Symfony no DynamoDB da AWS, evitando que utilize recurso do banco de dados relacional caso você possua uma aplicação escalável.

Espero que tenham gostado. Até a próxima pessoal ;)

--

--

Rafael Mello

“Do or do not. There is no try.” — Yoda(Star Wars)