Lambda@javaでS3オブジェクトをEC2のDBにINSERTするまで：AWS編

本記事はS3からLambda(java)経由で、EC2上のDBへデータをINSERTするまでの備忘録です。(2018/09時点)
初投稿なので生暖かい目で見てください。（ご指摘など大歓迎です。コメントお願いします。）

1   : AWS編
2   : [Java編[前編]](https://qiita.com/yut0201/items/ecfc81a945a4cb2b9eb7)
3   : [Java編[後編]](https://qiita.com/yut0201/items/0d955b37f1f461cce815)
3.5 : [Java編[続]](https://qiita.com/yut0201/items/e5676407e8c7573ad994)

IAMユーザの作成
--

AWS マネジメントコンソールにログインし、IAMのダッシュボードを開く。

画面左のナビゲーションバーから「ユーザ」を選択。
<img width="1666" alt="iam_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/265621/b6c68ecc-ab30-4af1-ec2d-a0ca3542fd3d.png">
画面左上の [ユーザを追加] からS3アクセス用のユーザを作成する。
<img width="1035" alt="iam_02.png" src="https://qiita-image-store.s3.amazonaws.com/0/265621/7e30b27b-c50a-6842-e499-a00d86db7f33.png">
後に使用するため、"アクセスの種類"では "プログラムによるアクセス" にチェックを入れておく。

[次のステップ:アクセス権限] でアクセス権限の設定用ページに飛ぶので、右のブロック[既存のポリシーを直接アタッチ]を選択し、
"S3"でポリシーをフィルタリングする。
<img width="1071" alt="iam_03.png" src="https://qiita-image-store.s3.amazonaws.com/0/265621/66f14bc3-2d8d-f011-45ae-55f5542946bb.png">

いくつかリストアップされるので、今回はフルアクセス(read/wirte)用の権限にチェックを入れる。
境界の設定は行わないので次のステップへ。

確認画面が表示されるので、ユーザ名や管理ポリシーに誤りがないことを確認したら、画面中央下部の[ユーザの作成]でIAMロールを付与されたユーザの作成を完了する。

※ 結果の画面が表示されるので、"アクセスキーID"と"シークレットアクセスキー"をメモしておく。CSVで保存してもOK
<img width="1349" alt="iam_04.png" src="https://qiita-image-store.s3.amazonaws.com/0/265621/45e19003-4ecc-2ac7-e064-d25762af4483.png">

VPCとサブネットの作成
--

EC2インスタンスを所属させるためのVPCを作成しましょう。
※デフォルトでも問題ないと思いますので、作成をスキップしたい場合は次の手順 "EC2インスタンスの作成" へどうぞ。

VPC コンソールにアクセスします。
画面上部の[VPCの作成]を選択するとポップアップが表示されるので、VPC名(任意)とIPv4 CIDR ブロックを入力。
<img width="702" alt="vpc_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/265621/e8eff68b-49a4-3f8b-dc9e-36a1409f06f2.png">
必要なインスタンス数に応じてアドレス範囲を決定しましょう。

VPCを作成したら、VPC内にサブネットを作成します。
画面左のナビゲーションバーから"サブネット"を選択し、上部の[サブネットを作成]をクリック。
サブネット名(任意)を入力し、先ほど作成したVPCを選択し、サブネットを作成。
※アベイラビリティゾーンはここでは解説しないので"指定なし"とします。
※IPv4 CIDR ブロックに関しては、特に別のサブネットを用意する必要が無い場合、VPCと同じものにしてしまいましょう。
<img width="1251" alt="subnet_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/265621/b36b9bfb-77c1-f4ab-49f7-b621090bf705.png">

インターネットゲートウェイの作成とVPCへのアタッチ
--

次に、作成したEC２インスタンスに外部から接続するためのSSHの入り口を作成。
VPCコンソールのナビゲーションバーから、"インターネットゲートウェイ"を選択。
同じく画面上部から[インターネットゲートウェイの作成]をクリックしゲートウェイを作成する(Nameタグは任意)。

作成しただけのゲートウェイはVPCに紐づいていない(アタッチされていない)ので、
[アクション]->"VPCにアタッチ"から先ほど作成した test_vpcにアタッチする。
<img width="990" alt="gw_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/265621/ad1894be-40ce-7d06-fcae-8f38bd7db2da.png">
VPCへのアタッチが完了したら、画面左のナビゲーションバーから"ルートテーブル"を選択。

作成したVPC(test_vpc)を選択すると、画面下部にVPCのルート情報の詳細が表示されるので、
[ルート]タブを選択した状態で[編集]をクリックし、ルートの追加を行う。

送信先を　0.0.0.0/0 とし、ターゲットにカーソルを合わせると先ほどのゲートウェイIDが表示されるので、クリック。
<img width="713" alt="rtb_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/265621/62fe02b0-4892-bd6f-3e23-1251187badf8.png">
[保存]をクリックし、編集を確定。

※作成したサブネットが関連づけられていない場合は、別途[サブネットの関連付け]タブから関連付けを行う。

これでVPC領域の設定は完了。

EC2インスタンスの作成
--

EC2のダッシュボードから[インスタンスの作成]を選択します。
基本的には画面通りポチポチしていくだけですが、今回のスペックは以下の通りです。

インスタンスタイプ：t2.medium

|OS|disk|File System|vCPU|Mem|
|:--:|:--:|:--:|:--:|:--:|
|RHEL 7.5|10GB|xfs|2コア|4GB|

DB は SQL Server(Express)をインストールしました。


S3バケットの作成
--

S3のマネジメントコンソールに接続後、画面左上の[＋バケットを作成する]をクリック。

ウィザード通りに以下のように進めていく。

<img width="698" alt="S3_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/265621/a9187019-c5b6-723c-36a1-9fb4456136ff.png">
バケット名は一意である必要がある。
今回はウィザードの②、③は全てデフォルトのままで進めます。

<img width="697" alt="S3_04.png" src="https://qiita-image-store.s3.amazonaws.com/0/265621/e4b4b2cb-3aa9-88d1-4d1e-87b3e8121df7.png">
④の確認画面で入力項目に間違いが無いことを確認したら[バケットを作成]をクリック。バケットが正常に作成されていることを確認します。

次に、画面上部の[アップロード]ボタンで適当なファイルをアップロードしてみましょう。

ここでは以下のようなCSVを作成してアップロードしています。

```csv:test_people.csv
Id,Name,Age
1001,Dean,28
1002,Sam,25
1003,John,51
1004,Bobby,54
1005,Meg,26
```

<img width="961" alt="csv_uploaded.png" src="https://qiita-image-store.s3.amazonaws.com/0/265621/bcaf4d69-3f7e-1c99-0896-455ac9def68e.png">

次回はLambdaファンクションの実行により、このアップロードしたファイルの情報を取得してみたいと思います。


まとめ
--

~~(キャプチャ撮り忘れて)~~EC2の部分が手抜きになってしまいました。m(_ _)m
java編も近日中に掲載予定です。