L'appartement

Aller au contenu | Aller au menu | Aller à la recherche

Tag - amazon webservices

Fil des billets

mardi, février 1 2011

Mailings et mails transactionnels via Amazon SES (Simple Email Service)

Suite à mon billet sur le streaming avec Amazon Cloudfront[1], je vous propose d'aborder et de tester un autre service d’Amazon WebServices : Amazon Simple Email Service (SES)

De quoi s’agit-il ?

Amazon SES est un service d’envoi de mails directement via les serveurs d’Amazon WebService (AWS). Il ne s’agit pas de “créer des boîtes mails” mais de l’utiliser pour envoyer des messages transactionnels (par exemple : un mail de confirmation de commande ou d’inscription) ou des mailings.

Combien ça coûte ?

Comme les autres services d’Amazon Webservices, c’est un paiement à l’utilisation (pay for use). Les tarifs commencent à partir de 0,10 $ le millier de mails et 0,10 $ par Giga de données. Le premier Giga étant gratuit. Consultez la grille de tarification pour les détails.

Les utilisateurs d’instance Amazon EC2 (serveur d’application Amazon) bénéficient de 2000 mails gratuits par jour depuis leurs instances.

En quoi est-ce intéressant ?

Ce nouveau service est intéressant sur plusieurs aspects. En voici quelques uns.

Ne pas s’occuper de la gestion d’un serveur de mail

Vous disposez d’un serveur web simple et vous ne souhaitez pas vous encombrer avec la gestion d'un serveur de mail pour l’envoi de vos messages transactionnels ou vos mailings. Amazon permet d’une part d’envoyer vos messages directement en HTTP depuis vos scripts, et d’autre part fournit un wrapper pour Postfix (d'autres viendront sans doute) qui vous permet de diriger tous les messages sortant de votre serveur vers Amazon SES.

Améliorer la délivrabilité des messages

En plus de la relative complexité qu’il peut y avoir à maintenir un serveur de mail, une problématique récurrente se pose : que vos messages ne finissent pas dans le courrier indésirable des utilisateurs !

Pour ça, on peut compter sur la bonne réputation (supposée) des adresses IP d’Amazon et une configuration, qu'on espère correcte, de leurs serveurs. Comme d'habitude pour les services AWS, la société américaine ne fait que mettre à profit son expérience acquise dans son activité d'e-commerçant.

Tout va se jouer sur la capacité d’Amazon à maintenir une solide réputation sur les adresses IP utilisées par son service. En d’autres termes qu’aucun SPAM ne transitent par leurs serveurs !

Pour cette raison, Amazon à décider de mettre en place un système qui peut-être assez contraignant : le quota d’envoi par utilisateur augmentera (ou diminuera) progressivement uniquement si il n’y a pas de plainte relative aux messages envoyés par celui-ci et que ses listes sont propres (en fonction notamment d’un taux de rebonds[2] acceptable).

Enfin, il est indiqué que tous les mails envoyés via la plateforme sont scannés par l’antispam maison. Quel sera son niveau de tolérance ? Mystère pour l’instant sur ce point...

Vous êtes sur un hébergement mutualisé

Si vous êtes sur un hébergement mutualisé, Amazon SES peut-être également intéressant pour vous à 2 niveaux :

- Si vous souhaitez réaliser des campagnes de mailing depuis votre hébergement mutualisé mais que les contraintes volumétriques imposées par votre hébergeur ne vous le permettent pas

- Pour les points plus haut concernant la délivrabilité et la réputation parfois défaillante de certaines adresses IP d’hébergeurs mutualisés low cost.

Comment utiliser Amazon SES depuis vos scripts PHP

L’idée vous plaît ou vous souhaitez simplement essayer, rentrons dans le vif du sujet ;)

Pour vos tests, Amazon propose une sandbox (bac à sable) limitée à 200 mails par jour et depuis laquelle vous ne pouvez envoyer que vers et depuis des adresses vérifiées (voir plus bas)

Première étape, si vous n'avez pas de compte AWS, ouvrez-en un. Notez que même pour utiliser la sandbox, une carte bancaire et un numéro de téléphone valide sont nécessaires. Pour ce dernier, il y a en effet une vérification de votre identité via un callback téléphonique.

Deuxième étape, téléchargez le SDK PHP d’Amazon. A l’heure ou j’écris ces lignes, vous devez récupérer la version sur github. La version téléchargeable directement sur le site AWS ne contient pas la classe d’accès à SES.

Troisième étape, récupérez vos clés pour l'API AWS sur votre compte. Renommez le fichier config-dist.inc.php du SDK et précisez les paramètres d'authentification dedans.

Quatrième étape, ajoutez des adresses “vérifiées”. Dans la sandbox, vous pouvez envoyer des messages uniquement depuis et à destination d’adresses vérifiées. SES va envoyer à ses adresses un message contenant un lien servant à valider l’adresse.

Pour vérifier une adresse :

// appel du SDK
require_once './AWS/sdk.class.php';

// instanciation de la classe SES
$ses = new AmazonSES();

// vérifier une adresse (ou un array d'adresse)
print_r($ses->verify_email_address('yves@example.tld'));

Vous pouvez maintenant essayez le service avec cette adresse email vérifiée. Dans un premier temps, lancez une requête pour obtenir votre quota d’envoi :

print_r($ses->get_send_quota());

Si vous obtenez une réponse "200 OK" et le quota, vous pouvez tester l’envoi d’un message :

// adresse(s) de destination (vérifiées pour utiliser la sandbox)
$destination = array(
    'ToAddresses' => 'yves@example.tld', // array possible
);
$message = array(
    'Subject.Data' => 'Sujet',
    'Body.Text.Data' => 'Test'
);
$ses->send_email('yves@example.tld', $destination, $message);

Ce service étant encore en version beta, il est évident que les fonctionnalités s’étofferont au fur et à mesure des semaines.

Notes

[1] on m'a d'ailleurs fait justement remarquer dans les commentaires qu'Amazon n'était pas l'entreprise la plus respectable qui soit depuis l'affaire wikilieaks

[2] mails retournés avec une erreur

vendredi, janvier 28 2011

Streamer vos vidéos avec Amazon Cloudfront

Dans la plupart des cas de diffusion de vidéos, le pseudo-streaming (ou progressive download) suffit. Il s'agit dans ce cas de diffuser les contenus en format FLV ou MP4. Le seaking (la possibilité d'avancer sur une partie de la vidéo qui n'est pas encore téléchargée) pouvant être géré par l'ajout de keyframes dans le fichier multimédia et l'utilisation d'un serveur web supportant correctement le pseudo-streaming. Je citerais par exemple :

Dans un certain nombre d'autres cas, il peut-être intéressant, voir nécessaire, de diffuser ses vidéos par le biais d'un "vrai" serveur de streaming de type RED5 ou Adobe Flash Media Server. On peut notamment citer :

  • la diffusion de flux en direct
  • la diffusion de vidéos d'une durée importante
  • une protection plus avancée contre le téléchargement des contenus multimédias[1].

Il est depuis quelques temps possible de diffuser en streaming ses vidéos à peu de frais et sans rentrer dans la gestion lourde d'un RED5 ou d'un AFMS.

C'est Amazon Webservices qui propose cette fonctionnalité via son service Amazon Cloudfront. Je vous propose une introduction sur le service et la diffusion de vidéos via le lecteur Flash JW Player.

Qu'est-ce qu'Amazon Cloudfront ?

Amazon Cloudfront est un CDN (Content Delivery Network).

En résumé, le service diffuse vos contenus non pas depuis un unique centre de données mais depuis plusieurs répartis sur la planète. Les requêtes des internautes sont automatiquement routées sur l'emplacement le plus proche de celui-ci. Ceci réduit la latence pour les visiteurs de l’autre bout du monde et diminue la charge sur votre site.

Mais, en l'occurrence, ce n'est pas cette fonctionnalité (sauf si vous avez une audience internationale importante) qui nous intéresse, mais plutôt la possibilité de créer en quelques clics un serveur de diffusion en streaming administré par Amazon Webservices.

Combien ça coûte ?

Comme tous les autres services AWS (Amazon WebServices), le service est facturé à l'utilisation (pay-per-use). Vous payez principalement en fonction :

  • du volume de données stockées
  • du volume de données en entrée et en sortie
  • du nombre de requêtes GET/POST/PUT/LIST

Consultez la grille de tarification pour les détails

Le calcul n’est pas forcément évident mais vous pourrez suivre au jour le jour votre consommation directement sur votre compte Amazon Webservices.

Notez qu'AWS propose également une calculatrice de coût

J'essayerais d'ajouter prochainement à cet article un cas concret en terme de coût – contenu - fréquentation

Comment l'utiliser ?

Si vous n'êtes pas familier avec Amazon Webservices sachez, pour résumer, qu'AWS tourne autour :

  • de plusieurs API permettant de communiquer avec les différents services. Des kits de développement pour plusieurs langages sont d’ailleurs fournis par Amazon et l'écosystème est plutôt bien fourni.
  • d'une interface web de gestion.

Pour commencer, vous devez vous inscrire et fournir un numéro de carte bancaire, seul moyen de paiement actuellement accepté. Certains services nécessitent également une activation du compte par callback téléphonique. Précisez donc un numéro de téléphone valide. A ce stade, vous ne payez rien. Je le répète, le paiement se fait à l’utilisation.

Créer un espace de stockage Amazon S3

Pour diffuser vos contenus via Cloudfront, vous ne pouvez actuellement pas les héberger ailleurs que chez Amazon. Le service de stockage d'Amazon est plus connu. Il s'agit de S3 (Simple Storage Service). Le service est également facturé à l'utilisation.

Je passe sur le détail de création et d'envoi de vos fichiers sur AWS S3. On trouve pas mal de documentation sur le sujet.

Istance S3 Un bucket Amazon S3 contenant les fichiers FLV. Ne tenez pas compte des fichiers XML ;)

Disons donc qu'il est nécessaire de créer un bucket Amazon S3 qui sera lié à votre serveur Adobe Flash Media Server sur Cloudfront.

Pensez-bien à rendre les fichiers de votre bucket public et déposez ensuite un fichier FLV ou MP4 sur celui-ci

Créez un serveur Adobe Flash Media Server

Sur la console AWS, créez maintenant une distribution Amazon CloudFront de type Streaming (Adobe Flash Media Server) et liez là à votre bucket en cliquant sur « Create distribution ». Choisissez le bucket S3 qui contient vos vidéos.

Vous obtiendrez ceci : Instance Cloudfront

A ce stade, vos vidéos sont accessibles en streaming ! Essayez simplement d'en lire une avec VLC ou un lecteur gérant correctement ce type de diffusion. L'adresse est de la forme :

rtmp://IDENTIFIANT_MACHINE.cloudfront.net/cfx/st/monfichier.flv (ou mp4)

Il s'agit d'une diffusion en RTMP sur le port avec un failover sur le port 80 en cas de pare-feu un peu trop exigeant.

Si ça ne fonctionne pas, vérifiez que votre fichier vidéo est bien public sur votre bucket Amazon S3 en y accédant directement en HTTP. Par exemple : http://monbucket.amazonaws.com/monfichier.flv (ou mp4)

Si votre serveur de streaming est bien fonctionnel (bravo bravo !), vous pouvez l'utilisez avec un lecteur flash supportant la diffusion en RTMP

Option : vous pouvez créer un CNAME sur votre zone DNS pour remplacer l'URL de Cloudfront par la votre :

stream IN CNAME  IDENTIFIANT_MACHINE.cloudfront.net

Utiliser JW Player avec Amazon Cloudfront

A ce stade, je vais supposer que vous n'avez pas de difficulté à installer JWplayer et à le faire fonctionner, dans un premier temps, avec une vidéo hébergée chez vous.

Vous devez maintenant utiliser les éléments de configuration suivant pour diffuser la vidéo hébergée sur le cloud Amazon :

Préciser dans votre configuration JW Player les variables suivantes :

provider=rtmp
streamer=rtmp://IDENTIFIANT_MACHINE.cloudfront.net/cfx/st
file=monfichier.flv (ou mp4)

Dans le cas de l'utilisation de la balise object, on obtient donc :

file=monfichier.flv&streamer=rtmp://IDENTIFIANT_MACHINE .cloudfront.net/cfx/st&provider=rtmp

Et c’est tout ! Vous voici prêt à diffuser des contenus via « votre » serveur de streaming !

Notes

[1] même si, vous en conviendrez, il n'existe aucun moyen d'empêcher le téléchargement. Et ne me parlez pas de DRM !