Usar parâmetros do Parameter Store em funções do AWS Lambda
O Parameter Store, um recurso do AWS Systems Manager, oferece armazenamento hierárquico seguro para gerenciamento de dados de configuração e gerenciamento de segredos. Você pode armazenar dados, como senhas, strings de banco de dados, IDs de Amazon Machine Image (AMI) e códigos de licença como valores de parâmetro.
Para usar parâmetros do Parameter Store em funções do AWS Lambda sem usar um SDK, você pode usar a extensão do Lambda para parâmetros e segredos da AWS. Essa extensão recupera os valores dos parâmetros e os armazena em cache para uso futuro. O uso da extensão do Lambda pode reduzir custos diminuindo o número de chamadas de API para o Parameter Store. O uso da extensão também pode melhorar a latência, pois recuperar um parâmetro do cache é mais rápido do que recuperá-lo do Parameter Store.
Uma extensão do Lambda corresponde a um processo complementar que aumenta os recursos de uma função do Lambda. Uma extensão é como um cliente que é executado em paralelo a uma invocação do Lambda. Esse cliente paralelo pode interagir com a função a qualquer momento durante o seu ciclo de vida. Para obter mais informações sobre extensões do Lambda, consulte API de extensões do Lambda no Guia do desenvolvedor do AWS Lambda.
A extensão do Lambda para parâmetros e segredos da AWS funciona tanto para o Parameter Store quanto para o AWS Secrets Manager. Para saber como usar a extensão do Lambda para segredos do Secrets Manager, consulte Usar segredos do AWS Secrets Manager em funções do AWS Lambda no Guia do usuário do AWS Secrets Manager.
Informações relacionadas
Usando a extensão do Lambda Parameter and Secrets da AWS para armazenar em cache parâmetros e segredos
Como a extensão funciona
Para usar parâmetros em uma função do Lambda sem a extensão do Lambda, você deve configurar a função do Lambda para receber atualizações de configuração por meio da integração com a ação da API GetParameter
para o Parameter Store.
Quando você usa a extensão do Lambda para parâmetros e segredos da AWS, a extensão recupera o valor do parâmetro do Parameter Store e o armazena no cache local. Em seguida, o valor em cache é usado para outras invocações até expirar. Os valores em cache expiram quando seu tempo de vida (TTL) termina. Você pode configurar o valor de TTL usando a variável de ambiente SSM_PARAMETER_STORE_TTL
, conforme explicado mais adiante neste tópico.
Se o TTL do cache configurado não tiver expirado, o valor do parâmetro em cache será usado. Se o tempo tiver expirado, o valor em cache será invalidado e o valor do parâmetro será recuperado do Parameter Store.
Além disso, o sistema detecta os valores de parâmetros que são usados com frequência e os mantém no cache, e limpa os que expiraram ou que não foram usados.
Detalhes da implantação
Use os detalhes a seguir para ajudar você a configurar a extensão do Lambda para parâmetros e segredos da AWS.
- Autenticação
-
Para autorizar e autenticar solicitações do Parameter Store, a extensão usa as mesmas credenciais usadas para executar a própria função do Lambda. Portanto, o perfil do AWS Identity and Access Management (IAM) usada para executar a função deve ter as seguintes permissões para interagir com o Parameter Store:
-
ssm:GetParameter
: necessário para recuperar parâmetros do Parameter Store -
kms:Decrypt
: necessário se você estiver recuperando parâmetrosSecureString
do Parameter Store
Para obter mais informações, consulte perfil do IAM para execução do AWS Lambda no Guia do desenvolvedor do AWS Lambda.
-
- Instanciação
-
O Lambda cria instâncias separadas correspondentes ao nível de simultaneidade requerido por sua função. Cada instância é isolada e mantém o próprio cache local dos dados de configuração. Para obter mais informações sobre instâncias do Lambda e simultaneidade, consulte Configurar a simultaneidade reservada no Guia do desenvolvedor do AWS Lambda.
- Nenhuma dependência de SDK
-
A extensão do Lambda para parâmetros e segredos da AWS funciona independentemente de qualquer biblioteca de linguagem do AWS SDK. Não é necessário um AWS SDK para fazer solicitações GET ao Parameter Store.
- Porta do Localhost
-
Use o
localhost
nas solicitações GET. A extensão faz solicitações para a porta 2773 do localhost. Não é necessário especificar um endpoint externo ou interno para usar a extensão. Você pode configurar a porta ao definir a variável de ambientePARAMETERS_SECRETS_EXTENSION_HTTP_PORT
.Por exemplo, em Python, GET URL pode ser semelhante ao exemplo a seguir.
parameter_url = ('http://localhost:' + port + '/systemsmanager/parameters/get/?name=' + ssm_parameter_path)
- Alterações no valor de um parâmetro antes da expiração do TTL
-
A extensão não detecta alterações no valor do parâmetro e não realiza uma atualização automática antes que o TTL expire. Se você alterar o valor de um parâmetro, as operações que usam o valor do parâmetro em cache poderão falhar até que o cache seja atualizado da próxima vez. Se você espera alterações frequentes no valor de um parâmetro, recomendamos que defina um valor de TTL mais curto.
- Exigência de cabeçalho
-
Para recuperar parâmetros do cache da extensão, o cabeçalho da solicitação GET deve incluir uma referência a
X-Aws-Parameters-Secrets-Token
. Defina o token comoAWS_SESSION_TOKEN
, fornecido pelo Lambda para todas as funções em execução. O uso desse cabeçalho indica que o chamador está no ambiente do Lambda. - Exemplo
-
O exemplo a seguir em Python demonstra uma solicitação básica para recuperar o valor de um parâmetro em cache.
import urllib.request import os import json aws_session_token = os.environ.get('AWS_SESSION_TOKEN') def lambda_handler(event, context): # Retrieve /my/parameter from Parameter Store using extension cache req = urllib.request.Request('http://localhost:2773/systemsmanager/parameters/get?name=%2Fmy%2Fparameter') req.add_header('X-Aws-Parameters-Secrets-Token', aws_session_token) config = urllib.request.urlopen(req).read() return json.loads(config)
- Suporte ao ARM
-
A extensão não oferece suporte à arquitetura ARM, em todas as mesmas Regiões da AWS em que há suporte para as arquiteturas x86_64 e x86.
Para obter listas completas de ARNs de extensão, consulte ARNs da extensão do Lambda para parâmetros e segredos da AWS.
- Registro em log
-
O Lambda registra informações de execução sobre a extensão em conjunto com a função usando o Amazon CloudWatch Logs. Por padrão, a extensão registra uma quantidade mínima de informações no CloudWatch. Para registrar mais detalhes em log, defina a variável de ambiente
PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL
paraDEBUG
.
Adicionar a extensão a uma função do Lambda
Para usar a extensão do Lambda para parâmetros e segredos da AWS, adicione a extensão à função Lambda como uma camada.
Use um dos métodos a seguir para adicionar a extensão à função.
- AWS Management Console (Opção de adicionar camada)
-
Abra o console AWS Lambda em https://console.aws.amazon.com/lambda/
. -
Escolha a função. Na área Layers (Camadas), escolha Add a layer. (Adicionar uma camada).
-
Na área Escolher uma camada, escolha a opção Camadas da AWS.
-
Em Camadas da AWS, escolha AWS-Parameters-and-Secrets-Lambda-Extension, escolha uma versão e depois escolha Adicionar.
- AWS Management Console (Opção de especificar um ARN)
-
Abra o console AWS Lambda em https://console.aws.amazon.com/lambda/
. -
Escolha a função. Na área Layers (Camadas), escolha Add a layer. (Adicionar uma camada).
-
Na área Choose a layer (Escolher uma camada), escolha a opção Specify an ARN (Especificar um ARN).
-
Em Specify an ARN (Especificar um ARN), insira o ARN da extensão para a Região da AWS e a arquitetura e depois escolha Add (Adicionar).
- AWS Command Line Interface
-
Execute o comando a seguir na AWS CLI. Substitua cada
espaço reservado para recurso de exemplo
por suas próprias informações.aws lambda update-function-configuration \ --function-name
function-name
\ --layerslayer-ARN
Informações relacionadas
Usar camadas com a função do Lambda
Configurar extensões (arquivamento de arquivo.zip)
Variáveis de ambiente da extensão do Lambda para parâmetros e segredos da AWS
Você pode configurar a extensão alterando as variáveis de ambiente a seguir. Para ver as configurações atuais, defina PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL
como DEBUG
. Para obter mais informações, consulte Usar de variáveis de ambiente do AWS Lambda no Guia do desenvolvedor do AWS Lambda.
nota
O AWS Lambda registra os detalhes operacionais da extensão do Lambda e a função do Lambda no Amazon CloudWatch Logs.
Variável de ambiente | Detalhes | Obrigatório | Valores válidos | Valor padrão |
---|---|---|---|---|
|
Tempo limite, em milissegundos, para solicitações ao Parameter Store.
Um valor 0 (zero) indica que não há tempo limite. |
Não | Todos os números inteiros | 0 (zero) |
|
Tempo limite, em milissegundos, para solicitações ao Secrets Manager.
Um valor 0 (zero) indica que não há tempo limite. |
Não | Todos os números inteiros |
0 (zero) |
|
Vida útil máxima válida, em segundos, de um parâmetro no cache antes de ser invalidado. Um valor de 0 (zero) indica que o cache deve ser ignorado. Essa variável será ignorada se o valor de |
Não | 0 (zero) a 300 s (5 minutos) | 300 s (5 minutos) |
|
Vida útil máxima válida, em segundos, de um segredo no cache antes de ser invalidado. Um valor de 0 (zero) indica que o cache é ignorado. Essa variável será ignorada se o valor de |
Não | 0 (zero) a 300 s (5 minutos) | 300 s (5 minutos) |
PARAMETERS_SECRETS_EXTENSION_CACHE_ENABLED |
Determina se o cache para a extensão está habilitado. Valor: |
Não | TRUE | FALSE | VERDADEIRO |
PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE |
O tamanho máximo do cache em termos de número de itens. Um valor de 0 (zero) indica que o cache é ignorado. Essa variável será ignorada se os dois valores de TTL do cache forem 0 (zero). |
Não | 0 (zero) a 1000 |
1000 |
PARAMETERS_SECRETS_EXTENSION_HTTP_PORT |
A porta para o servidor HTTP local. | Não | 1 - 65535 |
2773 |
PARAMETERS_SECRETS_EXTENSION_MAX_CONNECTIONS |
Número máximo de conexões para os clientes HTTP que a extensão usa para fazer solicitações ao Parameter Store ou ao Secrets Manager. Essa é uma configuração por cliente do número de conexões que o cliente do Secrets Manager e o cliente do Parameter Store fazem aos serviços de backend. |
Não | Mínimo de 1, sem limite máximo. |
3 |
PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL |
O nível de detalhes relatado nos logs da extensão. Recomendamos usar Os logs das operações do Lambda são automaticamente enviados para um grupo de logs associado do CloudWatch Logs. |
Não |
|
INFO |
Exemplos de comandos para usar o Parameter Store do AWS Systems Manager e a extensão do AWS Secrets Manager
Os exemplos nesta seção demonstram ações de API para uso com o Parameter Store do AWS Systems Manager e a extensão do AWS Secrets Manager.
Exemplos de comandos para Parameter Store
A extensão do Lambda usa acesso somente leitura à ação da API GetParameter.
Para chamar essa ação, faça uma chamada HTTP GET semelhante à que se segue. Esse formato de comando fornece acesso aos parâmetros na camada de parâmetros padrão.
GET http://localhost:
port
/systemsmanager/parameters/get?name=parameter-name
&version=version
&label=label
&withDecryption={true|false}
Neste exemplo, parameter-name
representa o nome completo do parâmetro, como MyParameter
, para um parâmetro que não está em uma hierarquia, ou %2FDev%2FProduction%2FEast%2FProject-ABC%2FMyParameter
para um parâmetro chamado /Dev/Production/East/Project-ABC/MyParameter
que faz parte de uma hierarquia.
nota
Ao usar chamadas GET, os valores dos parâmetros devem ser codificados em HTTP para preservar os caracteres especiais. Por exemplo, em vez de formatar um caminho hierárquico com /a/b/c
, codifique caracteres que possam ser interpretados como parte da URL, como%2Fa%2Fb%2Fc
.
version
e label
são os seletores disponíveis para uso com a ação GetParameter
.
GET http://localhost:
port
/systemsmanager/parameters/get/?name=MyParameter&version=5
Para chamar um parâmetro em uma hierarquia, faça uma chamada HTTP GET semelhante à que se segue.
GET http://localhost:
port
/systemsmanager/parameters/get?name=%2Fa%2Fb%2F&label=release
Para chamar um parâmetro público (global), faça uma chamada HTTP GET semelhante à que se segue.
GET http://localhost:
port
/systemsmanager/parameters/get/?name=%2Faws%2Fservice%20list%2F…
Para fazer uma chamada HTTP GET para um segredo do Secrets Manager usando referências ao Parameter Store, faça uma chamada HTTP GET semelhante à que se segue.
GET http://localhost:
port
/systemsmanager/parameters/get?name=%2Faws%2Freference%2Fsecretsmanager%2F…
Para fazer uma chamada usando o nome do recurso da Amazon (ARN) como parâmetro, faça uma chamada HTTP GET semelhante à que se segue.
GET http://localhost:
port
/systemsmanager/parameters/get?name=arn:aws:ssm:us-east-1:123456789012:parameter/MyParameter
Para fazer uma chamada que acesse um parâmetro SecureString
com descriptografia, faça uma chamada HTTP GET semelhante à que se segue.
GET http://localhost:
port
/systemsmanager/parameters/get?name=MyParameter&withDecryption=true
Você pode especificar que os parâmetros não sejam descriptografados omitindo withDecryption
ou definindo-o explicitamente como false
. Você também pode especificar uma versão ou um rótulo, mas não ambos. Se o fizer, somente o primeiro deles que for colocado após o ponto de interrogação (?
) na URL será usado.
ARNs da extensão do Lambda para parâmetros e segredos da AWS
As tabelas a seguir fornecem ARNs de extensão para as arquiteturas e regiões compatíveis.
Tópicos
ARNs de extensão para as arquiteturas x86_64 e x86
Data da última atualização: 19 de setembro de 2024
Região | ARN |
---|---|
Leste dos EUA (Ohio) |
|
Leste dos EUA (N. da Virgínia) |
|
Oeste dos EUA (N. da Califórnia) |
|
Oeste dos EUA (Oregon) |
|
África (Cidade do Cabo) |
|
Ásia Pacífico (Hong Kong) |
|
Ásia-Pacífico (Haiderabade) |
|
Ásia-Pacífico (Jacarta) |
|
Ásia-Pacífico (Melbourne) |
|
Ásia-Pacífico (Malásia) |
arn:aws:lambda:ap-southeast-5:090732460067:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1 |
Ásia-Pacífico (Mumbai) |
|
Ásia-Pacífico (Osaka) |
|
Ásia-Pacífico (Seul) |
|
Ásia-Pacífico (Singapura) |
|
Ásia-Pacífico (Sydney) |
|
Ásia-Pacífico (Tóquio) |
|
Canadá (Central) |
|
Oeste do Canadá (Calgary) | arn:aws:lambda:ca-west-1:243964427225:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2 |
China (Pequim) |
|
China (Ningxia) |
|
Europa (Frankfurt) |
|
Europa (Irlanda) |
|
Europa (Londres) |
|
Europa (Milão) |
|
Europe (Paris) |
|
Região Europa (Espanha) |
|
Europa (Estocolmo) |
|
Israel (Tel Aviv) |
|
Região Europa (Zurique) |
|
Oriente Médio (Barém) |
|
Oriente Médio (Emirados Árabes Unidos) | arn:aws:lambda:me-central-1:858974508948:layer:AWS-Parameters-and-Secrets-Lambda-Extension:12 |
South America (São Paulo) |
|
AWS GovCloud (Leste dos EUA) |
|
AWS GovCloud (Oeste dos EUA) |
|
ARNs de extensão para arquiteturas ARM64 e Mac with Apple silicon
Data da última atualização: 19 de setembro de 2024
Região | ARN |
---|---|
Leste dos EUA (Ohio) |
|
Leste dos EUA (N. da Virgínia) |
|
Região Oeste dos EUA (Norte da Califórnia) |
|
Oeste dos EUA (Oregon) |
|
Região África (Cidade do Cabo) |
|
Região Ásia-Pacífico (Hong Kong) |
|
Ásia-Pacífico (Haiderabade) |
|
Região Ásia-Pacífico (Jacarta) |
|
Ásia-Pacífico (Melbourne) |
|
Ásia-Pacífico (Malásia) |
arn:aws:lambda:ap-southeast-5:090732460067:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:1 |
Ásia-Pacífico (Mumbai) |
|
Ásia-Pacífico (Osaka) |
|
Região Ásia-Pacífico (Seul) |
|
Ásia-Pacífico (Singapura) |
|
Ásia-Pacífico (Sydney) |
|
Ásia-Pacífico (Tóquio) |
|
Região Canadá (Central) |
|
Oeste do Canadá (Calgary) | arn:aws:lambda:ca-west-1:243964427225:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:1 |
China (Pequim) |
|
China (Ningxia) |
|
Europa (Frankfurt) |
|
Europa (Irlanda) |
|
Europa (Londres) |
|
Região Europa (Milão) |
|
Região Europa (Paris) |
|
Região Europa (Espanha) |
|
Região Europa (Estocolmo) |
|
Israel (Tel Aviv) |
|
Região Europa (Zurique) |
|
Região Oriente Médio (Bahrein) |
|
Oriente Médio (Emirados Árabes Unidos) | arn:aws:lambda:me-central-1:858974508948:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm:1 |
Região América do Sul (São Paulo) |
|
AWS GovCloud (Leste dos EUA) |
|
AWS GovCloud (Oeste dos EUA) |
|