Use variáveis de ambiente para ajustar o comportamento de uma função do FC sem alterar o código. Variáveis de ambiente são pares chave-valor do tipo string armazenados na configuração da função. Cada função possui seu próprio conjunto de variáveis de ambiente. Este tópico descreve os conceitos básicos das variáveis de ambiente e como configurá-las.
Segurança
Ao criar ou atualizar variáveis de ambiente, o Function Compute as criptografa em repouso usando o Advanced Encryption Standard 256 (AES-256). Quando uma instância da função é inicializada, as variáveis são descriptografadas e injetadas no ambiente da instância.
Limitações
-
Regras de conjunto de caracteres
A chave deve começar com uma letra e conter apenas letras, dígitos e sublinhados (_).
-
Limite de tamanho
O tamanho total de todas as variáveis de ambiente não pode exceder 4 KB.
-
Variáveis de ambiente de sistema reservadas
Para evitar conflitos de sistema, não use variáveis de ambiente com o prefixo reservado FC_*.
O Function Compute oferece suporte às seguintes variáveis de ambiente de sistema:
FC_FUNC_CODE_PATH: diretório de implantação do código.
ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET e ALIBABA_CLOUD_SECURITY_TOKEN: credenciais temporárias obtidas da função de execução da função, incluindo AccessKey ID, AccessKey secret e token temporário.
FC_ACCOUNT_ID: ID do usuário.
FC_FUNCTION_HANDLER: handler da função.
FC_FUNCTION_MEMORY_SIZE: tamanho de memória configurado para a função, em MB.
FC_FUNCTION_NAME: nome da função.
FC_REGION: região onde a função reside.
FC_CUSTOM_LISTEN_PORT: porta de escuta personalizada da função.
FC_INSTANCE_ID: ID da instância da função.
FC_VER_ID: ID da versão da função. Esta variável está disponível para runtimes integrados no Debian 10 e anteriores.
FC_FUNCTION_VERSION: ID da versão da função. Esta variável está disponível para runtimes integrados no Debian 11 e posteriores.
Casos de uso
-
Compartilhar código entre plataformas ou serviços
Use variáveis de ambiente para gerenciar configurações diferentes para ambientes de teste e produção, como especificar buckets distintos do Object Storage Service (OSS), bancos de dados ou tabelas. Isso permite implantar a mesma base de código em várias plataformas sem modificações.
-
Configurar credenciais
Defina credenciais de conexão com banco de dados, seu AccessKey do Alibaba Cloud ou outras informações sensíveis de autenticação por meio de variáveis de ambiente.
-
Configurar variáveis de sistema
Use bibliotecas de sistema com mais flexibilidade ao configurar diretórios como PATH e HOME.
Configurar variáveis de ambiente
Console
Pré-requisitos
Uma função criada. Para obter mais informações, consulte Criar uma função.
Procedimento
Faça login no console do Function Compute. No painel de navegação à esquerda, escolha .
Na barra de navegação superior, selecione uma região. Na página Functions, clique em na função desejada.
Na página de detalhes da função, clique em na aba Configuration e, em seguida, na seção Advanced Settings, clique em Modify.
-
No painel Advanced Settings, em Environment Variables, configure as variáveis usando um dos métodos a seguir e clique em Deploy.
-
Usar o editor de formulário
Clique em + Add Variable.
-
Configure um par chave-valor para a variável de ambiente:
Variable: insira uma chave personalizada.
Value: insira um valor personalizado.
-
Usar o editor JSON
Clique em Use JSON format to edit.
-
Na caixa de texto, insira os pares chave-valor no formato JSON, conforme mostrado no exemplo a seguir:
{ "key": "value" }Exemplo:
{ "BUCKET_NAME": "MY_BUCKET", "TABLE_NAME": "MY_TABLE" }
-
-
Verifique se as variáveis de ambiente entraram em vigor.
Na página de detalhes da função, clique em na aba Code.
-
No editor de código, escreva seu código e clique em Deploy. Após a implantação bem-sucedida, clique em Test Function.
O código de exemplo a seguir para uma função de evento Python mostra como verificar as variáveis de ambiente:
# -*- coding: utf-8 -*- import logging import os def handler(event, context): logger = logging.getLogger() value = os.environ.get('BUCKET_NAME') logger.info('BUCKET_NAME: {}'.format(value)) value = os.environ.get('TABLE_NAME') logger.info('TABLE_NAME: {}'.format(value)) return "done" Na aba Code, visualize a Log Output. Após a execução bem-sucedida da função, as variáveis de ambiente configuradas aparecem nos logs.
Serverless Devs
Pré-requisitos
Serverless Devs instalado e configurado. Para obter mais informações, consulte Início rápido.
Procedimento
Crie um diretório de código para testes, como
test.-
Acesse o diretório
teste crie um arquivoindex.pye um arquivos.yaml.O diretório de código tem a seguinte estrutura:
. ├── code │ └── index.py └── s.yamlO arquivo
index.pycontém o código da sua função. Para o código de exemplo, consulte o exemplo na seção Console.O arquivo
s.yamlé o arquivo de configuração da função. Veja um exemplo abaixo:edition: 3.0.0 name: hello-world-app # access: specifies the required credential information for the application. # For more information about how to configure credentials, see https://www.serverless-devs.com/serverless-devs/command/config # For more information about the credential priority, see https://www.serverless-devs.com/serverless-devs/tool#credential-priority-and-specifications access: "default" vars: # Global variables region: "cn-hangzhou" resources: hello_world: # To perform an operation only on a specific service like hello_world, specify its name in the command. Example: # Build only for the hello_world service: s hello_world build # If you run the s build command without specifying a service, Serverless Devs performs the build operation on all services that are at the same level as hello_world in the YAML file. component: fc3 # The component name. Serverless Devs uses components to extend its capabilities. This component enables Function Compute features. # actions: # Custom execution logic. For more information, see https://docs.serverless-devs.com/serverless-devs/yaml#actions. props: region: ${vars.region} # For more information about how to use variables, see https://docs.serverless-devs.com/serverless-devs/yaml#variable-assignment. functionName: envdemo # Declares a function named envdemo. description: 'hello world by serverless devs' runtime: python3 # Specifies the function runtime. code: ./code handler: index.handler # Specifies the function handler. memorySize: 128 timeout: 30 environmentVariables: # Configures two environment variables for the function. BUCKET_NAME: MY_BUCKET TABLE_NAME: MY_TABLE codeUri: ./ # Deploys the function from the current directory "./". During deployment, Serverless Devs packages and uploads the current directory. -
Execute o comando
s deploypara implantar o projeto.Após uma implantação bem-sucedida, faça login no console do Function Compute para visualizar a função criada e suas variáveis de ambiente.
SDK
Os exemplos a seguir usam o SDK para Python. O parâmetro environmentVariables, que aceita um dicionário, especifica as variáveis de ambiente. O código de exemplo mostra como criar, atualizar e recuperá-las.
-
Criar variáveis de ambiente
# coding: utf-8 import fc2 import os client = fc2.Client( endpoint='your endpoint', # The endpoint. # We recommend not storing your AccessKey ID and AccessKey secret in your code. # Leaking this sensitive information can compromise the security of your resources. # This example uses environment variables for authentication. # Before running this code, set the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables locally. accessKeyID=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), # Your AccessKey ID, used for authentication. You can create and manage it in the RAM console. accessKeySecret=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET') # Your AccessKey secret, used for authentication. You can create and manage it in the RAM console. ) client.create_service('test') client.create_function( 'test', # The service name. 'test_env', # The function name. 'python3', # The runtime. 'main.handler', # The handler. codeDir='/path/to/code/', # The code directory. environmentVariables={'testKey': 'testValue'} # The environment variables to configure. ) res = client.get_function('test', 'test_env') print(res.data) -
Atualizar variáveis de ambiente
client.update_function( 'test', 'test_env', 'python3', 'main.handler', codeDir='/path/to/code/', environmentVariables={'newKey': 'newValue'}) res = client.get_function('test', 'test_env') print(res.data) -
Obter variáveis de ambiente
resp = client.get_function('test', 'test_env') env = func['environmentVariables']
Usar variáveis de ambiente no seu código
Supondo que você tenha configurado a variável de ambiente {"key":"val"}, os exemplos a seguir mostram como ler seu valor em diferentes runtimes.
var value = process.env.key
console.log(value)
import os
value = os.environ.get('key')
print(value)
$value = getenv('key');
System.out.println("value: "+ System.getenv("key"));
string value = Environment.GetEnvironmentVariable("key");
Console.WriteLine("value: {0}", value);
var value = os.Getenv("key")
fmt.Printf("value: %s\n", value)