Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Consentire l'accesso alla funzione Lambda a metastore Hive esterni
Per richiamare una funzione Lambda nell'account, è necessario creare un ruolo con le seguenti autorizzazioni:
-
AWSLambdaVPCAccessExecutionRole
— Un AWS Lambdaautorizzazione al ruolo di esecuzione per gestire interfacce di rete elastiche che collegano la funzione aVPC. Assicurarsi di disporre di un numero sufficiente di interfacce di rete e indirizzi IP disponibili. -
AmazonAthenaFullAccess
— La policy AmazonAthenaFullAccessgestita garantisce l'accesso completo ad Athena. -
Una policy Amazon S3 per consentire alla funzione Lambda di scrivere su S3 e consentire ad Athena di leggere da S3.
Ad esempio, la seguente policy definisce l'autorizzazione per la posizione di spill s3:\\mybucket\spill
.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/spill" ] } ] }
Ogni volta che utilizzi IAM le politiche, assicurati di seguire le IAM migliori pratiche. Per ulteriori informazioni, consulta le migliori pratiche di sicurezza IAM nella Guida IAM per l'utente.
Creare funzioni Lambda
Per creare una funzione Lambda nell'account, sono necessari i permessi di sviluppo delle funzioni o il ruolo AWSLambdaFullAccess
. Per ulteriori informazioni, consulta Politiche basate sull'identità per IAM AWS Lambda.
Perché Athena usa il AWS Serverless Application Repository per creare funzioni Lambda, il superutente o l'amministratore che crea le funzioni Lambda deve disporre anche di politiche IAM per consentire le query federate Athena.
Configura le autorizzazioni per la registrazione del catalogo e le operazioni sui metadati API
Per API accedere alla registrazione del catalogo e alle operazioni sui metadati, puoi utilizzare la AmazonAthenaFullAccess politica gestita. Se non utilizzi la AmazonAthenaFullAccess
politica, aggiungi le seguenti API operazioni alle tue politiche Athena:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "athena:ListDataCatalogs", "athena:GetDataCatalog", "athena:CreateDataCatalog", "athena:UpdateDataCatalog", "athena:DeleteDataCatalog", "athena:GetDatabase", "athena:ListDatabases", "athena:GetTableMetadata", "athena:ListTableMetadata" ], "Resource": [ "*" ] } ] }
Chiama una funzione Lambda tra le regioni
Per impostazione predefinita, Athena invoca le funzioni Lambda definite nella stessa Regione. Per richiamare una funzione Lambda in un Regione AWS oltre alla regione in cui esegui le query Athena, usa la funzione completa ARN Lambda.
L'esempio seguente mostra come un catalogo nella regione Europa (Francoforte) può specificare una funzione Lambda nella regione Stati Uniti orientali (Virginia settentrionale) per recuperare i dati dal metastore Hive nella regione Europa (Francoforte).
arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new
Quando specificate il valore completo ARN in questo modo, Athena può richiamare la funzione external-hms-service-new
Lambda us-east-1
per recuperare i dati del metastore Hive. eu-central-1
Nota
Il catalogo deve essere registrato nello stesso Regione AWS che usi per eseguire le query Athena.
Chiama una funzione Lambda tra più account
A volte potrebbe essere necessario richiedere l'accesso a un metastore Hive da un altro account. Ad esempio, per eseguire un metastore Hive, potresti utilizzare un account diverso da quello che usi per le query Athena. Gruppi o team diversi potrebbero gestire il metastore di Hive con account diversi al loro interno. VPC Oppure si potrebbe voler accedere ai metadati provenienti da vari metastore Hive di gruppi o team diversi.
Athena utilizza il AWS Lambda supporto per l'accesso da più account
Nota
Si noti che l'accesso tra account per Athena implica normalmente l'accesso tra account sia per i metadati che per i dati in Amazon S3.
Si consideri il seguente scenario:
-
L'account
111122223333
configura la funzione Lambda suexternal-hms-service-new
us-east-1 in Athena per accedere a un Hive Metastore in esecuzione su un cluster. EMR -
L'account
111122223333
vuole consentire all'account 444455556666 di accedere ai dati del metastore Hive.
Per concedere 444455556666
all'account l'accesso alla funzione Lambdaexternal-hms-service-new
, l'account 111122223333
utilizza quanto segue AWS CLI add-permission
comando. Il comando è stato formattato per la leggibilità.
$ aws --profile perf-test lambda add-permission --function-name external-hms-service-new --region us-east-1 --statement-id Id-ehms-invocation2 --action "lambda:InvokeFunction" --principal arn:aws:iam::444455556666:user/perf1-test { "Statement": "{\"Sid\":\"Id-ehms-invocation2\", \"Effect\":\"Allow\", \"Principal\":{\"AWS\":\"arn:aws:iam::444455556666:user/perf1-test\"}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new\"}" }
Per verificare l'autorizzazione Lambda, utilizzare il comando get-policy
, come nell'esempio seguente. Il comando è stato formattato per la leggibilità.
$ aws --profile perf-test lambda get-policy --function-name arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new --region us-east-1 { "RevisionId": "711e93ea-9851-44c8-a09f-5f2a2829d40f", "Policy": "{\"Version\":\"2012-10-17\", \"Id\":\"default\", \"Statement\":[{\"Sid\":\"Id-ehms-invocation2\", \"Effect\":\"Allow\", \"Principal\":{\"AWS\":\"arn:aws:iam::444455556666:user/perf1-test\"}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new\"}]}" }
Dopo aver aggiunto l'autorizzazione, puoi utilizzare tutta ARN la funzione Lambda su us-east-1
come segue quando definisci il catalogo: ehms
arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new
Per informazioni sulla invocazione tra regioni, vedere Chiama una funzione Lambda tra le regioni in questo argomento.
Concedi l'accesso ai dati su più account
Prima di poter eseguire query Athena, è necessario concedere l'accesso tra account ai dati in Amazon S3. Questa operazione può essere eseguita in uno dei seguenti modi:
-
Aggiornare la policy dell'elenco di controllo dell'accesso del bucket Amazon S3 con un ID utente canonico.
-
Aggiungere l'accesso tra account alla policy del bucket Amazon S3.
Ad esempio, aggiungere la policy seguente alla policy del bucket Amazon S3 nell'account 111122223333
per consentire all'account 444455556666
di leggere i dati dalla posizione Amazon S3 specificata.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1234567890123", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:user/perf1-test" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::athena-test/lambda/dataset/*" } ] }
Nota
Potrebbe essere necessario concedere l'accesso tra account ad Amazon S3 non solo ai dati, ma anche alla posizione di spill Amazon S3. La funzione Lambda esegue lo spillover dei dati aggiuntivi nella posizione di spill quando la dimensione dell'oggetto di risposta supera una determinata soglia. Vedere l'inizio di questo argomento per una policy di esempio.
Nell'esempio corrente, dopo aver concesso l'accesso tra account a 444455556666,
, 444455556666
può utilizzare il catalogo ehms
in account
per eseguire query sulle tabelle definite nell’account 111122223333
.
Nell'esempio seguente, il profilo SQL Workbench perf-test-1
è relativo all'account. 444455556666
La query utilizza il catalogo ehms
per accedere al metastore Hive e ai dati Amazon S3 nell'account 111122223333
.