Desenvolver um aplicativo personalizado develop

Antes de começar a desenvolver um aplicativo personalizado:

Criar um aplicativo personalizado create-custom-application

Certifique-se de ter o Adobe I/O CLI instalado localmente.

  1. Para criar um aplicativo personalizado, criar um projeto do App Builder. Para fazer isso, execute aio app init <app-name> no terminal.

    Se você ainda não tiver feito logon, esse comando solicitará que um navegador solicite que você faça logon na Console do Adobe Developer com sua Adobe ID. Consulte aqui para obter mais informações sobre como fazer logon pela cli.

    O Adobe recomenda que você faça logon. Se tiver problemas, siga as instruções para criar um aplicativo sem fazer logon.

  2. Depois de fazer logon, siga os prompts na CLI e selecione o Organization, Project, e Workspace para usar no aplicativo. Escolha o projeto e o espaço de trabalho que você criou ao configurar o ambiente. Quando solicitado Which extension point(s) do you wish to implement ?, selecione 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 solicitado com Which Adobe I/O App features do you want to enable for this project?, selecione Actions. Certifique-se de desmarcar Web Assets Os ativos da Web usam diferentes verificações de autenticação e autorização.

    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 solicitado Which type of sample actions do you want to create?, selecione 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. Siga o restante dos prompts e abra o novo aplicativo no Visual Studio Code (ou seu editor de código favorito). Ele contém o andaime e o código de amostra de um aplicativo personalizado.

    Leia aqui sobre o principais componentes de um aplicativo App Builder.

    O aplicativo de modelo aproveita nossa ASSET COMPUTE SDK para o upload, download e orquestração de representações de aplicativos, de modo que os desenvolvedores só precisam implementar a lógica de aplicativo personalizado. Dentro do actions/<worker-name> pasta, a variável index.js é onde adicionar o código de aplicativo personalizado.

Consulte exemplo de aplicativos personalizados para obter exemplos e ideias de aplicativos personalizados.

Adicionar credenciais add-credentials

À medida que você faz logon ao criar o aplicativo, a maioria das credenciais do App Builder é coletada no arquivo ENV. No entanto, o uso da ferramenta de desenvolvedor requer credenciais adicionais.

Credenciais de armazenamento da ferramenta do desenvolvedor developer-tool-credentials

A ferramenta de desenvolvedor usada para testar aplicativos personalizados com o Asset Compute service requer um contêiner de armazenamento em nuvem para hospedar arquivos de teste e para receber e exibir representações geradas por aplicativos.

NOTE
Isso é separado do armazenamento em nuvem do Adobe Experience Manager as a Cloud Service. Ela só se aplica ao desenvolvimento e teste com a ferramenta de desenvolvedor do Asset compute.

Certifique-se de ter acesso a um contêiner de armazenamento na nuvem compatível. Esse contêiner pode ser compartilhado por vários desenvolvedores em diferentes projetos, conforme necessário.

Adicionar credenciais ao arquivo ENV add-credentials-env-file

Adicione as seguintes credenciais da ferramenta de desenvolvedor ao arquivo ENV na raiz do projeto do App Builder:

  1. Adicione o caminho absoluto ao arquivo de chave privada criado ao adicionar serviços ao seu projeto do App Builder:

    code language-conf
    ASSET_COMPUTE_PRIVATE_KEY_FILE_PATH=
    
  2. Baixe o arquivo no Console do Adobe Developer. Vá para a raiz do projeto e clique em "Baixar tudo" no canto superior direito. O arquivo é baixado com <namespace>-<workspace>.json como o nome do arquivo. Siga uma das seguintes opções:

    • Renomear o arquivo como console.json e mova-a para a raiz do seu projeto.

    • Como opção, adicione o caminho absoluto ao arquivo JSON de integração do Console do Adobe Developer. Isso é o mesmo console.json arquivo que é baixado na área de trabalho do projeto.

      code language-conf
      ASSET_COMPUTE_INTEGRATION_FILE_PATH=
      
  3. Adicione credenciais de armazenamento do S3 ou do Azure. Você só precisa de acesso a uma solução de armazenamento na nuvem.

    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
A variável config.json o arquivo contém credenciais. No seu projeto, adicione o arquivo JSON ao .gitignore para impedir seu compartilhamento. O mesmo se aplica aos arquivos .env e .aio.

Executar o aplicativo run-custom-application

Antes de executar o aplicativo com a Ferramenta de desenvolvedor do Asset compute, configure adequadamente a variável credenciais.

Para executar o aplicativo na ferramenta do desenvolvedor, use aio app run comando. Ele implanta a ação para Adobe I/O Execute o tempo e inicie a ferramenta de desenvolvimento no computador local. Essa ferramenta é usada para testar solicitações de aplicativos durante o desenvolvimento. Este é um exemplo de solicitação de representação:

"renditions": [
    {
        "worker": "https://1234_my_namespace.adobeioruntime.net/api/v1/web/example-custom-worker-master/worker",
        "name": "image.jpg"
    }
]
NOTE
Não use o --local sinalizador com o run comando. Não funciona com a Asset Compute aplicativos personalizados e a ferramenta Asset compute Developer. Os aplicativos personalizados são chamados pelo Asset Compute Service que não podem acessar ações executadas nos computadores locais do desenvolvedor.

Consulte aqui como testar e depurar seu aplicativo. Quando terminar de desenvolver o aplicativo personalizado, implantar seu aplicativo personalizado.

Experimente o aplicativo de amostra fornecido pelo Adobe try-sample

Veja a seguir exemplos de aplicativos personalizados:

Aplicativo personalizado de modelo template-custom-application

A variável worker-basic é um aplicativo modelo. Ele gera uma representação simplesmente copiando o arquivo de origem. O conteúdo deste aplicativo é o modelo recebido ao escolher Adobe Asset Compute na criação do aplicativo aio.

O arquivo do aplicativo, worker-basic.js usa o asset-compute-sdk para baixar o arquivo de origem, orquestre cada processamento de representação e faça upload das representações resultantes de volta para o armazenamento na nuvem.

A variável renditionCallback definido no código do aplicativo, é onde executar toda a lógica de processamento do aplicativo. O retorno de chamada da representação em worker-basic O simplesmente copia o conteúdo do arquivo de origem para o arquivo de representação.

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

Chamar uma API externa call-external-api

No código do aplicativo, é possível fazer chamadas de API externas para ajudar no processamento do aplicativo. Um exemplo de arquivo de aplicativo que chama a API externa está abaixo.

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

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

Por exemplo, a variável worker-animal-pictures faz uma solicitação de busca para um URL estático da Wikimedia usando o node-httptransfer biblioteca.

Envio de parâmetros personalizados pass-custom-parameters

Você pode passar parâmetros definidos pelo cliente pelos objetos de representação. Eles podem ser referenciados dentro do aplicativo no rendition instruções. Um exemplo de um objeto de representação é:

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

Um exemplo de um arquivo de aplicativo que acessa o parâmetro personalizado é:

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

A variável example-worker-animal-pictures passa um parâmetro personalizado animal para determinar qual arquivo buscar na Wikimedia.

Suporte para autenticação e autorização authentication-authorization-support

Por padrão, os aplicativos personalizados do Asset compute vêm com verificações de Autorização e Autenticação para o projeto do App Builder. Isso é ativado ao configurar o require-adobe-auth anotação para true no manifest.yml.

Acessar outras APIs Adobe access-adobe-apis

Adicione os serviços de API à Asset Compute Espaço de trabalho do console criado na configuração. Esses serviços fazem parte do token de acesso JWT gerado pelo Asset Compute Service. O token e outras credenciais podem ser acessados dentro da ação do aplicativo params objeto.

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

Transmita credenciais para sistemas de terceiros pass-credentials-for-tp

Para manipular credenciais para outros serviços externos, passe-as como parâmetros padrão nas ações. Elas são criptografadas automaticamente em trânsito. Para obter mais informações, consulte criação de ações no guia do desenvolvedor de tempo de execução. Em seguida, defina-as usando variáveis de ambiente durante a implantação. Esses parâmetros podem ser acessados no campo params objeto dentro da ação.

Defina os parâmetros padrão dentro do inputs no manifest.yml:

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

A variável $VAR A expressão lê o valor de uma variável de ambiente chamada VAR.

Durante o desenvolvimento, o valor pode ser definido no arquivo ENV local como aio O lê automaticamente as variáveis de ambiente dos arquivos ENV, além das variáveis definidas no shell de chamada. Neste exemplo, o arquivo ENV tem a seguinte aparência:

#...
SECRET_KEY=secret-value

Para implantação em produção, é possível definir as variáveis de ambiente no sistema CI, por exemplo, usando segredos em Ações do GitHub. Por fim, acesse os parâmetros padrão dentro do aplicativo da seguinte maneira:

const key = params.secretKey;

Dimensionamento de aplicativos sizing-workers

Um aplicativo é executado em um container no Adobe I/O Tempo de execução com limites que pode ser configurado por meio da variável manifest.yml:

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

Devido ao processamento mais extenso normalmente feito pelos aplicativos do Asset compute, é mais provável que seja necessário ajustar esses limites para obter o desempenho ideal (grande o suficiente para lidar com ativos binários) e a eficiência (não desperdiçar recursos devido à memória do contêiner não utilizada).

O tempo limite padrão para ações em Tempo de execução é de um minuto, mas pode ser aumentado definindo o parâmetro timeout limite (em milissegundos). Se você espera processar arquivos maiores, aumente esse tempo. Considere o tempo total necessário para baixar a origem, processar o arquivo e fazer upload da representação. Se uma ação atingir o tempo limite, ou seja, não retornar a ativação antes do tempo limite especificado, o Tempo de execução descartará o contêiner e não o reutilizará.

Por natureza, os aplicativos de asset compute tendem a ser vinculados à rede e à entrada ou saída de disco. Primeiro, é necessário baixar o arquivo de origem. Geralmente, o processamento consome muitos recursos e, em seguida, as representações resultantes são carregadas novamente.

A memória disponível para um contêiner de ação é especificada por memorySize em MB. Atualmente, isso também define quanto acesso à CPU o contêiner recebe e, mais importante, é um elemento essencial do custo de uso do Tempo de execução (contêineres maiores custam mais). Use um valor maior aqui quando o processamento exigir mais memória ou CPU, mas tenha cuidado para não desperdiçar recursos, pois quanto maior for o contêiner, menor será o throughput geral.

Além disso, é possível controlar a simultaneidade da ação em um contêiner usando o concurrency configuração. Esse é o número de ativações simultâneas que um único contêiner (da mesma ação) obtém. Nesse modelo, o container de ação é como um servidor Node.js que recebe várias solicitações simultâneas, até esse limite. Se não estiver definido, o padrão em Tempo de execução será 200, o que é ótimo para ações menores do Construtor de aplicativos, mas geralmente muito grande para aplicativos do Asset compute, devido ao processamento local e à atividade de disco mais intensos. Alguns aplicativos, dependendo de sua implementação, também podem não funcionar bem com a atividade simultânea. O SDK do Asset compute garante que as ativações sejam separadas gravando arquivos em pastas exclusivas diferentes.

Teste os aplicativos para encontrar os números ideais para concurrency e memorySize. Contêineres maiores = limite de memória mais alto pode permitir mais simultaneidade, mas também pode ser um desperdício para tráfego mais baixo.

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