Usar parâmetros do Parameter Store em funções do AWS Lambda - AWS Systems Manager

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 (Blog de computação da AWS)

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âmetros SecureString 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 ambiente PARAMETERS_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 como AWS_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 para DEBUG.

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)
  1. Abra o console AWS Lambda em https://console.aws.amazon.com/lambda/.

  2. Escolha a função. Na área Layers (Camadas), escolha Add a layer. (Adicionar uma camada).

  3. Na área Escolher uma camada, escolha a opção Camadas da AWS.

  4. 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)
  1. Abra o console AWS Lambda em https://console.aws.amazon.com/lambda/.

  2. Escolha a função. Na área Layers (Camadas), escolha Add a layer. (Adicionar uma camada).

  3. Na área Choose a layer (Escolher uma camada), escolha a opção Specify an ARN (Especificar um ARN).

  4. 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 \ --layers layer-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

SSM_PARAMETER_STORE_TIMEOUT_MILLIS

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)

SECRETS_MANAGER_TIMEOUT_MILLIS

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)

SSM_PARAMETER_STORE_TTL

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 PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE for 0 (zero).

Não 0 (zero) a 300 s (5 minutos) 300 s (5 minutos)

SECRETS_MANAGER_TTL

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 PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE for 0 (zero).

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: TRUE | FALSE

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 back-end.

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 DEBUG para obter o máximo de detalhes sobre a configuração de cache ao configurar e testar a extensão.

Os logs das operações do Lambda são automaticamente enviados para um grupo de logs associado do CloudWatch Logs.

Não

DEBUG | WARN | ERROR | NONE | INFO

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.

GET http://localhost:port/systemsmanager/parameters/get?name=parameter-path&version=version&label=label&withDecryption={true|false}

Neste exemplo, caminho-parâmetro representa o nome completo do parâmetro ou o caminho do parâmetro se o parâmetro fizer parte de uma hierarquia. versão (versão) e rótulo são os seletores disponíveis para uso com a ação GetParameter. Esse formato de comando fornece acesso aos parâmetros na camada de parâmetros padrão.

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.

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.

ARNs de extensão para as arquiteturas x86_64 e x86

Região ARN

Leste dos EUA (Ohio)

arn:aws:lambda:us-east-2:590474943231:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Leste dos EUA (N. da Virgínia)

arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Oeste dos EUA (N. da Califórnia)

arn:aws:lambda:us-west-1:997803712105:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Oeste dos EUA (Oregon)

arn:aws:lambda:us-west-2:345057560386:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

África (Cidade do Cabo)

arn:aws:lambda:af-south-1:317013901791:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Ásia-Pacífico (Hong Kong)

arn:aws:lambda:ap-east-1:768336418462:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Ásia-Pacífico (Haiderabade)

arn:aws:lambda:ap-south-2:070087711984:layer:AWS-Parameters-and-Secrets-Lambda-Extension:8

Ásia-Pacífico (Jacarta)

arn:aws:lambda:ap-southeast-3:490737872127:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Ásia-Pacífico (Melbourne)

arn:aws:lambda:ap-southeast-4:090732460067:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1

Ásia-Pacífico (Mumbai)

arn:aws:lambda:ap-south-1:176022468876:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Ásia-Pacífico (Osaka)

arn:aws:lambda:ap-northeast-3:576959938190:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Ásia-Pacífico (Seul)

arn:aws:lambda:ap-northeast-2:738900069198:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Ásia-Pacífico (Singapura)

arn:aws:lambda:ap-southeast-1:044395824272:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Ásia-Pacífico (Sydney)

arn:aws:lambda:ap-southeast-2:665172237481:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Ásia-Pacífico (Tóquio)

arn:aws:lambda:ap-northeast-1:133490724326:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Canadá (Central)

arn:aws:lambda:ca-central-1:200266452380:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Oeste do Canadá (Calgary) arn:aws:lambda:ca-west-1:243964427225:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1
China (Pequim)

arn:aws-cn:lambda:cn-north-1:287114880934:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

China (Ningxia)

arn:aws-cn:lambda:cn-northwest-1:287310001119:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Europa (Frankfurt)

arn:aws:lambda:eu-central-1:187925254637:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Europa (Irlanda)

arn:aws:lambda:eu-west-1:015030872274:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Europa (Londres)

arn:aws:lambda:eu-west-2:133256977650:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Europa (Milão)

arn:aws:lambda:eu-south-1:325218067255:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Europe (Paris)

arn:aws:lambda:eu-west-3:780235371811:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Região Europa (Espanha)

arn:aws:lambda:eu-south-2:524103009944:layer:AWS-Parameters-and-Secrets-Lambda-Extension:8

Europa (Estocolmo)

arn:aws:lambda:eu-north-1:427196147048:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Israel (Tel Aviv)

arn:aws:lambda:il-central-1:148806536434:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1

Região Europa (Zurique)

arn:aws:lambda:eu-central-2:772501565639:layer:AWS-Parameters-and-Secrets-Lambda-Extension:8

Oriente Médio (Barém)

arn:aws:lambda:me-south-1:832021897121:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Oriente Médio (Emirados Árabes Unidos) arn:aws:lambda:me-central-1:858974508948:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

South America (São Paulo)

arn:aws:lambda:sa-east-1:933737806257:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

AWS GovCloud (Leste dos EUA)

arn:aws-us-gov:lambda:us-gov-east-1:129776340158:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

AWS GovCloud (Oeste dos EUA)

arn:aws-us-gov:lambda:us-gov-west-1:127562683043:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

ARNs de extensão para arquiteturas ARM64 e Mac with Apple silicon

Região ARN

Leste dos EUA (Ohio)

arn:aws:lambda:us-east-2:590474943231:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Leste dos EUA (N. da Virgínia)

arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Região Oeste dos EUA (Norte da Califórnia)

arn:aws:lambda:us-west-1:997803712105:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Oeste dos EUA (Oregon)

arn:aws:lambda:us-west-2:345057560386:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Região África (Cidade do Cabo)

arn:aws:lambda:af-south-1:317013901791:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Região Ásia-Pacífico (Hong Kong)

arn:aws:lambda:ap-east-1:768336418462:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Região Ásia-Pacífico (Jacarta)

arn:aws:lambda:ap-southeast-3:490737872127:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Ásia-Pacífico (Mumbai)

arn:aws:lambda:ap-south-1:176022468876:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Ásia-Pacífico (Osaka)

arn:aws:lambda:ap-northeast-3:576959938190:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Região Ásia-Pacífico (Seul)

arn:aws:lambda:ap-northeast-2:738900069198:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Ásia-Pacífico (Singapura)

arn:aws:lambda:ap-southeast-1:044395824272:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Ásia-Pacífico (Sydney)

arn:aws:lambda:ap-southeast-2:665172237481:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Ásia-Pacífico (Tóquio)

arn:aws:lambda:ap-northeast-1:133490724326:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Região Canadá (Central)

arn:aws:lambda:ca-central-1:200266452380:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Europa (Frankfurt)

arn:aws:lambda:eu-central-1:187925254637:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Europa (Irlanda)

arn:aws:lambda:eu-west-1:015030872274:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Europa (Londres)

arn:aws:lambda:eu-west-2:133256977650:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Região Europa (Milão)

arn:aws:lambda:eu-south-1:325218067255:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Região Europa (Paris)

arn:aws:lambda:eu-west-3:780235371811:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Região Europa (Estocolmo)

arn:aws:lambda:eu-north-1:427196147048:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Região Oriente Médio (Bahrein)

arn:aws:lambda:me-south-1:832021897121:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Região América do Sul (São Paulo)

arn:aws:lambda:sa-east-1:933737806257:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8