

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Utilizzo delle variabili di ambiente in AWS AppSync
<a name="environment-variables"></a>

Puoi utilizzare le variabili di ambiente per regolare il comportamento dei AWS AppSync resolver e delle funzioni senza aggiornare il codice. Le variabili di ambiente sono coppie di stringhe memorizzate nella configurazione dell'API che vengono rese disponibili ai resolver e alle funzioni per utilizzarle in fase di esecuzione. Sono particolarmente utili nelle situazioni in cui è necessario fare riferimento a dati di configurazione disponibili solo durante la configurazione iniziale ma che devono essere utilizzati dai resolver e dalle funzioni durante l'esecuzione. Le variabili di ambiente espongono i dati di configurazione contenuti nel codice, riducendo in tal modo la necessità di codificare tali valori.

**Nota**  
Per aumentare la sicurezza del database, si consiglia di utilizzare [Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) o [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) anziché le variabili di ambiente per archiviare credenziali o informazioni riservate. Per sfruttare questa funzionalità, consulta [Richiamo di AWS servizi con fonti di dati AWS AppSync HTTP](https://docs.aws.amazon.com/appsync/latest/devguide/tutorial-http-resolvers-js.html#invoking-aws-services-js).

Le variabili di ambiente devono seguire diversi comportamenti e regole per funzionare correttamente:
+ Sia i JavaScript resolver/funzioni che i modelli VTL supportano le variabili di ambiente.
+ Le variabili di ambiente non vengono valutate prima dell'invocazione della funzione.
+ Le variabili di ambiente supportano **solo** valori di stringa.
+ Qualsiasi valore definito in una variabile di ambiente viene considerato una stringa letterale e non espanso.
+ Le valutazioni delle variabili dovrebbero idealmente essere eseguite nel codice della funzione.

## Configurazione delle variabili di ambiente (console)
<a name="configuring-environment-variables-console"></a>

Puoi configurare le variabili di ambiente per la tua API AWS AppSync GraphQL creando la variabile e definendo la sua coppia chiave-valore. I resolver e le funzioni utilizzeranno il nome chiave della variabile di ambiente per recuperare il valore in fase di esecuzione. Per impostare le variabili di ambiente nella console: AWS AppSync 

1. Accedi a Console di gestione AWS e apri la [AppSyncconsole](https://console.aws.amazon.com/appsync/).

1. Nella **APIs**pagina, scegli il nome di un'API GraphQL.

1. Nella home page dell'API, nel riquadro di navigazione, scegli **Impostazioni**.

1. In **Variabili di ambiente**, scegli **Aggiungi variabile di ambiente**.

1. Scegli **Add environment variable (Aggiungi variabile d'ambiente)**.

1. Inserisci una coppia chiave valore.

1. Se necessario, ripeti i passaggi 5 e 6 per aggiungere altri valori chiave. Se devi rimuovere un valore chiave, scegli l'opzione **Rimuovi** e le chiavi da rimuovere.

1. Scegli **Invia**.

**Suggerimento**  
Ci sono alcune regole da seguire quando si creano chiavi e valori:  
Le chiavi devono iniziare con una lettera.
Le chiavi devono contenere almeno due caratteri. 
Le chiavi possono contenere solo lettere, numeri e il carattere di sottolineatura (\$1). 
I valori possono avere una lunghezza massima di 512 caratteri.
Puoi configurare fino a 50 coppie chiave-valore in un'API GraphQL. 

## Configurazione delle variabili di ambiente (API)
<a name="configuring-environment-variables-api"></a>

Per impostare una variabile di ambiente utilizzando APIs, puoi usare`PutGraphqlApiEnvironmentVariables`. Il comando CLI corrispondente è. `put-graphql-api-environment-variables`

Per recuperare una variabile di ambiente utilizzando APIs, puoi usare. `GetGraphqlApiEnvironmentVariables` Il comando CLI corrispondente è. `get-graphql-api-environment-variables`

Il comando deve contenere l'ID API e l'elenco delle variabili di ambiente:

```
aws appsync put-graphql-api-environment-variables \  
  --api-id "<api-id>" \
  --environment-variables '{"key1":"value1","key2":"value2", …}'
```

L'esempio seguente imposta due variabili di ambiente in un'API con l'ID di `abcdefghijklmnopqrstuvwxyz` utilizzo del `put-graphql-api-environment-variables` comando:

```
aws appsync put-graphql-api-environment-variables \  
  --api-id "abcdefghijklmnopqrstuvwxyz" \
  --environment-variables '{"USER_TABLE":"users_prod","DEBUG":"true"}'
```

Si noti che quando si applicano variabili di ambiente con il `put-graphql-api-environment-variables` comando, il contenuto della struttura delle variabili di ambiente viene sovrascritto; ciò significa che le variabili di ambiente esistenti andranno perse. Per mantenere le variabili di ambiente esistenti quando ne aggiungi di nuove, **includi tutte le coppie chiave-valore esistenti** insieme a quelle nuove nella richiesta. Utilizzando l'esempio precedente, se desideri aggiungere`"EMPTY":""`, puoi fare quanto segue:

```
aws appsync put-graphql-api-environment-variables \  
  --api-id "abcdefghijklmnopqrstuvwxyz" \
  --environment-variables '{"USER_TABLE":"users_prod","DEBUG":"true", "EMPTY":""}'
```

Per recuperare la configurazione corrente, usa il `get-graphql-api-environment-variables` comando:

```
aws appsync get-graphql-api-environment-variables --api-id "<api-id>"
```

Utilizzando l'esempio precedente, è possibile utilizzare il seguente comando:

```
aws appsync get-graphql-api-environment-variables --api-id "abcdefghijklmnopqrstuvwxyz"
```

Il risultato mostrerà l'elenco delle variabili di ambiente insieme ai loro valori chiave:

```
{
    "environmentVariables": {
        "USER_TABLE": "users_prod",
        "DEBUG": "true",
        "EMPTY": ""
    }
}
```

## Configurazione delle variabili di ambiente (CFN)
<a name="configuring-environment-variables-cfn"></a>

È possibile utilizzare il modello seguente per creare variabili di ambiente:

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  GraphQLApiWithEnvVariables:
    Type: "AWS::AppSync::GraphQLApi"
    Properties:
      Name: "MyApiWithEnvVars"
      AuthenticationType: "AWS_IAM"
      EnvironmentVariables:
        EnvKey1: "non-empty"
        EnvKey2: ""
```

## variabili di ambiente e unite APIs
<a name="configuring-environment-variables-merged-api"></a>

Le variabili di ambiente definite in Source APIs sono disponibili anche in APIs Merged. Le variabili di ambiente in Merged APIs sono di sola lettura e non possono essere aggiornate. Tieni presente che le chiavi delle variabili di ambiente devono essere univoche in tutto Source APIs affinché le unioni abbiano successo; le chiavi duplicate comporteranno sempre un errore di unione.

## Recupero di variabili di ambiente
<a name="retrieving-environment-variables"></a>

Per recuperare le variabili di ambiente nel codice della funzione, recuperate il valore dall'`ctx.env`oggetto nei resolver e nelle funzioni. Di seguito sono riportati alcuni esempi di ciò in azione.

------
#### [ Publishing to Amazon SNS ]

In questo esempio, il nostro resolver HTTP invia un messaggio a un argomento di Amazon SNS. L'ARN dell'argomento è noto solo dopo che lo stack che definisce l'API GraphQL e l'argomento sono stati distribuiti.

```
/**
 * Sends a publish request to the SNS topic
 */
export function request(ctx) {
    const TOPIC_ARN = ctx.env.TOPIC_ARN;
    const { input: values } = ctx.args;
    // this custom function sends values to the SNS topic
    return publishToSNSRequest(TOPIC_ARN, values);
}
```

------
#### [ Transactions with DynamoDB ]

In questo esempio, i nomi della tabella DynamoDB sono diversi se l'API è implementata per lo staging o è già in produzione. Non è necessario modificare il codice del resolver. I valori delle variabili di ambiente vengono aggiornati in base a dove viene distribuita l'API.

```
import { util } from '@aws-appsync/utils';
export function request(ctx) {
  const { authorId, postId } = ctx.args;
  return {
    operation: 'TransactWriteItems',
    transactItems: [
      {
        table: ctx.env.POST_TABLE,
        operation: 'PutItem',
        key: util.dynamodb.toMapValues({ postId }),
        // rest of the configuration
      },
      {
        table: ctx.env.AUTHOR_TABLE,
        operation: 'UpdateItem',
        key: util.dynamodb.toMapValues({ authorId }),
        // rest of the configuration
      },
    ],
  };
}
```

------