本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建 AWS Glue 爬网程序
AWS Glue 是一项完全托管的提取、转换和加载(ETL)服务,让您可以使用 Athena 从您的 Amazon S3 数据创建数据库和查询此数据库。此数据库也称为 AWS Glue 数据目录。AWS Glue 爬网程序可以自动检测 Amazon S3 数据的架构并创建相应的数据库和表。AppStream 2.0 提供了一个 AWS CloudFormation 模板,您可以使用该模板创建必要的 AWS Glue 资源。
重要
完成以下过程中的步骤创建一个 AWS Glue 爬网程序。但是,这些步骤不会启动爬网程序。要启动爬网程序,您必须执行下一过程中的步骤。有关 AWS Glue 爬网程序的更多信息,请参阅定义爬网程序。
创建 AWS Glue 爬网程序
打开 AppStream 2.0 控制台,网址为 https://console.aws.amazon.com/appstream2
。 选择您已订阅使用情况报告的 AWS 区域。
在导航窗格中,选择 Usage Reports (使用率报告),然后确认使用率报告日志记录已启用。
在 Report Details (报告详细信息) 选项卡中,在 Analytics (分析) 旁边的段落中,选择 CloudFormation template (CloudFormation 模板) 链接。
选择该链接可打开 AWS CloudFormation 控制台,您可以在其中查看模板指定的 AWS CloudFormation 堆栈的参数,然后再运行它。该模板在运行时创建一个 AWS Glue 爬网程序和几个示例 Athena 查询。
在 Specify Details (指定详细信息) 页面上,在 ScheduleExpression 旁边,保留默认值或为您要运行爬网程序的频率指定不同的 cron 表达式值。请勿更改任何其他默认值。完成此操作后,选择 Next (下一步)。
默认情况下,爬网程序设定为每天运行,但您可以配置爬网程序每周、每月或以其他频率运行。有关 cron 语法的信息,请参阅 Cron 表达式。
在 Options (选项) 页面上,保留默认值,然后选择 Next (下一步)。
在审核页面上,选中“我确认 AWS CloudFormation 可能创建具有自定义名称的 IAM 资源”旁边的复选框,然后选择创建。
您必须具有足够的 AWS Glue 和 AWS Identity and Access Management(IAM)权限来创建和运行 AWS CloudFormation 堆栈。如果您没有所需的权限,则要求您的 Amazon Web Services 账户管理员在您的账户中执行这些步骤或授予您以下权限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "athena:CreateNamedQuery", "athena:BatchGetNamedQuery", "athena:GetNamedQuery", "athena:StartQueryExecution", "athena:GetQueryResults", "athena:GetQueryExecution", "athena:ListNamedQueries", "cloudformation:DescribeStacks", "cloudformation:GetStackPolicy", "cloudformation:DescribeStackEvents", "cloudformation:CreateStack", "cloudformation:GetTemplate", "cloudformation:ListChangeSets", "cloudformation:ListStackResources", "iam:GetRole", "iam:CreateRole", "iam:GetRolePolicy", "s3:GetBucketLocation", "s3:ListBucketMultipartUploads", "s3:ListBucket", "s3:ListMultipartUploadParts", "s3:PutObject", "s3:GetObject", "s3:AbortMultipartUpload" ], "Resource": [ "arn:aws:iam::*:role/AppStreamUsageReports-AppStreamUsageReportGlueRole*", "arn:aws:cloudformation:*:*:stack/AppStreamUsageReports/*", "arn:aws:athena:*:*:workgroup/primary", "arn:aws:s3:::aws-athena-query-results-*" ] }, { "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:PutRolePolicy", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::appstream-logs-*", "arn:aws:iam::*:role/AppStreamUsageReports-AppStreamUsageReportGlueRole*" ] }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::*:role/AppStreamUsageReports-AppStreamUsageReportGlueRole*" ], "Condition": { "StringEquals": { "iam:PassedToService": "glue.amazonaws.com" } } }, { "Effect": "Allow", "Action": [ "cloudformation:GetTemplateSummary", "glue:GetResourcePolicy", "glue:GetCrawlers", "glue:BatchGetCrawlers", "glue:GetClassifiers", "glue:CreateClassifier", "glue:ListCrawlers", "glue:GetTags", "glue:GetCrawlerMetrics", "glue:GetClassifier", "tag:GetResources" ], "Resource": "*" }, { "Effect": "Allow", "Action": "athena:RunQuery", "Resource": "arn:aws:athena:*:*:workgroup/primary" }, { "Effect": "Allow", "Action": [ "glue:GetTables", "glue:GetPartitions", "glue:GetTable" ], "Resource": [ "arn:aws:glue:*:*:table/appstream-usage/*", "arn:aws:glue:*:*:database/appstream-usage", "arn:aws:glue:*:*:catalog" ] }, { "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase", "glue:GetDatabases" ], "Resource": [ "arn:aws:glue:*:*:database/appstream-usage", "arn:aws:glue:*:*:catalog" ] }, { "Effect": "Allow", "Action": [ "glue:GetCrawler", "glue:StartCrawler", "glue:CreateCrawler" ], "Resource": "arn:aws:glue:*:*:crawler/appstream-usage*" }, { "Effect": "Allow", "Action": "glue:GetCatalogImportStatus", "Resource": "arn:aws:glue:*:*:catalog" } ] }