はじめに
この記事は ウェブクルー 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 を選択して、次へ進みます。
次に、プロジェクトのテンプレートを選択できます。
今回は AWS SAM Hello World を選択しました。
最後にプロジェクトの保存場所を選択して、完了です。
なお、プロジェクトには依存性管理に Maven が使用されています。
プロジェクトを開いた際に Maven Project 機能の追加を促されると思うので、追加してください。
3-2. AWS 接続設定
画面の右下で AWS への接続設定が行えます。
接続先の Region と、利用する Profile を選択しておきます。
選択した AWS 接続設定で、AWS Explorer から AWS 上のリソースが一覧表示できます。
デフォルトだとサイドバー画面左下にあります。
3-3. ローカル環境でテスト実行
RequestHandler を実装している所から実行できます。
実行条件を設定します。ここの Input に Lambda へのリクエスト情報を指定できます。
テンプレートからも選択可能なので、今回は「API Gateway AWS Proxy」を選択しました。
コンソールにレスポンスが出力されます。
{"body":"{ \"message\": \"hello world\", \"location\": \"xxx.xxx.xxx.xxx\" }","headers":{"X-Custom-Header":"application/json","Content-Type":"application/json"},"statusCode":200}
ブレークポイントを設定してデバッグ実行すれば、デバッグする事も可能です。
実行条件で設定したリクエスト情報が、確かに受け取れています。
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 を選択します。
設定画面で Name, Handler, Runtime, IAM, Bucket を設定して作成します。
これで作成できました。
3-5. AWS上で動作確認
デプロイされた Lambda を実行してみます。
AWS Explorer に表示されている Lambda を選択し実行します。
ローカル実行の時の同じ要領で、実行条件を設定する事ができます。
コンソールにレスポンスの内容が表示されます。
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 さんです。よろしくお願いいたします。
ウェブクルーでは一緒に働いていただける方を随時募集しております。
お気軽にエントリーくださいませ。