Controlar a execução de funções do Lambda do Greengrass usando a configuração específica do grupo - AWS IoT Greengrass

AWS IoT Greengrass Version 1 entrou na fase de vida útil prolongada em 30 de junho de 2023. Para obter mais informações, consulte política de manutenção do AWS IoT Greengrass V1. Após essa data, AWS IoT Greengrass V1 não lançaremos atualizações que forneçam recursos, aprimoramentos, correções de erros ou patches de segurança. Os dispositivos que funcionam AWS IoT Greengrass V1 não serão interrompidos e continuarão operando e se conectando à nuvem. É altamente recomendável que você migre para AWS IoT Greengrass Version 2, o que adiciona novos recursos significativos e suporte para plataformas adicionais.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Controlar a execução de funções do Lambda do Greengrass usando a configuração específica do grupo

O AWS IoT Greengrass oferece gerenciamento baseado em nuvem de funções do Lambda do Greengrass. Embora o código e as dependências de uma função do Lambda sejam gerenciados com o uso do AWS Lambda, você pode configurar como a função do Lambda se comporta ao ser executada em um grupo do Greengrass.

Definições de configuração específicas do grupo

O AWS IoT Greengrass fornece as seguintes definições de configuração específicas do grupo para as funções do Lambda do Greengrass.

Usuário e grupo do sistema

A identidade de acesso usada para executar cada função do Lambda. Por padrão, as funções do Lambda são executadas como identidade de acesso padrão do grupo. Normalmente, essas são as contas do sistema do AWS IoT Greengrass sistema padrão (ggc_user ggc_group). Você pode alterar a configuração de permissões e escolher o ID de usuário e o ID de grupo que tem as permissões necessárias para executar a função do Lambda. Você pode substituir o UID e o GID ou apenas um, se deixar o outro campo em branco. Essa configuração oferece a você um controle mais detalhado sobre o acesso aos recursos do dispositivo. Recomendamos que você configure seu hardware do Greengrass com os limites de recursos apropriados, permissões de arquivo e cotas de disco para os usuários e grupos cujas permissões são usadas para executar funções do Lambda.

Esse atributo está disponível para o AWS IoT Greengrass Core v1.7 e posterior.

Importante

Convém evitar a execução das funções do Lambda como raiz, a menos que isso seja absolutamente necessário. Executar como root aumenta os seguintes riscos:

  • O risco de alterações não intencionais, como excluir acidentalmente um arquivo essencial.

  • O risco para seus dados e dispositivos originário de indivíduos mal-intencionados.

  • O risco de fuga do contêiner quando os contêineres do Docker são executados com --net=host e UID=EUID=0.

Se precisar executar como raiz, você deverá atualizar a configuração do AWS IoT Greengrass para habilitá-la. Para ter mais informações, consulte Executar uma função do Lambda como raiz.

ID do usuário do sistema (número)

O ID do usuário que tem as permissões necessárias para executar a função do Lambda. Essa configuração só estará disponível se você escolher executar como Outro ID de usuário/ID de grupo. Você pode pesquisar o comando getent passwd no dispositivo de núcleo AWS IoT Greengrass para pesquisar o ID de usuário que deseja usar para executar a função do Lambda.

Se você usar o mesmo UID para executar processos e a função do Lambda em um dispositivo de núcleo do Greengrass, sua função de grupo do Greengrass poderá conceder credenciais temporárias aos processos. Os processos podem usar as credenciais temporárias nas implantações do Greengrass no núcleo.

ID do grupo do sistema (número)

O ID do grupo que tem as permissões necessárias para executar a função do Lambda. Essa configuração só estará disponível se você escolher executar como Outro ID de usuário/ID de grupo. Você pode usar o comando getent group no dispositivo de núcleo do AWS IoT Greengrass para pesquisar o ID do grupo que deseja usar para executar a função do Lambda.

Conteinerização da função do Lambda

Selecione se a função do Lambda será executada com o conteinerização padrão para o grupo ou especifique a conteinerização que sempre deverá ser usada para essa função do Lambda.

O modo de conteinerização de uma função do Lambda determina seu nível de isolamento.

  • As funções do Lambda conteinerizadas são executadas no modo Contêiner do Greengrass. A função do Lambda é executada em um ambiente de runtime isolado (ou namespace) dentro do contêiner do AWS IoT Greengrass.

  • As funções do Lambda não conteinerizadas são executadas no modo Sem contêiner. As funções do Lambda são executadas como processo normal do Linux sem nenhum isolamento.

Esse atributo está disponível para o AWS IoT Greengrass Core v1.7 e posterior.

Recomendamos executar funções do Lambda em um contêiner do Greengrass, a menos que o seu caso de uso exija que essas funções sejam executadas sem conteinerização do Greengrass. Quando as funções do Lambda são executadas em um contêiner do Greengrass, é possível anexar os recursos locais e de dispositivos, além de obter os benefícios de isolamento e maior segurança. Antes de alterar a conteinerização, consulte Considerações ao escolher a conteinerização de função do Lambda.

nota

Para executar sem habilitar o namespace e o cgroup do kernel do seu dispositivo, todas as funções do Lambda deverão ser executadas sem conteinerização. Você pode fazer isso facilmente ao configurar a conteinerização padrão para o grupo. Para obter mais informações, consulte Definir a conteinerização padrão para funções do Lambda em um grupo.

Limite de memória

A alocação da memória para a função. O padrão é 16 MB.

nota

A configuração de limite de memória se torna indisponível quando você altera a função do Lambda para a execução sem conteinerização. As funções do Lambda que são executadas sem conteinerização não têm limite de memória. A configuração de limite de memória é descartada quando você altera a função do Lambda ou a configuração de conteinerização padrão do grupo para ser executada sem conteinerização.

Timeout (Tempo limite)

O tempo até a função ou a solicitação ser encerrada. O padrão é 3 segundos.

Pinned

O ciclo de vida da função do Lambda pode ser sob demanda ou de longa duração. O padrão é sob demanda.

Uma função do Lambda sob demanda começa em um contêiner novo ou reutilizado quando invocada. As solicitações para a função podem ser processadas por qualquer contêiner disponível. Uma função de longa duração, ou pinned, do Lambda é automaticamente iniciada depois da inicialização do AWS IoT Greengrass e continua sendo executada no seu próprio contêiner (ou sandbox). Todas as solicitações para a função são processadas pelo mesmo contêiner. Para ter mais informações, consulte Configuração do ciclo de vida das funções do Lambda do Greengrass.

Acesso de leitura ao diretório /sys

Se a função pode acessar a pasta /sys do host. Use-a quando a função tiver de ler informações do dispositivo de /sys. O padrão é falso.

nota

Essa configuração não estará disponível quando você executar uma função do Lambda sem conteinerização. O valor dessa configuração é descartado quando você altera a função do Lambda para a execução sem conteinerização.

Tipo de codificação

O tipo de codificação esperada da carga de entrada para a função, JSON ou binário. O padrão é JSON.

O suporte para o tipo de codificação binária está disponível desde o Software AWS IoT Greengrass Core v1.5.0 e o SDK do AWS IoT Greengrass Core v1.1.0. Aceitar dados de entrada binários pode ser útil para funções que interagem com dados do dispositivo, porque os recursos de hardware restritos de dispositivos normalmente dificultam ou impossibilitam a criação de um tipo de dados JSON.

nota

Os executáveis do Lambda só oferecem suporte ao tipo de codificação binária, não JSON.

Argumentos do processo

Os argumentos de linha de comando são passados para a função do Lambda quando ela é executada.

Variáveis de ambiente

Pares de chave/valor que podem passar dinamicamente configurações para código de função e bibliotecas. As variáveis de ambiente locais funcionam da mesma maneira que variáveis de ambiente da função AWS Lambda, mas estão disponíveis no ambiente do núcleo.

Resource access policies (Políticas de acesso ao recurso)

Uma lista de até 10 recursos locais, recursos de segredos e recursos de machine learning que a função do Lambda tem permissão para acessar, além da permissão read-only ou read-write correspondente. No console, esses recursos afiliados estão listados na página de configuração do grupo na guia Recursos.

O modo de conteinerização afeta o modo como as funções do Lambda podem acessar recursos locais de dispositivo e volume e recursos de machine learning.

  • As funções do Lambda não conteinerizadas devem acessar os recursos locais de dispositivo e volume diretamente por meio do sistema de arquivos no dispositivo de núcleo.

  • Para permitir que funções do Lambda não conteinerizadas acessem recursos de machine learning no grupo do Greengrass, você deve definir o proprietário do recurso e as propriedades de permissões de acesso no recurso de machine learning. Para ter mais informações, consulte Acesse os recursos de machine learning das funções do Lambda.

Para obter informações sobre como usar a AWS IoT Greengrass API para definir configurações específicas do grupo para funções Lambda definidas pelo usuário, CreateFunctionDefinitionconsulte na Referência da API create-function-definitionou AWS IoT Greengrass Version 1 na Referência de Comandos. AWS CLI Para implantar funções do Lambda em um núcleo do Greengrass, crie uma versão de definição de função que contenha suas funções, crie uma versão de grupo que faça referência à versão de definição de função e outros componentes do grupo e implante o grupo.

Executar uma função do Lambda como raiz

Esse atributo está disponível para o AWS IoT Greengrass Core v1.7 e posterior.

Antes de executar uma ou mais funções do Lambda como raiz, você deverá primeiro atualizar a configuração do AWS IoT Greengrass para habilitar o suporte. O suporte para executar as funções do Lambda como raiz está desativado por padrão. A implantação falhará se você tentar implantar uma função do Lambda e executá-la como raiz (UID e o GID 0) e se não tiver atualizado a configuração do AWS IoT Greengrass. Uma mensagem de erro é exibida no log de runtime (greengrass_root/ggc/var/log/system/runtime.log):

lambda(s) [list of function arns] are configured to run as root while Greengrass is not configured to run lambdas with root permissions
Importante

Convém evitar a execução das funções do Lambda como raiz, a menos que isso seja absolutamente necessário. Executar como root aumenta os seguintes riscos:

  • O risco de alterações não intencionais, como excluir acidentalmente um arquivo essencial.

  • O risco para seus dados e dispositivos originário de indivíduos mal-intencionados.

  • O risco de fuga do contêiner quando os contêineres do Docker são executados com --net=host e UID=EUID=0.

Para permitir que as funções do Lambda sejam executadas como raiz
  1. No seu dispositivo do AWS IoT Greengrass, navegue até a pasta greengrass-root/config.

    nota

    Por padrão, greengrass-root é o diretório /greengrass.

  2. Atualize o arquivo config.json para adicionar "allowFunctionsToRunAsRoot" : "yes" ao campo runtime. Por exemplo: .

    { "coreThing" : { ... }, "runtime" : { ... "allowFunctionsToRunAsRoot" : "yes" }, ... }
  3. Use os comandos a seguir para reiniciar o AWS IoT Greengrass:

    cd /greengrass/ggc/core sudo ./greengrassd restart

    Agora você pode definir o ID de usuário e o ID de grupo (UID/GID) de funções do Lambda como 0 para executar essa função do Lambda como raiz.

Você pode alterar o valor de "allowFunctionsToRunAsRoot" para "no" e reiniciar o AWS IoT Greengrass se quiser impedir que as funções do Lambda sejam executadas como raiz.

Considerações ao escolher a conteinerização de função do Lambda

Esse atributo está disponível para o AWS IoT Greengrass Core v1.7 e posterior.

Por padrão, as funções do Lambda são executadas em um contêiner do AWS IoT Greengrass. Esse contêiner fornece isolamento entre as funções e o host, fornecendo segurança adicional para o host e as funções no contêiner.

Recomendamos executar funções do Lambda em um contêiner do Greengrass, a menos que o seu caso de uso exija que essas funções sejam executadas sem conteinerização do Greengrass. Ao executar suas funções do Lambda em um contêiner do Greengrass, você terá mais controle sobre como restringir o acesso a recursos.

Aqui estão alguns exemplos de casos de uso para a execução sem conteinerização:

  • Você deseja executar o AWS IoT Greengrass em um dispositivo que não oferece suporte ao modo de contêiner (por exemplo, porque você está usando uma distribuição do Linux especial ou tem uma versão do kernel que é muito antiga).

  • Você deseja executar a função do Lambda em outro ambiente de contêiner com seu próprio OverlayFS, mas encontra conflitos de OverlayFS ao executar em um contêiner do Greengrass.

  • Você precisa de acesso a recursos locais com caminhos que não podem ser determinados no momento da implantação ou cujos caminhos podem mudar após a implantação, como alguns dispositivos conectáveis.

  • Você tem um aplicativo antigo que foi escrito como um processo e encontrou problemas ao executá-lo como uma função do Lambda em contêiner.

Diferenças de conteinerização
Conteinerização Observações

Contêiner do Greengrass

  • Todos os atributos do AWS IoT Greengrass estão disponíveis quando você executa uma função do Lambda em um contêiner do Greengrass.

  • As funções do Lambda que são executadas em um contêiner do Greengrass não têm acesso ao código implantado de outras funções do Lambda, mesmo se elas forem executadas com o mesmo ID do grupo. Em outras palavras, as funções do Lambda são executadas com maior isolamento umas das outras.

  • Como as funções do Lambda que são executadas em um contêiner do AWS IoT Greengrass têm todos os processos filhos executados no mesmo contêiner do que a função do Lambda, os processos filhos serão encerrados quando a função do Lambda for encerrada.

Nenhum contêiner

  • Os atributos a seguir não estão disponíveis para funções do Lambda não conteinerizadas:

    • Limites de memória de funções do Lambda.

    • Recursos de volume e dispositivo locais. É necessário acessar esses recursos diretamente no dispositivo de núcleo em vez de acessá-los como membros do grupo do Greengrass.

  • Se sua função do Lambda não conteinerizada acessar um recurso de machine learning, você deverá identificar um proprietário do recurso e definir permissões de acesso no recurso, não na função do Lambda. Isso requer o software AWS IoT Greengrass Core v1.10 ou versões posteriores. Para ter mais informações, consulte Acesse os recursos de machine learning das funções do Lambda.

  • A função do Lambda tem acesso somente leitura ao código implantado de outras funções do Lambda em execução com o mesmo ID do grupo.

  • As funções do Lambda que geram processos filhos em um processo diferente ou com manipulador SIGHUP (sinal de desligamento) sobreposto, como com o utilitário nohup, não serão encerradas automaticamente pelo AWS IoT Greengrass quando a função do Lambda for encerrada.

nota

A configuração padrão de conteinerização para o grupo do Greengrass não se aplica aos conectores.

A alteração da conteinerização para uma função do Lambda pode causar problemas quando você a implantar. Se você tiver atribuído recursos locais à sua função do Lambda que não esteja mais disponível com suas novas configurações de conteinerização, a implantação falhará.

  • Quando você altera uma função do Lambda da execução em um contêiner do Greengrass para a execução sem conteinerização, os limites de memória para a função serão descartados. Você deve acessar o sistema de arquivos diretamente em vez de usar recursos locais anexados. Você deve remover todos os recursos anexados antes da implantação.

  • Quando você altera uma função do Lambda da execução sem conteinerização para execução em um contêiner, sua função do Lambda perde o acesso direto ao sistema de arquivos. Você deve definir um limite de memória para cada função ou aceitar o padrão de 16 MB. Você pode definir essas configurações para cada função do Lambda antes da implantação.

Para alterar as configurações de conteinerização para uma função do Lambda
  1. No painel de navegação do console de AWS IoT, em Gerenciar, expanda Dispositivos Greengrass e, em seguida selecione Grupos (V1).

  2. Selecione o grupo que contém a função do Lambda, cujas configurações você deseja alterar.

  3. Selecione a guia Funções do Lambda.

  4. Na função do Lambda que você deseja alterar, selecione as reticências () e então selecione Editar configuração.

  5. Altere as configurações de conteinerização. Se você configurar a função do Lambda para executar um contêiner do Greengrass, também será necessário definir o Limite de memória e o Acesso de leitura ao diretório /sys.

  6. Selecione Salvar e depois Confirmar para salvar as alterações na sua função do Lambda.

As alterações entram em vigor quando o grupo é implantado.

Você também pode usar o CreateFunctionDefinitione CreateFunctionDefinitionVersionna Referência da AWS IoT Greengrass API. Se você estiver alterando a configuração de conteinerização, atualize os outros parâmetros também. Por exemplo, se você estiver executando a alteração de uma função do Lambda em um contêiner do Greengrass para executar sem conteinerização, limpe o parâmetro MemorySize.

Determine os modos de isolamento compatíveis com o dispositivo do Greengrass

Você pode usar o verificador de dependências do AWS IoT Greengrass para determinar quais modos de isolamento (contêiner/nenhum contêiner do Greengrass) são compatíveis com o seu dispositivo do Greengrass.

Para executar o verificador de dependências do AWS IoT Greengrass
  1. Baixe e execute o verificador AWS IoT Greengrass de dependências do GitHub repositório.

    wget https://github.com/aws-samples/aws-greengrass-samples/raw/master/greengrass-dependency-checker-GGCv1.11.x.zip unzip greengrass-dependency-checker-GGCv1.11.x.zip cd greengrass-dependency-checker-GGCv1.11.x sudo modprobe configs sudo ./check_ggc_dependencies | more
  2. Se more for exibido, pressione a tecla Spacebar para exibir outra página de texto.

Para obter informações sobre o comando modprobe, execute man modprobe no terminal.

Definir a identidade de acesso padrão para as funções do Lambda em um grupo

Esse atributo está disponível para o AWS IoT Greengrass Core v1.8 e posterior.

Para obter mais controle sobre o acesso a recursos de dispositivo, você pode configurar a identidade de acesso padrão usada para executar as funções do Lambda no grupo. Essa configuração determina as permissões padrão para suas funções do Lambda quando elas são executadas no dispositivo de núcleo. Para substituir a configuração para funções individuais no grupo, você pode usar a propriedade Run as (Executar como) da função. Para obter mais informações, consulte Executar como.

Essa configuração no nível de grupo também é usada para executar o software do núcleo do AWS IoT Greengrass subjacente. Ela consiste em funções do Lambda que gerenciam operações, como o roteamento de mensagens, a sincronização de sombra local e a detecção automática de endereço IP.

A identidade de acesso padrão pode ser configurada para ser executada como as contas do sistema AWS IoT Greengrass padrão (ggc_user ggc_group) ou usar as permissões de outro usuário ou grupo. Recomendamos que você configure seu hardware do Greengrass com os limites de recursos, permissões de arquivo e cotas de disco apropriados para qualquer usuário e grupo com permissões que são usadas para executar funções do Lambda definidas pelo usuário ou sistema.

Para modificar a identidade de acesso padrão para o grupo do AWS IoT Greengrass
  1. No painel de navegação do console de AWS IoT, em Gerenciar, expanda Dispositivos Greengrass e, em seguida selecione Grupos (V1).

  2. Selecione o grupo cujas configurações você deseja alterar.

  3. Selecione a guia Funções do Lambda e, na seção Ambiente de runtime da função do Lambda padrão, selecione Editar.

  4. Em Editar o Ambiente de runtime da função do Lambda padrão, em Usuário e grupo do sistema padrão, selecione Outro ID do usuário/ID do grupo.

    Quando você escolhe essa opção, os campos ID do usuário do sistema (número) e ID do grupo do sistema (número) são exibidos.

  5. Insira um ID de usuário, ID de grupo ou ambos. Se você deixar um campo em branco, a respectiva conta do sistema do Greengrass (ggc_user ou ggc_group) será usada.

    • Para ID do usuário do sistema (número), insira o ID do usuário que tem as permissões que você deseja usar por padrão para executar as funções do Lambda no grupo. Você pode usar o comando getent passwd em seu dispositivo AWS IoT Greengrass para pesquisar o ID do usuário.

    • Para ID do grupo do sistema (número), insira o ID do grupo que tem as permissões que você deseja usar por padrão para executar as funções do Lambda no grupo. Você pode usar o comando getent group em seu dispositivo AWS IoT Greengrass para pesquisar o ID do grupo.

    Importante

    Executar como usuário raiz aumenta os riscos para seus dados e dispositivo. Não execute como raiz (UID/GID = 0), a menos que sua empresa exija. Para ter mais informações, consulte Executar uma função do Lambda como raiz.

As alterações entram em vigor quando o grupo é implantado.

Definir a conteinerização padrão para funções do Lambda em um grupo

Esse atributo está disponível para o AWS IoT Greengrass Core v1.7 e posterior.

A configuração de conteinerização para um grupo do Greengrass determina a conteinerização padrão para as funções do Lambda no grupo.

  • No modo Contêiner do Greengrass, as funções do Lambda são executadas em um ambiente de runtime isolado dentro do contêiner do AWS IoT Greengrass por padrão.

  • No modo Sem contêiner, as funções do Lambda são executadas como processos regulares do Linux por padrão.

É possível modificar as configurações do grupo para especificar a conteinerização padrão para funções do Lambda no grupo. Você poderá substituir essa configuração para uma ou mais funções do Lambda no grupo se quiser que as funções do Lambda sejam executadas com conteinerização diferente do padrão do grupo. Antes de alterar as configurações de conteinerização, consulte Considerações ao escolher a conteinerização de função do Lambda.

Importante

Se você deseja alterar a conteinerização padrão para o grupo, mas tem uma ou mais funções que usam uma conteinerização diferente, altere as configurações para as funções do Lambda antes de alterar a configuração do grupo. Se você alterar a configuração de conteinerização do grupo primeiro, os valores das configurações Memory limit (Limite de memória) e Read access to /sys directory (Acesso de leitura ao diretório /sys) serão descartadas.

Para modificar as configurações de conteinerização para o seu grupo do AWS IoT Greengrass
  1. No painel de navegação do console de AWS IoT, em Gerenciar, expanda Dispositivos Greengrass e, em seguida selecione Grupos (V1).

  2. Selecione o grupo cujas configurações você deseja alterar.

  3. Selecione a guia Funções do Lambda.

  4. Em Ambiente de runtime da função do Lambda padrão, selecione Editar.

  5. Na página Editar Ambiente de runtime da função do Lambda padrão, em Conteinerização da função do Lambda padrão, altere a configuração de conteinerização.

  6. Selecione Salvar.

As alterações entram em vigor quando o grupo é implantado.