見出し画像

Athena→S3→Aurora MySQLのデータ連携 〜Load To [LOAD DATA FROM S3]〜①

おはようございます、ねすたです、よろしくどうぞお願いします。

今回はとある業務により、Athena上にあるテーブルからクエリ(SELECT)を実行し、S3にアップロードされたファイルをAurora MySQLの対象となるテーブルにINSERTしたいなーと思い、結果としてめちゃめちゃ時間がかかってしまったのもあり備忘録として記載します。

1つのデータソースであれば SELECT-INSERT すればOKですが、別のデータソースに対してやれんのかな〜って思いながらググっていると、Aurora MySQLのコマンドとして[LOAD DATA FROM S3...]っていう便利なコマンドがありました!

ただcsvではなくtxtまたはxml(こちらは別のコマンド)でしか連携できなそう...まあcsv→txtで格納すればいっか、ってことでtxtでやります。

(今回の件でいろいろ調べた際、AWS公式ドキュメントが検索上位に来るので見るんですが、公式の説明は上級者向けなので、環境構築に関しては初心者のねすたには難しすぎます、、、)

インスタンスの作成

画像1

とりあえずAWS CLIが使えれば問題ないのでこのAMIを使ってインスタンスを作成。

セキュリティグループとかは流石に記載できないのでよしなに設定します。

課金されるのはあれなので、インスタンスタイプは一旦「t2.micro」に。

作成したインスタンス名を『cli-test』としておきましょう。他意はないです。

S3バケットの作成

続いて連携データ取得元のバケットを作らないといけませんね。

参照元のバケットという説明上の意味を含めて『test-bucket』と名付けます。

そのバケットの直下に参照元データ格納先ディレクトリ(フォルダ)として、『test-data』を作成します。


S3の設定をととのえる

今度はセキュリティ関連の設定をしていきます。

1.パブリックアクセス設定

コンソールから対象バケットを開き、「アクセス許可」タブ → 「ブロックパブリックアクセス(バケット設定)」項目内の「編集する」ボタンを押下。

画像2

上記画像のように設定し、「変更の保存」ボタンを押下。

確認ダイアログに"確認"と入力後、「確認」ボタンを押下。


2.バケットポリシーの設定

ここ、結構ハマりました。。。

「バケットポリシーってなんですの?」って思っていろいろ調べてみましたが、後述のIAMポリシーと混同して結局よく分からなかったです。なのでざっくりと解釈することにしました。

バケットに対してできることを指定するもの

とりあえずこう思い込むことにより、少し役割が分かった(気がした)ので設定していきます。

バケットに限らずポリシーの設定に関して調査したところ、コンソール内での設定よりもJSONによって設定している例が多かったので先人に倣います。

やりたいこととしては、

「バケットに存在する test-data ディレクトリ配下のファイルを参照する」

なのでバケットポリシーで操作を限定しすぎると他の案件で同バケットに対して何かやる際にめんどくさそうだな〜って思ったので、

「バケット配下すべてに対して、参照・作成・コピー・削除する」

に設定することにしました。

前置きが長くてすみません。設定内容はこちらです。

-- バケットポリシー(JSON)

{
   "Version": "2012-10-17",
   "Id": "",
   "Statement": [
       {
           "Sid": "",
           "Effect": "Allow",
           "Principal": {
               "AWS": "arn:aws:iam::11223344:role/test-rds-role"
           },
           "Action": [
               "s3:DeleteObject*",
               "s3:GetObject*",
               "s3:PutObject*"
           ],
           "Resource": "arn:aws:s3:::test-bucket/*"
       }
   ]
}

※Principal項目に関しては、後述のIAMロールと紐付けています。


IAM設定

IAMの概要についていろいろググってみた結果、一番腑に落ちたのが

◎ユーザが何者なのかを確認するための設定

◎リソースへのアクセス権限を付与する設定

ということ。

今回必要なのは、「IAMロール」と「IAMポリシー」の2つです。


1.IAMロールの作成

まずはIAMロールを作成します。

IAMロールとは、後述するIAMポリシーをグループ化するもの と認識するようにしています。

【設定手順】

①IAMコンソールから「ロール」タブを押下し、IAMロール一覧画面から「ロールの作成」ボタンを押下する。

②今回はAWS関連のサービスのみ設定できればOKなので、「AWSサービス」を選択する。

画像6

③ユースケースの選択に関しては、サービスの一覧から「RDS」を、対象のユースケースにおいても「RDS」を選択し、次へ。

画像7

④ポリシーのアタッチ設定は一旦スルーしてそのまま作成を完了させる。

■IAMロール名:test-rds-role

2.IAMポリシーの作成

次にIAMのポリシーを作成します。

IAMポリシー設定とは、AWSリソースへのアクセス権限の最小単位 と認識するようにしています。

【設定手順】

①IAMコンソールから「ポリシー」タブを押下し、IAMポリシー一覧画面から「ポリシーの作成」ボタンを押下する。

②画面上から設定してもできると思いますが、JSONで設定している例が圧倒的に多いので例に習います。

「JSON」タブを開き、以下の内容をコピペします。

{
   "Version": "2012-10-17",
   "Statement": [
       {
           "Effect": "Allow",
           "Action": [
               "s3:GetObject",
               "s3:GetObjectVersion",
               "s3:PutObject",
               "s3:ListBucket"
           ],
           "Resource": [
               "arn:aws:s3:::test-bucket/*",
               "arn:aws:s3:::test-bucket"
           ]
       }
   ]
}

 注目するべき点としては、

◎Action:このポリシーでできること。上記をざっくり説明すると「S3からダウンロード」「S3へアップロード」「S3バケット一覧を参照」を許可しています。

◎Resource:どこのバケットもしくはディレクトリに対する操作を許可するかを設定しています。上記だと作成した「test-bucket」バケット配下のオブジェクト(ディレクトリやファイル)すべてに対する操作が許可されます。

この2点を一旦押さえておき、確認画面を経由して作成する。

■IAMポリシー名:test-s3-iam-policy


3.IAMロールにIAMポリシーをアタッチ

最後に、作成したIAMロールに対してIAMポリシーをアタッチ(付与)していきます。

【設定手順】

①作成したIAMロールの詳細画面へ遷移。

②「アクセス権限」タブにある「ポリシーをアタッチします」ボタンを押下。

③検索窓に「test-s3-iam-policy」を入力し、チェックボックスをONにして「ポリシーのアタッチ」ボタンを押下。

画像8

④正常完了を確認し、再度アクセス権限タブによりアタッチされていればOK!

画像9

※ちゃっかりS3FullAccessもアタッチしていますが、構築する環境によってはセキュリティ上の制約が無い場合があると思います。その際はポリシーを作成せずにS3FullAccessのアタッチのみでOKです。

これにより

test-rds-role というロールにおいて、test-bucket にオブジェクト一覧の参照・アップロード・ダウンロード・削除を行う

ことが許可されました。

以上がIAM設定です。


長くなってしまったので、一旦ここまでとします。

こちらからは以上です。


part②へ。


この記事が気に入ったらサポートをしてみませんか?