EclipseでLambda開発環境の構築

AWSを利用してから開発環境を毎度ノートPCに構築しないで、JAVA、C#、Python等言語ごとにEC2インスタンスを作って、開発環境を構築。
使い終わったら、AMI取ってsnapshotで保存し、インスタンスを削除するようにすれば、低維持費で環境を維持できます。

* [Python開発環境構築 ー PyCharm × Anaconda](https://qiita.com/tanj/items/d88a3084a092bb106a97)
* [AWS Lambda Pythonをローカル環境で実行&デプロイ](https://qiita.com/tanj/items/70c57ed9ca742884c61e)

でPythonの環境を作ったが、今度はJAVAの開発環境を作ります。

##環境
* Windows Server 2012 (EC2利用)
* Eclipse 4.7 Oxygen(IDE、 Pleiades All in Oneを利用)
* AWS Toolkit for Eclipse(プラグイン、デバッグ・デプロイ等AWSのJAVA開発を楽にするツール)


##Pleiades All in Oneインストール
まずダウンロードは以下のリンクから
http://mergedoc.osdn.jp/index.html#/pleiades_distros4.7.html
JDKも必要なのため、Windows 64bit のFull EditionをDownload

ダウンロード後、インストールします。インストーラーの形式ではないので、.zipを右クリックして、「すべて展開」をクリックし、適切の場所に展開すればよいだけです。
![pleiades.png](https://qiita-image-store.s3.amazonaws.com/0/191079/499c12eb-89f1-bffd-2be1-7807dc31f02b.png)
eclipseフォルダに移動し、eclipse.exeをダブルクリックして起動します。workspaceディレクトリが聞かれますので、デフォルトの場所で作ります。
![workspace.png](https://qiita-image-store.s3.amazonaws.com/0/191079/8799d4c2-6dd7-d098-8ac6-2398eba9d052.png)

##AWS Toolkit for Eclipseインストール
Eclipseを開き、[Help] -> [Install New Software] をクリックします。[Work with] ボックスで、[https://aws.amazon.com/eclipse] と入力し、Enter キーを押します。
![awstoolskit.png](https://qiita-image-store.s3.amazonaws.com/0/191079/043da602-ca6c-d7e3-7b70-421f75dc8913.png)
**AWS Toolkit for Eclipse Core**だけ必須なので、とりあえずインストールします。
また、今回Lambdaへのデプロイもしたいので、**AWS Lambda Plugin**もインストール。![lambdaplugin.png](https://qiita-image-store.s3.amazonaws.com/0/191079/7ee2dafe-0bf1-9d3b-46e6-9e978cbe423d.png)

![reboot.png](https://qiita-image-store.s3.amazonaws.com/0/191079/b2467177-98de-bb90-2eb6-f907b3c99102.png)
インストール完了後、Eclipseが再起動されます。
![notice.png](https://qiita-image-store.s3.amazonaws.com/0/191079/6e6e8e58-fc8c-50a4-ede6-e8fe564ad097.png)
メニューにAWSのアイコンが新規追加され、AWS Java プロジェクトが作成できます。
![aws.png](https://qiita-image-store.s3.amazonaws.com/0/191079/ed77d918-8eb6-0e80-8f48-6e7f3a61c3ee.png)

##AWS Lambda Java プロジェクトの作成
**新規AWS Lambda Java プロジェクト**をクリックしますと、ポップアップが表示されます。
![image1.png](https://qiita-image-store.s3.amazonaws.com/0/191079/38cb112b-48cd-026f-12ba-27b2c79a7c48.png)

sample-lambda-javaというプロジェクト名を入れると、作成が可能です。
入力タイプにLambdaを呼び出すトリガーのサービスがリストアップされますが、ここでCustomを選択します。

##AWS Lambda Java プロジェクトの構成
プロジェクトを開き、構成として、左上がパッケージ・クラス・JREライブラリ等プログラム資材がリストアップされます。
AWSのアイコンのメニューから[AWS エクスプロラー・ビューの表示]をクリックすると、左下のようになAWS 各関連するサービス一覧が表示されます。展開すると、中で作成されているものも見れます。
![image2.png](https://qiita-image-store.s3.amazonaws.com/0/191079/70550095-563e-cc31-232d-53ef65c2ec6a.png)

また、右側に[com.amazonaws.smaples]パッケージ内にあるS3Sample.javaを開いたプログラムとなります。

##AWS Lambda Java プロジェクト実行
これでコーディングが開始できます。いつくWrapperクラスを作って、ローカル動かしたいと思いますが、
Elipseの実行構成で、AWS SAM Local sample-lambda-javaと実行構成を新規作成しました。
SAM Template、Eventファイルを一通り用意しましたが、「Property SAM runtime does not contain a valid file!」エラーが表示され、無理やり実行したらエラーが表示されました。
![run1.png](https://qiita-image-store.s3.amazonaws.com/0/191079/bfe160db-3790-6547-9724-f1a9b817b89a.png)

![run2.png](https://qiita-image-store.s3.amazonaws.com/0/191079/7bf0eea1-dac7-a608-4052-233516512b2f.png)

Serverless template fileは以下の感じで作っています。

```json:sample-lambda-java.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: An AWS Serverless Specification template describing your function.
Resources:
  samplelambdajava:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: com.amazonaws.lambda.demo.LambdaFunctionHandler
      Runtime: java8
      Description: ''
      MemorySize: 512
      Timeout: 15
      Role: 'arn:aws:iam::xxxxxxxxxxxx:role/lambda_access_execution'
```

![error1.png](https://qiita-image-store.s3.amazonaws.com/0/191079/639b1771-2f3b-1564-fb95-29777ff57b76.png)

SAM Localの環境が必要ということですね。

* [SAMローカルを使用してサーバーレスアプリケーションをローカルでテストする](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/test-sam-local.html)
* [[新ツール]AWS SAMをローカル環境で実行できるSAM Localがベータリリース](https://dev.classmethod.jp/cloud/aws/20170816-sam-local/)

を参考に、SAM Local環境構築に取り組んだら、Dockerの起動でくじけました。
EC2（仮想環境）にさらに仮想環境（Windows: Docker Toolbox）を起動すると、エラーになります。
![error2.png](https://qiita-image-store.s3.amazonaws.com/0/191079/6d8b4178-e3b8-d7ed-c752-cf59c22d358d.png)
BIOSはいじれないので、断念しました。

##AWS Lambda Java プロジェクトアップロード
ローカルで動かせないなら、アップロードして、Console上で実行すればよいですね。
![uploadfunction.png](https://qiita-image-store.s3.amazonaws.com/0/191079/927813eb-0643-59d4-6078-281b0cd3663a.png)
Upload function to AWS Lambdaをクリックし、アップロードします。
![uploadwindow1.png](https://qiita-image-store.s3.amazonaws.com/0/191079/3bdeb4df-d0c8-d0c0-18fb-cb1a4bb7b695.png)
マネジメントコンソールでテストイベントを作って、「Test」クリック
![image3.png](https://qiita-image-store.s3.amazonaws.com/0/191079/9c8b31da-40f6-e81b-2501-823f4ea2dc14.png)

無事成功しました。