# Instâncias de function

Uma instância de function executa uma [function](/pt-br/documentacao/plataforma/functions/) existente para uma application, com os argumentos que a instância define. Estas funções do `azion/applications` criam, listam, leem, atualizam e excluem as instâncias de function de uma application.

---

## createFunctionInstance

Cria uma instância de function em uma application. Uma instância executa uma [function](/pt-br/documentacao/plataforma/functions/) existente para essa application, com os argumentos que a instância define.

Duas coisas precisam existir antes. A application precisa ter functions ativadas, o que [patchApplication](/pt-br/documentacao/devtools/azion-lib/application/application/#patchapplication) faz com `data: { edge_functions: true }`. A function também precisa existir: a instância a identifica pelo ID dela em `edge_function_id`, e o pacote `azion` não tem um módulo que crie functions.

```typescript
function createFunctionInstance(params: {
  applicationId: number;
  data: ApiCreateFunctionInstancePayload;
  options?: AzionClientOptions;
}): Promise<AzionApplicationResponse<AzionFunctionInstance>>;
```

| Parâmetro       | Tipo                                                                                                                             | Obrigatório | Descrição                                                                   |
| --------------- | -------------------------------------------------------------------------------------------------------------------------------- | ----------- | --------------------------------------------------------------------------- |
| `applicationId` | `number`                                                                                                                         | Sim         | O ID da application.                                                        |
| `data`          | [`ApiCreateFunctionInstancePayload`](/pt-br/documentacao/devtools/azion-lib/application/types/#apicreatefunctioninstancepayload) | Sim         | `name`, o `edge_function_id` da function e os `args` que a function recebe. |
| `options`       | [`AzionClientOptions`](/pt-br/documentacao/devtools/azion-lib/application/types/#azionclientoptions)                             | Não         | Opções de requisição.                                                       |

Retorna `data` como a [AzionFunctionInstance](/pt-br/documentacao/devtools/azion-lib/application/types/#azionfunctioninstance) criada, com o `id` dela.

```typescript
import { createFunctionInstance } from 'azion/applications';

const applicationId = 1234567890; // Replace with the actual application ID

// Define the data for the new function instance
const functionInstanceData = {
  name: 'my-function-instance',
  edge_function_id: 23456, // Replace with the ID of an existing function
  args: { greeting: 'hello' },
};

// Create a new function instance
const { data: newFunctionInstance, error } = await createFunctionInstance({ applicationId, data: functionInstanceData });

if (error) {
  console.error('Error creating function instance:', error);
} else {
  console.log('Function instance created successfully:', newFunctionInstance);
}
```

Saída:

```text
Function instance created successfully: {
  edge_function_id: 23456,
  name: 'my-function-instance',
  args: { greeting: 'hello' },
  id: 12345
}
```

---

## getFunctionInstances

Lista as instâncias de function de uma application, uma página por vez.

```typescript
function getFunctionInstances(params: {
  applicationId: number;
  params?: ApiListFunctionInstancesParams;
  options?: AzionClientOptions;
}): Promise<AzionApplicationCollectionResponse<AzionFunctionInstance>>;
```

| Parâmetro       | Tipo                                                                                                              | Obrigatório | Descrição                        |
| --------------- | ----------------------------------------------------------------------------------------------------------------- | ----------- | -------------------------------- |
| `applicationId` | `number`                                                                                                          | Sim         | O ID da application.             |
| `params`        | [`ApiListFunctionInstancesParams`](/pt-br/documentacao/devtools/azion-lib/application/types/#parametros-de-lista) | Não         | Paginação: `page` e `page_size`. |
| `options`       | [`AzionClientOptions`](/pt-br/documentacao/devtools/azion-lib/application/types/#azionclientoptions)              | Não         | Opções de requisição.            |

Retorna um [AzionApplicationCollectionResponse](/pt-br/documentacao/devtools/azion-lib/application/types/#azionapplicationcollectionresponse) cujo `data.results` contém objetos [AzionFunctionInstance](/pt-br/documentacao/devtools/azion-lib/application/types/#azionfunctioninstance).

```typescript
import { getFunctionInstances } from 'azion/applications';

const applicationId = 1234567890; // Replace with the actual application ID

const { data: functionInstances, error } = await getFunctionInstances({
  applicationId,
  params: { page: 1, page_size: 10 },
});

if (error) {
  console.error('Error listing function instances:', error);
} else {
  console.log(`Found ${functionInstances?.count} function instances:`, functionInstances?.results);
}
```

Saída:

```text
Found 1 function instances: [
  {
    id: 12345,
    edge_function_id: 23456,
    name: 'my-function-instance',
    args: { greeting: 'hello' }
  }
]
```

---

## getFunctionInstance

Retorna uma instância de function de uma application pelo ID dela.

```typescript
function getFunctionInstance(params: {
  applicationId: number;
  functionInstanceId: number;
  options?: AzionClientOptions;
}): Promise<AzionApplicationResponse<AzionFunctionInstance>>;
```

| Parâmetro            | Tipo                                                                                                 | Obrigatório | Descrição                      |
| -------------------- | ---------------------------------------------------------------------------------------------------- | ----------- | ------------------------------ |
| `applicationId`      | `number`                                                                                             | Sim         | O ID da application.           |
| `functionInstanceId` | `number`                                                                                             | Sim         | O ID da instância de function. |
| `options`            | [`AzionClientOptions`](/pt-br/documentacao/devtools/azion-lib/application/types/#azionclientoptions) | Não         | Opções de requisição.          |

Retorna `data` como uma [AzionFunctionInstance](/pt-br/documentacao/devtools/azion-lib/application/types/#azionfunctioninstance).

```typescript
import { getFunctionInstance } from 'azion/applications';

const applicationId = 1234567890; // Replace with the actual application ID
const functionInstanceId = 12345; // Replace with the actual function instance ID

const { data: functionInstance, error } = await getFunctionInstance({ applicationId, functionInstanceId });

if (error) {
  console.error('Error retrieving function instance:', error);
} else {
  console.log('Function instance details:', functionInstance);
}
```

Saída:

```text
Function instance details: {
  id: 12345,
  edge_function_id: 23456,
  name: 'my-function-instance',
  args: { greeting: 'hello' }
}
```

---

## updateFunctionInstance

Envia em uma requisição `PATCH` os campos da instância de function que você passa.

```typescript
function updateFunctionInstance(params: {
  applicationId: number;
  functionInstanceId: number;
  data: ApiUpdateFunctionInstancePayload;
  options?: AzionClientOptions;
}): Promise<AzionApplicationResponse<AzionFunctionInstance>>;
```

| Parâmetro            | Tipo                                                                                                                  | Obrigatório | Descrição                                  |
| -------------------- | --------------------------------------------------------------------------------------------------------------------- | ----------- | ------------------------------------------ |
| `applicationId`      | `number`                                                                                                              | Sim         | O ID da application.                       |
| `functionInstanceId` | `number`                                                                                                              | Sim         | O ID da instância de function a atualizar. |
| `data`               | [`ApiUpdateFunctionInstancePayload`](/pt-br/documentacao/devtools/azion-lib/application/types/#azionfunctioninstance) | Sim         | Os campos a mudar. O exemplo muda `name`.  |
| `options`            | [`AzionClientOptions`](/pt-br/documentacao/devtools/azion-lib/application/types/#azionclientoptions)                  | Não         | Opções de requisição.                      |

Retorna `data` como a [AzionFunctionInstance](/pt-br/documentacao/devtools/azion-lib/application/types/#azionfunctioninstance) atualizada.

```typescript
import { updateFunctionInstance } from 'azion/applications';

const applicationId = 1234567890; // Replace with the actual application ID
const functionInstanceId = 12345; // Replace with the actual function instance ID

const { data: updatedFunctionInstance, error } = await updateFunctionInstance({
  applicationId,
  functionInstanceId,
  data: { name: 'my-function-instance-updated' },
});

if (error) {
  console.error('Error updating function instance:', error);
} else {
  console.log('Function instance updated:', updatedFunctionInstance);
}
```

Saída:

```text
Function instance updated: {
  id: 12345,
  edge_function_id: 23456,
  name: 'my-function-instance-updated',
  args: { greeting: 'hello' }
}
```

---

## deleteFunctionInstance

Exclui uma instância de function de uma application pelo ID dela.

```typescript
function deleteFunctionInstance(params: {
  applicationId: number;
  functionInstanceId: number;
  options?: AzionClientOptions;
}): Promise<AzionApplicationResponse<void>>;
```

| Parâmetro            | Tipo                                                                                                 | Obrigatório | Descrição                                |
| -------------------- | ---------------------------------------------------------------------------------------------------- | ----------- | ---------------------------------------- |
| `applicationId`      | `number`                                                                                             | Sim         | O ID da application.                     |
| `functionInstanceId` | `number`                                                                                             | Sim         | O ID da instância de function a excluir. |
| `options`            | [`AzionClientOptions`](/pt-br/documentacao/devtools/azion-lib/application/types/#azionclientoptions) | Não         | Opções de requisição.                    |

Uma exclusão bem-sucedida retorna `error` com a mensagem `Expected JSON response, but got: `, por isso o exemplo lê a instância de volta com [getFunctionInstance](#getfunctioninstance). Um erro `404` confirma a exclusão.

```typescript
import { deleteFunctionInstance, getFunctionInstance } from 'azion/applications';

const applicationId = 1234567890; // Replace with the actual application ID
const functionInstanceId = 12345; // Replace with the actual function instance ID

const { error: deleteError } = await deleteFunctionInstance({ applicationId, functionInstanceId });

// On success (HTTP 204) the envelope still carries an error, so confirm by reading it back
const { error } = await getFunctionInstance({ applicationId, functionInstanceId });
if (error) {
  console.log(`Function instance ${functionInstanceId} deleted (read back: ${error.message})`);
} else {
  console.error('Error deleting function instance:', deleteError);
}
```

Saída:

```text
Function instance 12345 deleted (read back: HTTP error! Status: 404 - NOT FOUND)
```

---

## Recursos relacionados

- [Azion Lib](/pt-br/documentacao/devtools/azion-lib.md): Os módulos da Azion Lib e o pacote npm em que cada um é distribuído.
- [Applications](/pt-br/documentacao/devtools/azion-lib/application.md): A autenticação do módulo, o envelope de resposta dele e os erros que as funções reportam.
- [Tipos de application](/pt-br/documentacao/devtools/azion-lib/application/types.md): Os tipos de payload e de resposta que estas funções recebem e retornam.
- [Instâncias de function](/pt-br/documentacao/plataforma/applications/functions-instances.md): A instância de function que uma application executa, com os argumentos dela.
