Sviluppare un’applicazione personalizzata develop

Prima di iniziare a sviluppare un’applicazione personalizzata:

Creare un’applicazione personalizzata create-custom-application

Assicurati di avere Adobe I/O CLI installato localmente.

  1. Per creare un'applicazione personalizzata: creare un progetto App Builder. Per farlo, esegui aio app init <app-name> nel tuo terminale.

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

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

  2. Dopo aver effettuato l’accesso, segui le istruzioni riportate nella CLI e seleziona la Organization, Project, e Workspace da utilizzare per l’applicazione. Scegli il progetto e l’area di lavoro creati al momento della configurare l’ambiente. Quando richiesto Which extension point(s) do you wish to implement ?, assicurati 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 richiesto con Which Adobe I/O App features do you want to enable for this project?, seleziona Actions. Assicurati di deselezionare Web Assets come risorse web utilizza 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 richiesto Which type of sample actions do you want to create?, assicurati 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 le informazioni sulla Componenti principali di un’app di App Builder.

    L’applicazione modello sfrutta il nostro SDK ASSET COMPUTE per il caricamento, il download e l’orchestrazione delle rappresentazioni delle applicazioni, in modo che gli sviluppatori debbano implementare solo la logica dell’applicazione personalizzata. All'interno del actions/<worker-name> cartella, la index.js file è il punto in cui aggiungere il codice personalizzato dell'applicazione.

Consulta esempi di applicazioni personalizzate 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 sviluppatori utilizzato per testare le applicazioni personalizzate con Asset Compute service richiede un contenitore di archiviazione cloud per l’hosting dei file di test e per la ricezione e la visualizzazione delle rappresentazioni generate dalle applicazioni.

NOTE
Questo è separato dall’archiviazione cloud di Adobe Experience Manager as a Cloud Service. Si applica solo per lo sviluppo e il testing con lo strumento per sviluppatori Asset compute.

Assicurati di avere accesso a contenitore di archiviazione cloud supportato. Se necessario, questo contenitore può essere condiviso da più sviluppatori tra progetti diversi.

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

Aggiungi le seguenti credenziali per lo strumento per sviluppatori al file ENV 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=
    
  2. Scarica il file dalla console Adobe Developer. Vai alla directory principale del progetto e fai clic su "Scarica tutto" nell’angolo in alto a destra. Il file viene scaricato con <namespace>-<workspace>.json come nome del file. Effettua una delle operazioni seguenti:

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

    • Facoltativamente, puoi aggiungere il percorso assoluto al file JSON di integrazione della console Adobe Developer. Questo è 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 config.json il file contiene le credenziali. Dall’interno del progetto, aggiungi il file JSON al tuo .gitignore per impedire la condivisione. Lo stesso vale per i file env e aio.

Eseguire l’applicazione run-custom-application

Prima di eseguire l’applicazione con Asset compute Developer Tool, configura correttamente credenziali.

Per eseguire l’applicazione nello strumento per sviluppatori, utilizza aio app run comando. Distribuisce l’azione in Adobe I/O Esegui e avvia lo strumento di sviluppo sul 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 --local contrassegno con run comando. Non funziona con Asset Compute applicazioni personalizzate e lo strumento Asset compute Developer. Le applicazioni personalizzate vengono richiamate da Asset Compute Service che non possono 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

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

Il fascicolo dell'applicazione, worker-basic.js utilizza asset-compute-sdk per scaricare il file di origine, orchestra ogni elaborazione della rappresentazione e carica di nuovo le rappresentazioni risultanti nell’archiviazione cloud.

Il renditionCallback definito all’interno del codice dell’applicazione, è il punto in cui eseguire tutta la logica di elaborazione dell’applicazione. Il callback della rappresentazione 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 l’API esterna.

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

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

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

Trasmettere i parametri personalizzati pass-custom-parameters

Potete trasmettere parametri definiti personalizzati attraverso gli oggetti di rendering. È possibile farvi riferimento all’interno dell’applicazione in 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"
    }
]

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

Il 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 dotate di controlli di autorizzazione e autenticazione per il progetto App Builder. Questa funzione è abilitata impostando require-adobe-auth annotazione a true nel manifest.yml.

Accedere ad altre API Adobe access-adobe-apis

Aggiungi i servizi API alla Asset Compute Area di lavoro della console 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’azione dell’applicazione params oggetto.

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, passa questi come parametri predefiniti sulle azioni. Questi vengono crittografati automaticamente in transito. Per ulteriori informazioni, consulta creazione di azioni nella guida per gli sviluppatori di Runtime. Quindi impostale utilizzando le variabili di ambiente durante la distribuzione. È possibile accedere a questi parametri in params all'interno dell'azione.

Imposta i parametri di default all'interno del inputs nel manifest.yml:

packages:
  __APP_PACKAGE__:
    actions:
      worker:
        function: 'index.js'
        runtime: 'nodejs:10'
        web: true
        inputs:
           secretKey: $SECRET_KEY
        annotations:
          require-adobe-auth: true

Il $VAR espressione legge il valore da una variabile di ambiente denominata VAR.

Durante lo sviluppo, il valore può essere impostato nel file ENV locale come aio legge automaticamente le variabili di ambiente dai file ENV, oltre alle variabili impostate dalla shell di richiamo. In questo esempio, il file ENV si presenta come segue:

#...
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 in Adobe I/O Runtime con limiti che possono essere configurati tramite manifest.yml:

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

A causa della maggiore estensione dell’elaborazione solitamente eseguita dalle applicazioni Asset compute, è più probabile che si debbano 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 timeout limite (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 e quindi le rappresentazioni risultanti vengono caricate di nuovo.

La memoria disponibile per un contenitore di azioni è specificata da memorySize in MB. Attualmente questo 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 di CPU, ma occorre fare attenzione a non sprecare risorse in quanto più grandi sono i contenitori, minore è il throughput complessivo.

Inoltre, è possibile controllare la concorrenza delle azioni all’interno di un contenitore utilizzando concurrency impostazione. Questo è il numero di attivazioni simultanee che un singolo contenitore (della stessa azione) ottiene. In questo modello, il contenitore delle azioni è simile a un server Node.js che riceve più richieste simultanee, fino a tale limite. Se non è impostato, il valore predefinito in Runtime è 200, ideale per le azioni di App Builder di dimensioni ridotte, ma in genere è troppo grande per applicazioni di Asset compute, data la maggiore intensità dell’elaborazione locale e dell’attività 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.

Eseguire test delle 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