Como posso configurar o AWS Glue usando o Terraform?

2

Como posso configurar o AWS Glue usando o Terraform (especificamente, eu quero que ele seja capaz de arrastar meus buckets do S3 e observar estruturas de tabelas). Uma rápida pesquisa no Google foi publicada para esse serviço específico. O bucket do S3 com o qual eu quero interagir já está e não quero dar ao Glue acesso total a todos os meus buckets.

Enviei minha solução Q & Um estilo, mas estou interessado em ver se há algum pensamento sobre como eu poderia ter feito melhor.

    
por russellpierce 20.08.2017 / 13:51

1 resposta

4

Se você tiver recomendações sobre como fazer isso melhor, envie uma resposta para que eu possa fazer melhor da próxima vez.

Meu exemplo aqui refletirá de perto a situação em que eu estava. Em particular, o bucket S3 com o qual eu queria interagir já estava definido e eu não queria dar à Glue acesso total a todos os meus buckets.

O primeiro componente é o papel em si. A Amazon recomenda o nome específico que eu uso nesta seção para que a função possa ser transmitida dos usuários do console para o serviço. Confira a seção de função do IAM do Manual de cola, na seção "Referências", se isso não for aceitável. A outra coisa que era diferente de um boilerplate “Assume Role“ era “Principal” e “Serviço”.

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
}

O próximo componente foi anexar a política gerenciada AWSGlueServiceRole à função. A Amazon pré-define isso para que o papel tenha quase todas as permissões necessárias para que funcione fora do portal.

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

Se você ainda não tiver uma política definida para o seu intervalo do S3, poderá definir sua política e anexá-la a essa função de colagem, tudo no mesmo bloco, assim:

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
}

Se, como eu, você definiu essa política, mas já a anexou a outra função, você pode reutilizá-la e anexá-la à função de cola, assim:

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

O texto que você alteraria aqui para corresponder à sua configuração seria "my_s3_policy" para a opção / chave da política.

Minha resposta aqui foi reproduzida em parte na minha Postagem média .

    
por 20.08.2017 / 13:51