Le Blog Amazon Web Services

Déployer la solution AWS Media2Cloud avec Terraform

Cet article a été co-écrit avec Nathan Agez, Lead Software Engineer chez TrackIt

Les entreprises média d’aujourd’hui font face au défi de gérer efficacement de vastes quantités de contenus vidéo, image et audio. De l’ingestion des éléments bruts à leur enrichissement avec des métadonnées et leur distribution à des audiences mondiales, les workflows impliqués sont complexes et nécessitent des ressources importantes. Pour répondre à ces défis, AWS propose “Guidance for Media2Cloud on AWS”, une solution de référence conçue pour automatiser et rationaliser les workflows média à grande échelle.

Qu’est-ce que Guidance for Media2Cloud on AWS ?

Guidance for Media2Cloud on AWS est une solution serverless complète d’ingestion et d’analyse pour déplacer les assets vidéo et les métadonnées associées vers AWS. Pendant l’ingestion vers le cloud, Media2Cloud analyse les vidéos, images, audios et documents pour extraire des métadonnées précieuses, incluant les informations sur les médias image et vidéo, les transcriptions audio et les informations tabulaires des documents numérisés, alimentées par les services d’intelligence artificielle AWS. Ces métadonnées peuvent être utilisées pour rendre les médias consultables et permettre leur réutilisation à de nouvelles fins. Dans cette dernière version, les métadonnées peuvent également être enrichies en utilisant l’IA générative pour produire des légendes d’images, des résumés de transcription et des classifications de contenu alimentées par Amazon Bedrock.

Media2Cloud fournit un pipeline automatisé de traitement des éléments média avec plusieurs workflows pour gérer efficacement vos vidéos, photos, podcasts et documents. Media2Cloud prend en charge les métadonnées standardisées, les identifiants, les proxies et les métadonnées générées par AI au contenu comme fondation. Cela facilite la gestion et la recherche de tous les éléments à mesure que les bibliothèques ou archives se développent.

Pour les partenaires AWS comme TrackIt, le guide offre la flexibilité de personnaliser selon les exigences du client et d’accélérer l’ingestion du contenu des clients. Les métadonnées générées par l’IA peuvent être augmentées avec d’autres jeux de données et intégrées avec des plateformes de Media Asset Management.

Deux approches pour personnaliser Media2Cloud avec Terraform

Traditionnellement, AWS distribue Media2Cloud comme un modèle CloudFormation prêt à l’emploi qui configure les composants requis en un seul déploiement. Bien que CloudFormation soit puissant et entièrement pris en charge par AWS, de nombreuses organisations s’appuient déjà sur Terraform pour l’infrastructure en tant que code et souhaitent maintenir leurs environnements uniformes, ou choisissent Terraform en raison de son large écosystème de fournisseurs, de ses capacités multi-cloud et de son intégration transparente avec les workflows CI/CD.

Lors de l’intégration de Media2Cloud dans un environnement basé sur Terraform, deux approches sont possibles, chacune avec des compromis distincts.

Traduction Terraform complète

Cette approche implique de réécrire entièrement le modèle CloudFormation Media2Cloud en code Terraform pur, utilisant les ressources Terraform natives. Cette méthode fournit une transparence complète de l’infrastructure, avec chaque ressource AWS explicitement définie dans Terraform. Elle permet une gestion d’état native pour un suivi des dépendances amélioré et une détection de dérive. Elle garantit un langage unique d’Infrastructure-as-Code à travers tous les composants, simplifiant les workflows d’équipe et l’intégration CI/CD. Elle offre une personnalisation fine des composants individuels et une intégration fluide avec les modules Terraform existants.

Cependant, cette approche nécessite un effort initial significatif pour traduire avec précision des centaines de ressources CloudFormation. Elle implique une maintenance continue car les mises à jour AWS de Media2Cloud doivent être répliquées manuellement pour maintenir la parité. Elle porte un risque de divergence de l’implémentation officielle AWS, manquant potentiellement des corrections ou optimisations clés. Elle peut recevoir un support AWS limité en raison de la déviation du modèle de déploiement officiellement supporté. Elle nécessite des tests approfondis pour assurer une équivalence fonctionnelle complète avec le modèle CloudFormation original.

Si vous préférez cette approche, voici un guide complet pour migrer une stack Cloudformation vers Terraform : AWS CloudFormation to Terraform Translation.

Wrapper Terraform (Approche recommandée)

Cette approche utilise la ressource aws_cloudformation_stack pour déployer le modèle CloudFormation officiel Media2Cloud depuis Terraform. Cette méthode permet un effort de déploiement minimal utilisant le modèle CloudFormation officiel prêt à l’emploi. Elle bénéficie automatiquement des mises à jour AWS, corrections de bogues et optimisations sans maintenance manuelle. Elle simplifie la gestion des versions en permettant des mises à niveau rapides grâce aux mises à jour d’URL de modèle. Elle fournit une intégration complète de l’état Terraform, assurant la gestion du cycle de vie aux côtés d’autres infrastructures. Elle élimine les erreurs de traduction et garantit la parité de fonctionnalités avec l’implémentation officielle AWS.

Les limitations incluent un contrôle limité sur les ressources AWS individuelles dans la stack CloudFormation. Les configurations internes restent abstraites, fonctionnant comme une boîte noire. Elle nécessite de forker et modifier le modèle CloudFormation pour une personnalisation profonde. Elle augmente la complexité de débogage en raison des contextes Terraform et CloudFormation imbriqués.

Pour la plupart des organisations, l’approche wrapper Terraform est le choix pragmatique. Elle fournit un déploiement rapide, maintient l’alignement avec la solution officielle AWS et s’intègre de manière transparente dans les workflows Terraform.

Vue d’ensemble de la solution

Prérequis

Vous avez besoin d’un compte AWS avec les privilèges nécessaires pour créer des rôles et politiques IAM, accéder à S3 et déployer des ressources via CloudFormation. AWS CLI doit être installé et authentifié avec des permissions suffisantes. Anthropic Claude 3 Haiku ou Sonnet doit être activé via la console Amazon Bedrock sous Gérer l’accès aux modèles. Terraform, jq, Docker et Node.js 20.x doivent être installés et correctement configurés sur l’environnement local. Le daemon Docker doit fonctionner localement pour permettre les opérations conteneurisées.

Étapes de déploiement

Étape 1 : Construire le package de déploiement Media2Cloud V4

Media2Cloud nécessite la construction de packages de fonction Lambda et d’autres artefacts avant le déploiement. Cette étape prépare tous les fichiers nécessaires et les télécharge vers un bucket S3.

Créez d’abord un bucket S3 pour stocker les artefacts de déploiement Media2Cloud :</

aws s3api create-bucket --bucket yourname-artefact-bucket --region us-east-1

Si vous déployez dans une région autre que us-east-1, vous devez ajouter le paramètre —create-bucket-configuration LocationConstraint=your-region.

Clonez le repository git officiel AWS Solutions Library et construisez le package de déploiement :

# Clone the repository
git clone git@github.com:aws-solutions-library-samples/guidance-for-media2cloud-on-aws.git
# Navigate to the deployment directory
cd guidance-for-media2cloud-on-aws/deployment
# Build the distribution (this may take 10-15 minutes)
bash build-s3-dist.sh --bucket yourname-artefact-bucket --version vexemple --single-region > build.log 2>&1 &
# Monitor the build progress
tail -f build.log

Cette commande installe les dépendances Node.js, package les fonctions Lambda, prépare les modèles CloudFormation et crée les artefacts de déploiement. Le paramètre --bucket spécifie le nom du bucket S3 sans préfixe s3://. Le paramètre —version définit l’étiquette de version pour ce déploiement. Le paramètre —single-region optimise pour le déploiement dans une seule région AWS.

Une fois la construction terminée avec succès, téléchargez tous les artefacts vers le bucket S3 :

bash deploy-s3-dist.sh --bucket yourname-artefact-bucket --version vexemple --single-region

Cette commande télécharge les modèles CloudFormation, les fichiers ZIP des fonctions Lambda, les éléments d’application web et les fichiers de configuration. Une fois téléchargé, le modèle sera disponible à l’adresse suivante :

https://yourname-artefact-bucket.s3.amazonaws.com/media2cloud/v4.0.0/media2cloud.template

Sauvegardez cette URL car elle sera requise pour la configuration Terraform décrite à l’étape 2.

Étape 2 : Configurer les paramètres

Dans un répertoire séparé, créez un fichier main.tf pour définir la ressource de stack CloudFormation avec les paramètres appropriés :

resource "aws_cloudformation_stack" "m2c" { 
   name = "media2cloud-terraform-deploy" 
   template_url = "https://yourname-artefact-bucket.s3.amazonaws.com/media2cloud/vexemple/media2cloud.template" 
   parameters = { 
      VersionCompatibilityStatement = "Yes, I understand and proceed" 
      Email = "mail@exemple.com" 
      DefaultAIOptions = "Recommended V4 features (v4.default)" 
      OpenSearchCluster = "Development and Testing (t3.medium=0,m5.large=1,gp2=10,az=1)" 
      PriceClass = "Use Only U.S., Canada and Europe (PriceClass_100)" 
      StartOnObjectCreation = "NO" 
      BedrockSecondaryRegionAccess = "North Virginia [US East] (us-east-1)" 
      BedrockModel = "Anthropic Claude 3 Haiku" 
   } 
   capabilities = ["CAPABILITY_IAM"] }

Le modèle CloudFormation Media2Cloud accepte plusieurs paramètres qui contrôlent le comportement et les fonctionnalités du déploiement. Le paramètre VersionCompatibilityStatement doit être lu et reconnu avant de procéder. Le paramètre Email est utilisé pour s’inscrire avec Amazon Cognito UserPool et recevoir une invitation au portail web Media2Cloud. Le paramètre DefaultAIOptions contrôle quelles fonctionnalités IA/ML sont activées par défaut et peut être modifié plus tard via la page Paramètres du portail web Media2Cloud.

Le paramètre OpenSearchCluster définit la configuration du cluster. Pour les tests, utilisez une configuration à instance unique. Pour la production, utilisez une configuration multi-AZ avec des types d’instance appropriés. Le paramètre PriceClass définit la classe de prix Amazon CloudFront selon votre géographie d’audience cible. Le paramètre StartOnObjectCreation détermine si les fichiers sont traités automatiquement lors du téléchargement vers le bucket d’ingestion.

Les paramètres BedrockSecondaryRegionAccess et BedrockModel sont requis pour les fonctionnalités d’IA générative.

Dans le même dossier, créez un fichier provider.tf :

provider "aws" { 
   region = "us-east-1" 
}

Étape 3 : Déployer avec Terraform

Exécutez les commandes suivantes dans le répertoire du projet contenant main.tf :

terraform init 
terraform apply -auto-approve

Terraform provisionne la stack CloudFormation, qui à son tour déploie toutes les ressources Media2Cloud. Du point de vue de Terraform, ce déploiement devient partie de l’état d’infrastructure géré.

Conclusion

Déployer Media2Cloud avec Terraform constitue une méthode pratique pour intégrer la solution officielle AWS dans un workflow Terraform plus large. Cette approche réutilise le modèle CloudFormation tout en garantissant la cohérence, l’automatisation et la visibilité dans la gestion de l’infrastructure. Elle permet aux organisations de tirer parti de Media2Cloud pour automatiser leurs workflows média tout en maintenant leurs pratiques d’infrastructure en tant que code.

Les clients peuvent ainsi commencer immédiatement à bénéficier des capacités d’analyse et d’enrichissement de contenu de Media2Cloud dans leurs environnements Terraform existants.

Nathan Agez

Nathan Agez

Nathan Agez est Lead Software Engineer chez TrackIt, basé à Toulouse, en France. Il a rejoint TrackIt en 2022 et s’est spécialisé dans les services AWS, plus particulièrement la suite Elemental et les architectures serverless. Nathan accompagne les clients du secteur Media & Entertainment dans la conception d’architectures robustes, scalables et hautement disponibles sur AWS.

Guillaume Marchand

Guillaume Marchand

Guillaume Marchand est Principal Solutions Architect, basé à Paris, en France. Il a rejoint Amazon en 2016 après avoir travaillé pour un diffuseur de télévision où il gérait l’architecture de leur plateforme OTT. Dans son travail actuel, Guillaume accompagne les grands groupes médias français dans leur démarche cloud.