如何使用 Terraform 设置 AWS Glue?

如何使用 Terraform 设置 AWS Glue?

如何使用 Terraform 设置 AWS Glue(具体来说,我希望它能够抓取我的 S3 存储桶并查看表结构)。快速 Google 搜索找不到该特定服务。我想要交互的 S3 存储桶已经存在,我不想让 Glue 完全访问我的所有存储桶。

我已经提交了我的解决方案问答风格,但我很想知道是否有人对我如何做得更好有什么想法。

答案1

如果您对如何更好地做到这一点有任何建议,请提交答案,以便我下次做得更好。

我在此处的示例将密切反映我所处的情况。特别是,我想要与之交互的 S3 存储桶已经定义,并且我不想让 Glue 完全访问我的所有存储桶。

第一个组件是角色本身。Amazon 建议使用我在本节中使用的特定名称,以便角色可以从控制台用户传递到服务。如果不能接受,请查看参考部分中 Glue 手册的 IAM 角色部分。与样板“承担角色”不同的另一件事是“主体”和“服务”。

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 托管策略附加到角色。Amazon 对此进行了预定义,以便角色拥有几乎所有需要的权限,以便开始工作。

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 存储桶定义策略,那么您可以定义您的策略并将其附加到同一块中的此粘合角色,如下所示:

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
}

如果您像我一样定义了该策略但已将其附加到另一个角色,那么您可以重新使用它并将其附加到粘合角色,如下所示:

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

您在这里更改的文本以匹配您的配置将是策略选项/键的“my_s3_policy”。

我的回答部分复制了我的中等职位

相关内容