如何设置AWS Glue使用Terraform?

我如何使用Terraform设置AWS Glue(具体而言,我希望它能够抓取我的S3存储桶并查看表结构)。 一个快速的谷歌search出现干燥的特定服务。 我想与S3交互的存储桶已经存在,我不想让Glue完全访问我的所有存储桶。

我已经提交了我的解决scheme问答风格,但我很感兴趣,看看我是否可以做得更好。

如果你有更好的build议,那么请提交一个答案,这样下次我可以做得更好。

我在这里的例子将密切反映我所处的情况。特别是,我想与之交互的S3存储桶已经定义好了,我不想让Glue完全访问我的所有存储桶。

第一个组件是angular色本身。 亚马逊build议我在本节中使用的特定名称,以便angular色可以从控制台用户传递到服务。 如果不能接受,请参阅参考文献部分的胶水手册的IAMangular色部分。 另外一个不同于样板angular色“承担angular色”的事情是“委托人”和“服务”。

resource "aws_iam_role" "glue" { name = "AWSGlueServiceRoleDefault" assume_role_policy = <<EOF { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Principal": { "Service": "glue.amazonaws.com" }, "Effect": "Allow", "Sid": "" } ] } EOF } 

下一个组件是将AWSGlueServiceRole托pipe策略附加到angular色。 亚马逊预先定义了这一点,以便该angular色几乎拥有所有需要的权限,以便脱离大门。

 resource "aws_iam_role_policy_attachment" "glue_service" { role = "${aws_iam_role.glue.id}" policy_arn = "arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole" } 

如果您没有为S3存储桶定义策略,则可以定义策略并将其粘贴到同一个块中的此粘贴angular色,如下所示:

 resource "aws_iam_role_policy" "my_s3_policy" { name = "my_s3_policy" role = "${aws_iam_role.glue.id}" policy = <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::my_bucket", "arn:aws:s3:::my_bucket/*" ] } ] } EOF } 

如果像我一样,你定义了这个策略,但是已经把它附加到另一个angular色上,那么你可以重新使用它,并将它附加到胶水angular色,就像这样:

 resource "aws_iam_role_policy" "glue_service_s3" { name = "glue_service_s3" role = "${aws_iam_role.glue.id}" policy = "${aws_iam_role_policy.my_s3_policy.policy}" } 

您在此处更改以匹配您的configuration的文本将是策略选项/键的“my_s3_policy”。

我在这里的答案部分在我的中篇文章中复制。