Acesse os recursos de machine learning das funções do Lambda - 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á.

Acesse os recursos de machine learning das funções do Lambda

As funções do Lambda definidas pelo usuário podem acessar recursos de machine learning para executar inferência local no núcleo AWS IoT Greengrass. Um recurso de machine learning consiste no modelo treinado e outros artefatos que são obtidos por download para o dispositivo de núcleo.

Para permitir que uma função do Lambda acesse um recurso de machine learning no núcleo, você deve anexar o recurso à função do Lambda e definir permissões de acesso. O modo de conteinerização da função do Lambda afiliada (ou anexada) determina como você faz isso.

Acessar as permissões para recursos de machine learning

A partir do AWS IoT Greengrass Core v1.10.0, você pode definir um proprietário de recurso para um recurso de machine learning. O proprietário do recurso representa o grupo de SO e as permissões que o AWS IoT Greengrass usa para fazer download dos artefatos de recurso. Se um proprietário do recurso não estiver definido, os artefatos de recurso obtidos por download estarão acessíveis somente na raiz.

  • Se as funções não conteinerizadas do Lambda acessarem um recurso de machine learning, você deve definir um proprietário do recurso, pois não há controle de permissão a partir do contêiner. As funções não conteinerizadas do Lambda podem herdar permissões de proprietário do recurso e usá-las para acessar o recurso.

     

  • Se apenas funções conteinerizadas do Lambda acessarem o recurso, recomendamos que você use permissões no nível da função em vez de definir um proprietário do recurso.

     

Propriedades do proprietário do recurso

Um proprietário do recurso especifica um proprietário do grupo e permissões de proprietário do grupo.

Proprietário do grupo. O ID do grupo (GID) de um grupo de SO Linux existente no dispositivo de núcleo. As permissões do grupo são adicionadas ao processo do Lambda. Especificamente, o GID é adicionado aos IDs suplementares de grupo da função do Lambda.

Se uma função do Lambda no grupo Greengrass estiver configurada para ser executada como o mesmo grupo de SO que o proprietário do recurso de um recurso de machine learning, o recurso deverá ser anexado à função do Lambda. Caso contrário, haverá falha na implantação, pois essa configuração concede permissões implícitas que a função do Lambda pode usar para acessar o recurso sem autorização do AWS IoT Greengrass. A verificação de validação da implantação será ignorada se a função do Lambda for executada como raiz (UID=0).

Recomendamos que você use um grupo de SO que não seja usado por outros recursos, funções do Lambda ou arquivos no núcleo do Greengrass. O uso de um grupo de SO compartilhado concede mais permissões de acesso às funções anexadas do Lambda do que elas precisam. Se você usar um grupo de SO compartilhado, uma função do Lambda anexada também deverá ser anexada a todos os recursos de machine learning que usam o grupo de SO compartilhado. Caso contrário, haverá falha na implantação.

Permissões de proprietário do grupo. A permissão somente leitura ou leitura e gravação a ser adicionada ao processo do Lambda.

As funções não conteinerizadas do Lambda devem herdar essas permissões de acesso ao recurso. As funções conteinerizadas do Lambda podem herdar essas permissões no nível do recurso ou definir permissões no nível da função. Se elas definirem permissões no nível da função, as permissões deverão ser as mesmas ou mais restritivas do que as permissões no nível do recurso.

A tabela a seguir mostra as configurações de permissão de acesso compatíveis.

GGC v1.10 or later
Propriedade Se apenas as funções conteinerizadas do Lambda acessarem o recurso Se qualquer função não conteinerizada do Lambda acessar o recurso
Propriedades no nível da função

Permissões (leitura/gravação)

Obrigatório, a menos que o recurso defina um proprietário do recurso. Se um proprietário do recurso estiver definido, as permissões no nível da função devem ser as mesmas ou mais restritivas do que as permissões de proprietário do recurso.

Se apenas funções conteinerizadas do Lambda acessarem o recurso, recomendamos que você não defina um proprietário do recurso.

Funções não conteinerizadas do Lambda:

Sem suporte. As funções não conteinerizadas do Lambda devem herdar permissões no nível do recurso.

Funções conteinerizadas do Lambda:

Opcional, mas devem ser as mesmas ou mais restritivas do que as permissões no nível do recurso.

Propriedades no nível do recurso

Proprietário do recurso

Opcional (não recomendado).

Obrigatório.

Permissões (leitura/gravação)

Opcional (não recomendado).

Obrigatório.

GGC v1.9 or earlier
Propriedade Se apenas as funções conteinerizadas do Lambda acessarem o recurso Se qualquer função não conteinerizada do Lambda acessar o recurso
Propriedades no nível da função

Permissões (leitura/gravação)

Obrigatório.

Sem suporte.

Propriedades no nível do recurso

Proprietário do recurso

Sem suporte.

Sem suporte.

Permissões (leitura/gravação)

Sem suporte.

Sem suporte.

nota

Quando você usa a API do AWS IoT Greengrass para configurar funções e recursos do Lambda, a propriedade ResourceId no nível da função também é necessária. A propriedade ResourceId anexa o recurso de machine learning à função do Lambda.

Definição das permissões de acesso às funções do Lambda (console)

No console AWS IoT, você define as permissões de acesso ao configurar um recurso de machine learning ou anexar um a uma função do Lambda.

Funções conteinerizadas do Lambda

Se apenas funções conteinerizadas do Lambda estiverem anexadas ao recurso de machine learning:

  • Selecione Nenhum grupo de sistema como proprietário do recurso para o recurso de machine learning. Essa é a configuração recomendada quando apenas funções conteinerizadas do Lambda acessam o recurso de machine learning. Caso contrário, você pode conceder mais permissões de acesso às funções anexadas do Lambda do que elas precisam.

     

 

Funções não conteinerizadas do Lambda (requer a v1.10 ou posterior do GGC)

Se alguma função não conteinerizada do Lambda estiver anexada ao recurso de machine learning:

  • Especifique o ID do grupo do sistema (GID) a ser usado como proprietário do recurso para o recurso de machine learning. Selecione Specify system group and permissions (Especificar grupo do sistema e permissões) e insira o GID. Você pode usar o comando getent group no dispositivo de núcleo para pesquisar o ID de um grupo de sistemas.

     

  • Selecione Acesso somente leitura ou Acesso de leitura e gravação para as Permissões do grupo de sistemas.

Definindo as permissões de acesso para funções do Lambda (API)

Na API do AWS IoT Greengrass, defina as permissões aos recursos de machine learning na propriedade ResourceAccessPolicy da função do Lambda ou na propriedade OwnerSetting do recurso.

Funções conteinerizadas do Lambda

Se apenas funções conteinerizadas do Lambda estiverem anexadas ao recurso de machine learning:

  • Para funções conteinerizadas do Lambda, defina permissões de acesso na propriedade Permission da propriedade ResourceAccessPolicies. Por exemplo: .

    "Functions": [ { "Id": "my-containerized-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", "FunctionConfiguration": { "Environment": { "ResourceAccessPolicies": [ { "ResourceId": "my-resource-id", "Permission": "ro-or-rw" } ] }, "MemorySize": 512, "Pinned": true, "Timeout": 5 } } ]
  • Para recursos de machine learning, omita a propriedade OwnerSetting. Por exemplo: .

    "Resources": [ { "Id": "my-resource-id", "Name": "my-resource-name", "ResourceDataContainer": { "S3MachineLearningModelResourceData": { "DestinationPath": "/local-destination-path", "S3Uri": "s3://uri-to-resource-package" } } } ]

    Essa é a configuração recomendada quando apenas funções conteinerizadas do Lambda acessam o recurso de machine learning. Caso contrário, você pode conceder mais permissões de acesso às funções anexadas do Lambda do que elas precisam.

 

Funções não conteinerizadas do Lambda (requer a v1.10 ou posterior do GGC)

Se alguma função não conteinerizada do Lambda estiver anexada ao recurso de machine learning:

  • Para funções não conteinerizadas do Lambda, omita a propriedade Permission em ResourceAccessPolicies. Essa configuração é necessária e permite que a função herde a permissão no nível do recurso. Por exemplo: .

    "Functions": [ { "Id": "my-non-containerized-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", "FunctionConfiguration": { "Environment": { "Execution": { "IsolationMode": "NoContainer", }, "ResourceAccessPolicies": [ { "ResourceId": "my-resource-id" } ] }, "Pinned": true, "Timeout": 5 } } ]
  • Para funções conteinerizadas do Lambda que também acessam o recurso de machine learning, omita a propriedade Permission em ResourceAccessPolicies ou defina uma permissão que seja a mesma ou mais restritiva que a permissão no nível do recurso. Por exemplo: .

    "Functions": [ { "Id": "my-containerized-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", "FunctionConfiguration": { "Environment": { "ResourceAccessPolicies": [ { "ResourceId": "my-resource-id", "Permission": "ro-or-rw" // Optional, but cannot exceed the GroupPermission defined for the resource. } ] }, "MemorySize": 512, "Pinned": true, "Timeout": 5 } } ]
  • Para recursos de machine learning, defina a propriedade OwnerSetting, incluindo o filho GroupOwner e as propriedades GroupPermission. Por exemplo: .

    "Resources": [ { "Id": "my-resource-id", "Name": "my-resource-name", "ResourceDataContainer": { "S3MachineLearningModelResourceData": { "DestinationPath": "/local-destination-path", "S3Uri": "s3://uri-to-resource-package", "OwnerSetting": { "GroupOwner": "os-group-id", "GroupPermission": "ro-or-rw" } } } } ]

Acessando os recursos de machine learning do código de função do Lambda

As funções do Lambda definidas pelo usuário usam interfaces de SO específicas da plataforma para acessar recursos de machine learning em um dispositivo de núcleo.

GGC v1.10 or later

Para funções conteinerizadas do Lambda, o recurso é montado dentro do contêiner Greengrass e disponibilizado no caminho de destino local definido para o recurso. Para funções conteinerizadas do Lambda, o recurso apresenta um symblink em um diretório de trabalho específico do Lambda e passado para a variável de ambiente AWS_GG_RESOURCE_PREFIX no processo do Lambda.

Para obter o caminho para os artefatos de um recurso de machine learning obtidos por download, as funções do Lambda acrescentam a variável de ambiente AWS_GG_RESOURCE_PREFIX ao caminho de destino local definido para o recurso. Para funções conteinerizadas do Lambda, o valor retornado é uma barra única (/).

resourcePath = os.getenv("AWS_GG_RESOURCE_PREFIX") + "/destination-path" with open(resourcePath, 'r') as f: # load_model(f)
GGC v1.9 or earlier

Os artefatos de um recurso de machine learning obtidos por download estão localizados no caminho de destino local definido para o recurso. Apenas funções conteinerizadas do Lambda podem acessar recursos de machine learning no AWS IoT Greengrass Core v1.9 e versões anteriores.

resourcePath = "/local-destination-path" with open(resourcePath, 'r') as f: # load_model(f)

A implementação do seu modelo de carregamento depende da sua biblioteca de ML.

Solução de problemas

Use as informações a seguir para ajudá-lo a solucionar problemas com o acesso aos recursos de machine learning.

InvalidML ModelOwner - GroupOwnerSetting é fornecido no recurso do modelo ML, mas GroupOwner ou não GroupPermission está presente

Solução: você receberá esse erro se um recurso de aprendizado de máquina contiver o ResourceDownloadOwnerSettingobjeto, mas o necessário GroupOwner ou a GroupPermission propriedade não estiverem definidos. Para resolver esse problema, defina a propriedade ausente.

 

NoContainer a função não pode configurar a permissão ao anexar recursos do Machine Learning. <function-arn>refere-se ao recurso de aprendizado de máquina <resource-id>com permissão <ro/rw> na política de acesso a recursos.

Solução: você receberá esse erro se uma função não conteinerizada do Lambda especificar permissões no nível da função para um recurso de machine learning. As funções não conteinerizadas devem herdar permissões das permissões de proprietário do recurso definidas no recurso de machine learning. Para resolver esse problema, selecione herdar permissões de proprietário do recurso (console) ou rremover as permissões da política de acesso aos recursos da função do Lambda (API) .

 

Função <function-arn>se refere ao recurso de Machine Learning <resource-id>sem permissão em ambos ResourceAccessPolicy os recursos OwnerSetting.

Solução: você receberá esse erro se as permissões para o recurso de machine learning não estiverem configuradas para a função anexada do Lambda ou para o recurso. Para resolver esse problema, configure as permissões na ResourceAccessPolicypropriedade da função Lambda ou na OwnerSettingpropriedade do recurso.

 

A função <function-arn>se refere ao recurso de Machine Learning <resource-id>com a permissão\ "rw\”, enquanto a configuração do proprietário do recurso permite GroupPermission apenas\ "ro\”.

Solução: você receberá esse erro se as permissões de acesso definidas para a função anexada do Lambda excederem as permissões de proprietário do recurso definidas para o recurso de machine learning. Para resolver esse problema, defina permissões mais restritivas para a função do Lambda ou permissões menos restritivas para o proprietário do recurso.

 

NoContainer A função <function-arn>se refere aos recursos do caminho de destino aninhado.

Solução: você receberá esse erro se vários recursos de machine learning anexados a uma função não conteinerizada do Lambda utilizarem o mesmo caminho de destino ou um caminho de destino aninhado. Para resolver esse problema, especifique caminhos de destino separados para os recursos.

 

O Lambda <function-arn> ganha acesso ao recurso <resource-id> compartilhando o mesmo ID do proprietário do grupo

Solução:‭‬ você receberá esse erro em ‭runtime.log se o mesmo grupo de sistemas operacionais for especificado como a identidade da função do Lambda ‭‬Executar como‭‬ e o ‭‬proprietário do recurso‭‬ de um recurso de machine learning, mas o recurso não estiver vinculado à função do Lambda.‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬ Essa configuração concede permissões implícitas à função do Lambda que podem ser usadas para acessar o recurso sem autorização do AWS IoT Greengrass.

Para resolver esse problema, use um grupo de SO diferente para uma das propriedades ou anexe o recurso de machine learning à função do Lambda.

Consulte também