Edited at

AWS Toolkits for IntelliJ による Lambda 開発フローを試してみる


はじめに

この記事は ウェブクルー Advent Calendar 2018 の23日目の記事です。

昨日は @noko_k さんの「バックエンドエンジニアが事前知識なしでReact Native(+ Expo)に入門して詰まったところ」でした。


概要

AWS Lambda の開発支援プラグイン AWS Toolkits for IntelliJ がプレビュー版として公開されたので、試してみました。

今回は IntelliJ IDEA Ultimate で試しましたが、PyCharm でも利用できます。


1. 機能概要

主に以下の機能が提供されています。


全般


  • 新規プロジェクトのウィザード


    • サーバーレスアプリケーション用のプロジェクトを作成できます。



  • 資格情報管理


    • AWS CLI で管理されている認証情報ファイル (~/.aws/credentials) を参照・編集できます。



  • リソース管理


    • AWS に接続する際の Profile や Region を選択する事ができます。

    • 選択した Profile / Region で使用可能な Lambda 等の AWS リソースを一覧表示できます。





AWS Lambda 関連


  • ローカル開発支援


    • ローカル環境で Lambda のテスト実行およびデバッグを行う事ができます。



  • ビルド&デプロイ


    • ローカル環境でビルドした Lambda を AWS へデプロイする事ができます。



  • AWS 上の Lambda の実行


    • リクエスト情報を作成し、AWS 上にデプロイされている Lambda を実行できます。



  • AWS 上の Lambda 設定の参照・変更


    • AWS 上にデプロイされている Lambda の設定情報を参照・変更できます。




2. インストール

Plugins の MarketPlace からインストールできます。

AWS Toolkit

また、別途 AWS SAM CLI のインストールが必要です。

プラグインが提供するいくつかの機能は、バックグラウンドで AWS SAM CLI を利用しています。

AWS SAM CLI のインストール手順については、公式サイトの Installing the AWS SAM CLI を参照してください。


3. プラグインを試す

プロジェクト作成、ローカル環境でテスト実行、AWSへデプロイ&動作確認の流れで試してみました。


3-1. プロジェクト作成

New Project の項目に AWS Serverless Application が追加されています。

Runtime と Project SDK を選択して、次へ進みます。

new-project.png

次に、プロジェクトのテンプレートを選択できます。

今回は AWS SAM Hello World を選択しました。

最後にプロジェクトの保存場所を選択して、完了です。

なお、プロジェクトには依存性管理に Maven が使用されています。

プロジェクトを開いた際に Maven Project 機能の追加を促されると思うので、追加してください。


3-2. AWS 接続設定

画面の右下で AWS への接続設定が行えます。

接続先の Region と、利用する Profile を選択しておきます。

選択した AWS 接続設定で、AWS Explorer から AWS 上のリソースが一覧表示できます。

デフォルトだとサイドバー画面左下にあります。

aws-explorer.png


3-3. ローカル環境でテスト実行

RequestHandler を実装している所から実行できます。

local-run-1.png

実行条件を設定します。ここの Input に Lambda へのリクエスト情報を指定できます。

テンプレートからも選択可能なので、今回は「API Gateway AWS Proxy」を選択しました。

run-config.png

コンソールにレスポンスが出力されます。

{"body":"{ \"message\": \"hello world\", \"location\": \"xxx.xxx.xxx.xxx\" }","headers":{"X-Custom-Header":"application/json","Content-Type":"application/json"},"statusCode":200}

ブレークポイントを設定してデバッグ実行すれば、デバッグする事も可能です。

実行条件で設定したリクエスト情報が、確かに受け取れています。

debug.png


3-4. AWSへデプロイ

AWS へデプロイしてみます。

CloudFormation に Stack を作成し、それを利用したデプロイが GUI としては提供されているのですが、実際の処理を行う AWS SAM CLI の build コマンドがまだ java8 のランタイムをサポートしていないようだったので、この方法は使う事はできませんでした。

2018-12-15 16:34:57 Found credentials in shared credentials file: ~/.aws/credentials

2018-12-15 16:34:58 Building resource 'HelloWorldFunction'
Build Failed
Error: 'java8' runtime is not supported

なので、今回は直接 Lambda を作成したいと思います。

AWS Explorer の Lambda から Craete new AWS Lambda を選択します。

create-lambda.png

設定画面で Name, Handler, Runtime, IAM, Bucket を設定して作成します。

create-function-config.png

これで作成できました。


3-5. AWS上で動作確認

デプロイされた Lambda を実行してみます。

AWS Explorer に表示されている Lambda を選択し実行します。

run-remote-lambda.png

ローカル実行の時の同じ要領で、実行条件を設定する事ができます。

コンソールにレスポンスの内容が表示されます。

Invoking Lambda function: try-aws-toolkit

Logs:
START RequestId: 79164e5e-0041-11e9-9531-21cb32e1956a Version: $LATEST
END RequestId: 79164e5e-0041-11e9-9531-21cb32e1956a
REPORT RequestId: 79164e5e-0041-11e9-9531-21cb32e1956a Duration: 14819.37 ms Billed Duration: 14900 ms Memory Size: 128 MB Max Memory Used: 71 MB

Output:
{
"body": "{ \"message\": \"hello world\", \"location\": \"xxx.xxx.xxx.xxx\" }",
"headers": {
"X-Custom-Header": "application/json",
"Content-Type": "application/json"
},
"statusCode": 200
}


4. まとめ

CloudFormation に未対応なのは残念でしたが、AWS SAM CLI 側の対応でいずれ使えるようになると思います。それでも、ローカルテストとデプロイが簡単にでき、Lambda の設定も AWS コンソールを操作せずに行えるのは良いですね。

チーム開発では Serverless Framework などのフレームワークを使ったほうが良いと思いますが、個人用でさくっと作りたい時には便利そうです。

明日の記事は @yusuke-kobayashi0117 さんです。よろしくお願いいたします。

ウェブクルーでは一緒に働いていただける方を随時募集しております。

お気軽にエントリーくださいませ。