Izinkan akses fungsi Lambda ke metastores Hive eksternal - Amazon Athena

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Izinkan akses fungsi Lambda ke metastores Hive eksternal

Untuk memanggil fungsi Lambda di akun Anda, Anda harus membuat peran yang memiliki izin berikut:

  • AWSLambdaVPCAccessExecutionRole— Izin peran AWS Lambda eksekusi untuk mengelola antarmuka jaringan elastis yang menghubungkan fungsi Anda ke VPC. Pastikan bahwa Anda memiliki cukup jumlah antarmuka jaringan dan alamat IP yang tersedia.

  • AmazonAthenaFullAccess— Kebijakan yang AmazonAthenaFullAccessdikelola memberikan akses penuh ke Athena.

  • Sebuah kebijakan Amazon S3 untuk memungkinkan fungsi Lambda untuk menulis ke S3 dan untuk memungkinkan Athena untuk membaca dari S3.

Sebagai contoh, kebijakan berikut mendefinisikan izin untuk lokasi tumpahans3:\\mybucket\spill.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/spill" ] } ] }

Setiap kali Anda menggunakan kebijakan IAM, pastikan bahwa Anda mengikuti praktik terbaik IAM. Untuk informasi selengkapnya tentang administrator, lihat Praktik Terbaik IAM dalam Panduan Pengguna IAM.

Membuat fungsi Lambda

Untuk membuat fungsi Lambda di akun Anda, izin pengembangan fungsi atau peran AWSLambdaFullAccess diperlukan. Untuk informasi selengkapnya, lihat Kebijakan IAM berbasis identitas untuk. AWS Lambda

Karena Athena menggunakan AWS Serverless Application Repository untuk membuat fungsi Lambda, superuser atau administrator yang membuat fungsi Lambda juga harus memiliki kebijakan IAM untuk mengizinkan kueri federasi Athena.

Pendaftaran katalog dan operasi API metadata

Untuk akses ke API pendaftaran katalog dan operasi API metadata, gunakan kebijakan AmazonAthenaFullAccess terkelola. Jika Anda tidak menggunakan kebijakan ini, tambahkan operasi API berikut ke kebijakan Athena Anda:

{ "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": [ "*" ] } ] }

Doa Lambda Lintas Wilayah

Untuk memanggil fungsi Lambda di wilayah selain wilayah tempat Anda menjalankan kueri Athena, menggunakan ARN penuh dari fungsi Lambda. Secara default, Athena memanggil fungsi Lambda didefinisikan di wilayah yang sama. Jika Anda perlu untuk memanggil fungsi Lambda untuk mengakses metastore Hive di wilayah selain wilayah tempat Anda menjalankan kueri Athena, Anda harus memberikan ARN penuh fungsi Lambda.

Misalnya, anggap Anda menentukan katalogehmsdi Wilayah Eropa (Frankfurt)eu-central-1Untuk menggunakan fungsi Lambda berikut di US East (N. Virginia).

arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new

Jika Anda menentukan ARN penuh dengan cara ini, Athena dapat memanggilexternal-hms-service-newFungsi Lambdaus-east-1untuk mengambil data metastore Hive darieu-central-1.

catatan

Katalogehmsharus terdaftar di wilayah yang sama bahwa Anda menjalankan permintaan Athena.

Pemanggilan Lambda lintas akun

Kadang-kadang Anda mungkin memerlukan akses ke metastore Hive dari akun yang berbeda. Misalnya, untuk menjalankan metastore Hive, Anda mungkin meluncurkan cluster EMR dari akun yang berbeda dari salah satu yang Anda gunakan untuk Athena kueri. grup yang berbeda atau tim mungkin menjalankan Hive metastore dengan akun yang berbeda dalam VPC mereka. Atau Anda mungkin ingin mengakses metadata dari metastores Hive berbeda dari grup atau tim yang berbeda.

Athena menggunakanAWS Lambda dukungan untuk akses lintas akununtuk mengaktifkan akses lintas rekening untuk Hive Metastores.

catatan

Perhatikan bahwa akses lintas rekening untuk Athena biasanya menyiratkan akses rekening lintas untuk kedua metadata dan data di Amazon S3.

Bayangkan skenario berikut:

  • Akun111122223333mengatur fungsi Lambdaexternal-hms-service-newpada kita-timur-1 di Athena untuk mengakses Hive Metastore berjalan pada cluster EMR.

  • Akun111122223333ingin memungkinkan akun 444455556666 untuk mengakses data Hive Metastore.

Untuk memberikan 444455556666 akses akun ke fungsi Lambdaexternal-hms-service-new, akun 111122223333 menggunakan perintah berikut AWS CLI add-permission. Perintah telah diformat untuk dibaca.

$ 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\"}" }

Untuk memeriksa izin Lambda, gunakanget-policyseperti pada contoh berikut. Perintah telah diformat untuk dibaca.

$ 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\"}]}" }

Setelah menambahkan izin, Anda dapat menggunakan ARN lengkap dari fungsi Lambdaus-east-1seperti berikut saat anda menentukan katalogehms:

arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new

Untuk informasi tentang doa lintas wilayah, lihatDoa Lambda Lintas Wilayahsebelumnya dalam topik ini.

Memberikan akses lintas akun ke data

Sebelum Anda dapat menjalankan kueri Athena, Anda harus memberikan akses lintas rekening ke data di Amazon S3. Anda dapat melakukannya dengan salah satu cara berikut:

  • Memperbarui kebijakan daftar kontrol akses bucket Amazon S3 denganID pengguna kanonis.

  • Menambahkan akses akun lintas ke kebijakan bucket Amazon S3.

Sebagai contoh, tambahkan kebijakan berikut untuk Amazon S3 bucket kebijakan di akun111122223333untuk mengizinkan akun444455556666Untuk membaca data dari lokasi Amazon S3 yang ditentukan.

{ "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/*" } ] }
catatan

Anda mungkin perlu untuk memberikan akses rekening lintas ke Amazon S3 tidak hanya untuk data Anda, tetapi juga untuk Amazon S3 lokasi tumpahan Anda. Fungsi Lambda Anda tumpahan data tambahan ke lokasi tumpahan saat ukuran objek respon melebihi ambang batas yang diberikan. Lihat awal topik ini untuk kebijakan sampel.

Dalam contoh saat ini, setelah akses lintas rekening diberikan kepada444455556666, 444455556666dapat menggunakan katalogehmssendiriaccountuntuk kueri tabel yang didefinisikan dalam akun111122223333.

Pada contoh berikut, profil SQL Workbenchperf-test-1Untuk akun444455556666. kueri menggunakan katalogehmsuntuk mengakses metastore Hive dan data Amazon S3 pada akun111122223333.

Mengakses data Hive metastore dan Amazon S3 di seluruh akun di SQL Workbench.