web-dev-qa-db-ja.com

Terraformを使用してAWS Glueをセットアップするにはどうすればよいですか?

Terraformを使用してAWS Glueをセットアップするにはどうすればよいですか(特に、S3バケットをスパイダーしてテーブル構造を確認できるようにしたい)。その特定のサービスのためにグーグル検索がすぐにできてしまった。私がやり取りしたいS3バケットはすでに存在しており、すべてのバケットへのフルアクセスをGlueに与えたくありません。

私は自分のソリューションのQ&Aスタイルを提出しましたが、どうすればもっと上手くできたのかについて考えがあるかどうかを知りたいです。

3
russellpierce

これをよりよくするための推奨事項がある場合は、回答を送信してください。

ここでの例は、私が置かれていた状況を厳密に反映しています。特に、操作したいS3バケットはすでに定義されており、Glueにすべてのバケットへのフルアクセスを付与したくありませんでした。

最初のコンポーネントは役割そのものです。 Amazonは、このセクションで使用する特定の名前を推奨しています。これにより、ロールをコンソールユーザーからサービスに渡すことができます。受け入れられない場合は、参照セクションのグルーマニュアルのIAMロールセクションを確認してください。ボイラープレートの「役割を引き受ける」と異なるもう1つの点は、「プリンシパル」と「サービス」でした。

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」になります。

ここでの私の回答は、私の Medium post で部分的に複製されました。

5
russellpierce