Sviluppare un’applicazione personalizzata develop

Prima di iniziare a sviluppare un’applicazione personalizzata:

Creare un’applicazione personalizzata create-custom-application

Assicurarsi che Adobe aio-cli sia installato localmente.

  1. Per creare un'applicazione personalizzata, crea un progetto App Builder. Per eseguire questa operazione, eseguire aio app init <app-name> nel terminale.

    Se non hai già effettuato l'accesso, questo comando richiede a un browser di accedere a Adobe Developer Console con il tuo Adobe ID. Consulta qui per ulteriori informazioni sull'accesso da cli.

    L'Adobe consiglia di effettuare prima l'accesso. In caso di problemi, segui le istruzioni per creare un'app senza effettuare l'accesso.

  2. Dopo aver effettuato l'accesso, seguire le istruzioni della CLI e selezionare Organization, Project e Workspace da utilizzare per l'applicazione. Scegli il progetto e l'area di lavoro creati al momento della configurazione dell'ambiente. Quando viene richiesto Which extension point(s) do you wish to implement ?, assicurarsi di selezionare DX 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
    
  3. Quando viene richiesto con Which Adobe I/O App features do you want to enable for this project?, selezionare Actions. Assicurati di deselezionare l'opzione Web Assets poiché le risorse Web utilizzano diversi controlli di autenticazione e autorizzazione.

    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
    
  4. Quando viene richiesto Which type of sample actions do you want to create?, assicurarsi di selezionare Adobe 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
    
  5. Seguire le altre istruzioni visualizzate e aprire la nuova applicazione in Visual Studio Code o nell'editor di codice preferito. Contiene lo scaffolding e il codice di esempio per un’applicazione personalizzata.

    Leggi qui i componenti principali di un'app App Builder.

    L'applicazione modello utilizza l'SDK Asset Compute di Adobe per il caricamento, il download e l'orchestrazione delle rappresentazioni dell'applicazione, pertanto gli sviluppatori devono implementare solo la logica dell'applicazione personalizzata. Nella cartella actions/<worker-name>, il file index.js è il punto in cui aggiungere il codice personalizzato dell'applicazione.

Consulta esempi di applicazioni personalizzate per esempi e idee per applicazioni personalizzate.

Aggiungi credenziali add-credentials

Quando effettui l’accesso durante la creazione dell’applicazione, la maggior parte delle credenziali di App Builder viene raccolta nel file ENV. Tuttavia, l’utilizzo dello strumento per sviluppatori richiede credenziali aggiuntive.

Credenziali di archiviazione dello strumento per sviluppatori developer-tool-credentials

Lo strumento per gli sviluppatori per valutare le app personalizzate utilizzando Asset Compute service richiede l'utilizzo di un contenitore di archiviazione cloud. Questo contenitore è essenziale per memorizzare i file di test e per la ricezione e la presentazione delle rappresentazioni prodotte dalle app.

NOTE
Questo contenitore è separato dall'archiviazione cloud di Adobe Experience Manager come Cloud Service. Si applica solo per lo sviluppo e il testing con lo strumento per sviluppatori Asset Compute.

Assicurati di avere accesso a un contenitore di archiviazione cloud supportato. Questo contenitore viene utilizzato collettivamente da vari sviluppatori per progetti diversi, quando necessario.

Aggiungi credenziali al file ENV add-credentials-env-file

Inserire le credenziali successive per lo strumento di sviluppo nel file .env. Il file si trova nella directory principale del progetto App Builder:

  1. Aggiungi il percorso assoluto al file della chiave privata creato durante l’aggiunta di servizi al progetto App Builder:

    code language-conf
    ASSET_COMPUTE_PRIVATE_KEY_FILE_PATH=
    
    note note
    NOTE
    JWT è obsoleto e la chiave privata non è disponibile per il download. Durante l’aggiornamento degli strumenti di test, tieni presente che è possibile distribuire i processi di lavoro personalizzati creati con OAuth, ma che devtools non funzionerebbe.
  2. Scarica il file da Adobe Developer Console. Vai alla directory principale del progetto e fai clic su "Scarica tutto" nell’angolo in alto a destra. Il file è stato scaricato con <namespace>-<workspace>.json come nome file. Effettua una delle operazioni seguenti:

    • Rinomina il file come console.json e spostalo nella directory principale del progetto.

    • Facoltativamente, puoi aggiungere il percorso assoluto al file JSON dell’integrazione di Adobe Developer Console. Il file è lo stesso console.json file scaricato nell'area di lavoro del progetto.

      code language-conf
      ASSET_COMPUTE_INTEGRATION_FILE_PATH=
      
  3. Aggiungi le credenziali di archiviazione S3 o Azure. È sufficiente accedere a una sola soluzione di archiviazione 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=
    
TIP
Il file config.json contiene le credenziali. All'interno del progetto, aggiungi il file JSON al file .gitignore per impedirne la condivisione. Lo stesso vale per .env e .aio file.

Eseguire l’applicazione run-custom-application

Prima di eseguire l'applicazione con lo strumento per sviluppatori Asset Compute, configurare correttamente le credenziali.

Per eseguire l'applicazione nello strumento per sviluppatori, utilizzare il comando aio app run. Distribuisce l'azione all'Adobe I/O Runtime e avvia lo strumento di sviluppo nel computer locale. Questo strumento viene utilizzato per testare le richieste dell’applicazione durante lo sviluppo. Di seguito è riportato un esempio di richiesta di rappresentazione:

"renditions": [
    {
        "worker": "https://1234_my_namespace.adobeioruntime.net/api/v1/web/example-custom-worker-master/worker",
        "name": "image.jpg"
    }
]
NOTE
Non utilizzare il flag --local con il comando run. Non funziona con le applicazioni personalizzate Asset Compute e lo strumento per sviluppatori Asset Compute. Le applicazioni personalizzate vengono chiamate dal servizio Asset Compute che non può accedere alle azioni in esecuzione sui computer locali dello sviluppatore.

Consulta qui come testare ed eseguire il debug dell'applicazione. Al termine dello sviluppo dell'applicazione personalizzata, distribuire l'applicazione personalizzata.

Prova l’applicazione di esempio fornita da Adobe try-sample

Di seguito sono riportati alcuni esempi di applicazioni personalizzate:

Applicazione personalizzata modello template-custom-application

worker-basic è un'applicazione modello. Genera una copia trasformata semplicemente copiando il file di origine. Il contenuto di questa applicazione è il modello ricevuto quando si sceglie Adobe Asset Compute nella creazione dell'app aio.

Il file dell'applicazione worker-basic.js utilizza asset-compute-sdk per scaricare il file di origine, orchestrare ogni elaborazione della copia trasformata e caricare di nuovo le copie trasformate risultanti nell'archivio cloud.

Il renditionCallback definito nel codice dell'applicazione è il punto in cui eseguire tutta la logica di elaborazione dell'applicazione. Il callback della copia trasformata in worker-basic copia semplicemente il contenuto del file di origine nel file della copia trasformata.

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);
});

Chiamare un’API esterna call-external-api

Nel codice dell’applicazione, puoi effettuare chiamate API esterne per facilitare l’elaborazione dell’applicazione. Di seguito è riportato un esempio di file di applicazione che richiama un’API esterna.

exports.main = worker(async function (source, rendition) {

    const response = await fetch('https://adobe.com', {
        method: 'GET',
        Authorization: params.AUTH_KEY
    })
});

Ad esempio, worker-animal-pictures effettua una richiesta di recupero a un URL statico da Wikimedia utilizzando la libreria node-httptransfer.

Trasmettere i parametri personalizzati pass-custom-parameters

Potete trasmettere parametri definiti personalizzati attraverso gli oggetti di rendering. È possibile farvi riferimento all'interno dell'applicazione nelle rendition istruzioni. Un esempio di oggetto di rendering è:

"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"
    }
]

Di seguito è riportato un esempio di file di applicazione che accede a un parametro personalizzato:

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 trasmette un parametro personalizzato animal per determinare quale file recuperare da Wikimedia.

Supporto di autenticazione e autorizzazione authentication-authorization-support

Per impostazione predefinita, le applicazioni personalizzate di Asset compute sono fornite con i controlli di autorizzazione e autenticazione per il progetto App Builder. Attivato impostando l'annotazione require-adobe-auth su true in manifest.yml.

Accedere ad altre API Adobe access-adobe-apis

Aggiungere i servizi API all'area di lavoro della console Asset Compute creata durante la configurazione. Questi servizi fanno parte del token di accesso JWT generato da Asset Compute Service. Il token e le altre credenziali sono accessibili all'interno dell'oggetto azione dell'applicazione params.

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

Trasmettere le credenziali per i sistemi di terze parti pass-credentials-for-tp

Per gestire le credenziali per altri servizi esterni, trasmettile come parametri predefiniti sulle azioni. Vengono crittografati automaticamente in transito. Per ulteriori informazioni, vedere creazione di azioni nella Guida per gli sviluppatori di Adobe I/O Runtime. Quindi impostale utilizzando le variabili di ambiente durante la distribuzione. È possibile accedere a questi parametri nell'oggetto params all'interno dell'azione.

Impostare i parametri predefiniti all'interno di inputs in 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'espressione $VAR legge il valore da una variabile di ambiente denominata VAR.

Durante lo sviluppo, è possibile assegnare il valore nel file .env locale. Il motivo è che aio importa automaticamente le variabili di ambiente da .env file, insieme alle variabili impostate dalla shell di avvio. In questo esempio, il file .env ha l'aspetto seguente:

#...
SECRET_KEY=secret-value

Per la distribuzione di produzione è possibile impostare le variabili di ambiente nel sistema CI, ad esempio utilizzando i segreti nelle azioni GitHub. Infine, accedi ai parametri predefiniti all’interno dell’applicazione in quanto tale:

const key = params.secretKey;

Ridimensionamento delle applicazioni sizing-workers

Un'applicazione viene eseguita in un contenitore nell'Adobe I/O Runtime con limiti che può essere configurato tramite manifest.yml:

    actions:
      myworker:
        function: /actions/myworker/index.js
        limits:
          timeout: 300000
          memorySize: 512
          concurrency: 1

A causa dell’elaborazione intensiva eseguita dalle applicazioni Asset Compute, è necessario regolare questi limiti per ottenere prestazioni ottimali (abbastanza grandi da gestire le risorse binarie) ed efficienza (senza sprecare risorse a causa della memoria contenitore non utilizzata).

Il timeout predefinito per le azioni in fase di esecuzione è di un minuto, ma può essere aumentato impostando il limite di timeout (in millisecondi). Se prevedi di elaborare file di dimensioni maggiori, aumenta questo tempo. Considera il tempo totale necessario per scaricare l’origine, elaborare il file e caricare la rappresentazione. Se un’azione si interrompe per timeout, ovvero non restituisce l’attivazione prima del limite di timeout specificato, Runtime elimina il contenitore e non lo riutilizza.

Le applicazioni di Asset compute per natura tendono ad essere collegate alla rete e al disco. Il file di origine deve essere scaricato per primo. L’elaborazione richiede spesso molte risorse, quindi le rappresentazioni risultanti vengono caricate di nuovo.

È possibile specificare la memoria allocata a un contenitore di azioni in megabyte utilizzando il parametro memorySize. Attualmente, questo parametro definisce anche la quantità di accesso alla CPU che il contenitore ottiene e, soprattutto, è un elemento chiave del costo di utilizzo di Runtime (i contenitori più grandi costano di più). Utilizzare un valore maggiore quando l'elaborazione richiede una quantità maggiore di memoria o CPU, ma prestare attenzione a non sprecare risorse, poiché più grandi sono i contenitori, minore è la velocità effettiva complessiva.

Inoltre, è possibile controllare la concorrenza delle azioni all'interno di un contenitore utilizzando l'impostazione concurrency. Questa impostazione corrisponde al numero di attivazioni simultanee ottenute da un singolo contenitore (della stessa azione). In questo modello, il contenitore delle azioni è simile a un server Node.js che riceve più richieste simultanee, fino a tale limite. Il valore predefinito memorySize nel runtime è impostato su 200 MB, ideale per le azioni App Builder di dimensioni inferiori. Ad Asset compute, questo valore predefinito può essere eccessivo a causa della maggiore complessità dell'elaborazione locale e dell'utilizzo del disco. Alcune applicazioni, a seconda dell’implementazione, potrebbero non funzionare correttamente con le attività simultanee. L’SDK di Asset compute garantisce che le attivazioni siano separate scrivendo file in diverse cartelle univoche.

Verificare le applicazioni per trovare i numeri ottimali per concurrency e memorySize. Contenitori più grandi = un limite di memoria più alto potrebbe consentire una maggiore concorrenza, ma potrebbe anche sprecare per un traffico più basso.

recommendation-more-help
b027be24-3772-44c0-a56d-a4ba23dcb50b