Développement d’une application personnalisée develop
Avant de commencer à développer une application personnalisée :
- Assurez-vous que toutes les conditions préalables sont remplies.
- Installez les outils logiciels requis.
- Voir Configuration de votre environnement pour vous assurer que vous êtes prêt à créer une application personnalisée.
Création d’une application personnalisée create-custom-application
Assurez-vous qu’Adobe aio-cli est installé localement.
-
Pour créer une application personnalisée, créez un projet App Builder. Pour ce faire, exécutez
aio app init <app-name>
sur votre terminal.Si vous n’êtes pas encore connecté, cette commande appelle un navigateur qui vous invite à vous connecter à Adobe Developer Console avec votre Adobe ID. Voir ici pour plus d’informations sur la connexion à partir de l’interface de ligne de commande.
Adobe vous recommande de vous connecter d’abord. Si vous rencontrez des problèmes, appliquez les instructions pour créer une application sans vous connecter.
-
Après votre connexion, suivez les invites de l’interface en ligne de commande et sélectionnez les éléments
Organization
,Project
etWorkspace
à utiliser pour l’application. Choisissez le projet et l’espace de travail que vous avez créés lors de la configuration de votre environnement. À l’inviteWhich extension point(s) do you wish to implement ?
, veillez à sélectionnerDX Asset Compute Worker
:code language-sh $ aio app init <app-name> Retrieving information from Adobe I/O Console. ? Select Org My Adobe Org ? Select Project MyAdobe Developer App BuilderProject ? Which extension point(s) do you wish to implement ? (Press <space> to select, <a> to toggle all, <i> to invert selection) ❯◯ DX Experience Cloud SPA ◯ DX Asset Compute Worker
-
Lorsque l’invite
Which Adobe I/O App features do you want to enable for this project?
s’affiche, sélectionnezActions
. Veillez à désélectionner l’optionWeb Assets
car les ressources Web utilisent différentes vérifications d’authentification et d’autorisation.code language-bash ? Which Adobe I/O App features do you want to enable for this project? select components to include (Press <space> to select, <a> to toggle all, <i> to invert selection) ❯◉ Actions: Deploy Runtime actions ◯ Events: Publish to Adobe I/O Events ◯ Web Assets: Deploy hosted static assets ◯ CI/CD: Include GitHub Actions based workflows for Build, Test and Deploy
-
À l’invite
Which type of sample actions do you want to create?
, veillez à sélectionnerAdobe Asset Compute Worker
:code language-bash ? Which type of sample actions do you want to create? Select type of actions to generate ❯◉ Adobe Asset Compute Worker ◯ Generic
-
Suivez les autres invites et ouvrez la nouvelle application dans Visual Studio Code (ou votre éditeur de code préféré). Il contient la structure et l’exemple de code pour une application personnalisée.
Lisez ici des informations sur les principaux composants d’une application App Builder.
L’application de modèle utilise le SDK Asset Compute d’Adobe pour le chargement, le téléchargement et l’orchestration des rendus d’application. L’équipe de développement n’a donc qu’à implémenter la logique de l’application personnalisée. Dans le dossier
actions/<worker-name>
, le fichierindex.js
indique où ajouter le code d’application personnalisé.
Voir Exemples d’applications personnalisées pour consulter des exemples et des idées d’applications personnalisées.
Ajout des informations d’identification add-credentials
Lorsque vous vous connectez tandis que l’application est en train de se créer, la plupart des informations d’identification d’App Builder sont collectées dans votre fichier ENV. Toutefois, l’utilisation de l’outil de développement nécessite des informations d’identification supplémentaires.
Informations d’identification pour le stockage de l’outil de développement developer-tool-credentials
L’outil permettant à l’équipe de développement d’évaluer des applications personnalisées à l’aide du Asset Compute service nécessite l’utilisation d’un conteneur d’espace de stockage dans le cloud. Ce conteneur est essentiel pour stocker les fichiers de test ainsi que pour la réception et la présentation des rendus produits par les applications.
Assurez-vous d’avoir accès à un conteneur de stockage dans le cloud pris en charge. Ce conteneur est utilisé collectivement par plusieurs développeurs et développeuses pour différents projets, le cas échéant.
Ajouter des informations d’identification au fichier ENV add-credentials-env-file
Insérez les informations d’identification suivantes de l’outil de développement dans le fichier .env
. Le fichier se trouve à la racine de votre projet App Builder :
-
Ajoutez le chemin d’accès absolu au fichier de clé privée créé lors de l’ajout de services à votre projet App Builder :
code language-conf ASSET_COMPUTE_PRIVATE_KEY_FILE_PATH=
note note NOTE JWT est obsolète et la clé privée ne peut être téléchargée. Pendant que nous travaillons à la mise à jour des outils de test, notez que les programmes de travail personnalisés créés à l’aide d’OAuth peuvent être déployés, mais les outils de développement ne fonctionneront pas. -
Téléchargez le fichier à partir d’Adobe Developer Console. Accédez à la racine du projet et cliquez sur « Tout télécharger » dans l’angle supérieur droit. Le fichier est téléchargé avec
<namespace>-<workspace>.json
comme nom de fichier. Utilisez l’une des méthodes suivantes :-
Renommez le fichier
console.json
et déplacez-le dans la racine de votre projet. -
Vous pouvez éventuellement ajouter le chemin d’accès absolu au fichier JSON d’intégration d’Adobe Developer Console. Ce fichier est le même fichier
console.json
que celui téléchargé dans l’espace de travail de votre projet.code language-conf ASSET_COMPUTE_INTEGRATION_FILE_PATH=
-
-
Ajoutez les informations d’identification S3 ou de la solution de stockage Azure. Vous n’avez besoin d’accéder qu’à une seule solution d’espace de stockage dans le cloud.
code language-conf # S3 credentials S3_BUCKET= AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_REGION= # Azure Storage credentials AZURE_STORAGE_ACCOUNT= AZURE_STORAGE_KEY= AZURE_STORAGE_CONTAINER_NAME=
config.json
contient des informations d’identification. Dans votre projet, ajoutez le fichier JSON à votre fichier .gitignore
pour empêcher son partage. Il en va de même pour les fichiers .env
et .aio
.Exécuter l’application run-custom-application
Avant d’exécuter l’application avec l’outil de développement Asset Compute, configurez correctement les informations d’identification.
Pour exécuter l’application dans l’outil de développement, utilisez la commande aio app run
. L’action est déployée sur Adobe I/O Runtime et lance l’outil de développement sur votre ordinateur local. Cet outil est utilisé pour tester les demandes des applications au cours du développement. Voici un exemple de demande de rendu :
"renditions": [
{
"worker": "https://1234_my_namespace.adobeioruntime.net/api/v1/web/example-custom-worker-master/worker",
"name": "image.jpg"
}
]
--local
avec la commande run
. Il ne fonctionne pas avec les applications personnalisées Asset Compute et l’outil de développement Asset Compute. Les applications personnalisées sont appelées par le service Asset Compute qui ne peut pas accéder aux actions exécutées sur les ordinateurs locaux de l’équipe de développement.Voir ici comment tester et déboguer votre application. Lorsque vous avez terminé de développer votre application personnalisée, déployez-la.
Essai de l’exemple d’application fourni par Adobe try-sample
Voici des exemples d’applications personnalisées :
Modèle d’application personnalisée template-custom-application
worker-basic est un modèle d’application. Il génère un rendu en copiant simplement le fichier source. Le contenu de cette application est le modèle reçu lors du choix d’Adobe Asset Compute
lors de la création de l’application aio.
Le fichier de l’application worker-basic.js
utilise le asset-compute-sdk
pour télécharger le fichier source, orchestrer le traitement de chaque rendu et charger les rendus résultants dans l’espace de stockage dans le cloud.
Le renditionCallback
défini dans le code de l’application permet d’exécuter toute la logique de traitement de l’application. Le rappel de rendu de worker-basic
copie simplement le contenu du fichier source dans le fichier de rendu.
const { worker } = require('@adobe/asset-compute-sdk');
const fs = require('fs').promises;
exports.main = worker(async (source, rendition) => {
// copy source to rendition to transfer 1:1
await fs.copyFile(source.path, rendition.path);
});
Appel d’une API externe call-external-api
Dans le code de l’application, vous pouvez effectuer des appels API externes pour faciliter le traitement de l’application. Vous trouverez ci-dessous un exemple de fichier d’application appelant une API externe.
exports.main = worker(async function (source, rendition) {
const response = await fetch('https://adobe.com', {
method: 'GET',
Authorization: params.AUTH_KEY
})
});
Par exemple, worker-animal-pictures
effectue une requête de récupération d’une URL statique à partir de Wikimedia à l’aide de la bibliothèque node-httptransfer
.
Transmission de paramètres personnalisés pass-custom-parameters
Vous pouvez transmettre des paramètres personnalisés définis à l’aide des objets de rendu. Ils peuvent être référencés dans l’application au moyen de rendition
instructions. Voici un exemple d’objet de rendu :
"renditions": [
{
"worker": "https://1234_my_namespace.adobeioruntime.net/api/v1/web/example-custom-worker-master/worker",
"name": "image.jpg",
"my-custom-parameter": "my-custom-parameter-value"
}
]
Voici un exemple de fichier d’application accédant à un paramètre personnalisé :
exports.main = worker(async function (source, rendition) {
const customParam = rendition.instructions['my-custom-parameter'];
console.log('Custom paramter:', customParam);
// should print out `Custom parameter: "my-custom-parameter-value"`
});
example-worker-animal-pictures
transmet un paramètre personnalisé animal
pour déterminer le fichier à récupérer auprès de Wikimedia.
Prise en charge de l’authentification et de l’autorisation authentication-authorization-support
Par défaut, les applications personnalisées Asset Compute sont fournies avec des contrôles d’autorisation et d’authentification pour le projet App Builder. Ils sont activés en définissant l’annotation require-adobe-auth
sur true
dans manifest.yml
.
Accès à d’autres API d’Adobe access-adobe-apis
Ajoutez les services d’API à l’espace de travail de la console Asset Compute créé lors de la configuration. Ces services font partie du jeton d’accès JWT généré par Asset Compute Service. Le jeton et les autres informations d’identification sont accessibles dans l’objet params
d’action de l’application.
const accessToken = params.auth.accessToken; // JWT token for Technical Account with entitlements from the console workspace to the API service
const clientId = params.auth.clientId; // Technical Account client Id
const orgId = params.auth.orgId; // Experience Cloud Organization
Transmission des informations d’identification des systèmes tiers pass-credentials-for-tp
Pour gérer les informations d’identification d’autres services externes, transmettez-les sous la forme de paramètres par défaut sur les actions. Elles sont automatiquement chiffrées en transit. Pour plus d’informations, voir Créer des actions dans le guide de développement Adobe I/O Runtime. Définissez-les ensuite à l’aide de variables d’environnement lors du déploiement. Ces paramètres sont accessibles dans l’objet params
à l’intérieur de l’action.
Définissez les paramètres par défaut dans inputs
dans le fichier manifest.yml
:
packages:
__APP_PACKAGE__:
actions:
worker:
function: 'index.js'
runtime: 'nodejs:10'
web: true
inputs:
secretKey: $SECRET_KEY
annotations:
require-adobe-auth: true
L’expression $VAR
lit la valeur d’une variable d’environnement nommée VAR
.
Lors du développement, vous pouvez attribuer la valeur dans le fichier .env
local. La raison en est qu’aio
importe automatiquement les variables d’environnement depuis les fichiers .env
, ainsi que les variables définies par le shell d’initialisation. Dans cet exemple, le fichier .env
ressemble à ce qui suit :
#...
SECRET_KEY=secret-value
Pour le déploiement de la production, il est possible de définir les variables d’environnement dans le système d’intégration continue (CI), par exemple en utilisant des secrets dans les actions GitHub. Enfin, accédez aux paramètres par défaut de l’application en tant que tels :
const key = params.secretKey;
Dimensionnement des applications sizing-workers
Une application s’exécute dans un conteneur Adobe I/O Runtime avec des limites configurables à l’aide de manifest.yml
:
actions:
myworker:
function: /actions/myworker/index.js
limits:
timeout: 300000
memorySize: 512
concurrency: 1
En raison du traitement étendu effectué par les applications Asset Compute, vous devez ajuster ces limites pour optimiser les performances (suffisamment pour gérer les ressources binaires) et l’efficacité (sans gaspiller les ressources en raison de la mémoire de conteneur inutilisée).
Le délai d’expiration par défaut pour les actions du Runtime est d’une minute, mais il peut être augmenté en définissant la limite timeout
(en millisecondes). Si vous prévoyez de traiter des fichiers plus volumineux, augmentez cette durée. Tenez compte du temps total nécessaire pour télécharger la source, traiter le fichier et charger le rendu. Si une action atteint le délai d’expiration, c’est-à-dire si elle ne renvoie pas l’activation avant la limite de délai spécifiée, Runtime ignore le conteneur et ne le réutilise pas.
Les applications Asset Compute tendent par nature à être liées aux entrées et sorties réseau et disque. Le fichier source doit d’abord être téléchargé. Le traitement consomme souvent beaucoup de ressources, puis les rendus résultants sont chargés à nouveau.
Vous pouvez spécifier la mémoire allouée à un conteneur d’actions en mégaoctets à l’aide du paramètre memorySize
. Actuellement, ce paramètre définit également le niveau d’accès du conteneur au processeur. Il s’agit surtout d’un élément clé du coût d’utilisation de Runtime (les conteneurs plus volumineux ont un coût plus important). Utilisez ici une valeur plus élevée lorsque votre traitement nécessite davantage de mémoire ou de processeur. Veillez toutefois à ne pas gaspiller les ressources, car plus les conteneurs sont volumineux, plus le débit global est faible.
En outre, il est possible de contrôler la simultanéité des actions dans un conteneur à l’aide du paramètre concurrency
. Ce paramètre représente le nombre d’activations simultanées obtenues par un seul conteneur (de la même action). Dans ce modèle, le conteneur d’action est semblable à un serveur Node.js recevant plusieurs requêtes simultanées, jusqu’à cette limite. La valeur par défaut de memorySize
dans l’environnement d’exécution est définie sur 200 Mo, idéale pour les actions App Builder plus petites. Pour les applications Asset Compute, cette valeur par défaut peut être excessive en raison de leur utilisation plus importante du disque et du traitement local. Selon leur mise en œuvre, il est possible que certaines applications ne fonctionnent pas correctement avec les activités simultanées. Le SDK Asset Compute garantit que les activations sont séparées en écrivant des fichiers dans différents dossiers uniques.
Testez les applications pour trouver les valeurs optimales de concurrency
et memorySize
. Des conteneurs plus volumineux reviennent à une limite de mémoire plus haute, ce qui permet une plus grande simultanéité, mais peut aussi entraîner du gaspillage si le trafic est plus faible.