この記事は全部俺 Advent Calendar 2018の3日目の記事です。
爆速でサーバレス開発します!
tl;dr
- AWS Toolkit for Pycharmを使用してAWS Lambdaを開発しました。
- AWS Toolkitを使うとLambda開発で必要な以下のことがPycharm内で全てできます!
- デバッグモードを用いたStep実行、ローカルテスト
- AWS Lambdaへのデプロイ
- デプロイしたリモート環境でのリモートテスト
AWS Toolkitについて
re:invent 2018のキーノートで発表されたAWS Lambda開発のためのOSSツールキットです。
現在はPycharm版、IntelliJ版(プレビュー)、VSCode版(プレビュー)があります。
この記事では、2018/12/03現在で唯一プレビュー版でなく一般提供されているPycharmを用いてAWS Lambda開発を行う方法について記載します。
AWS Toolkitでできること
- ローカルでコードをテストしながら、ステップ実行しつつ実装を進めることができる。
- 選択したAWSリージョンへアプリケーションを簡単にデプロイすることができる。
つまり、AWS Consoleを使用することなく、AWS Lambdaの開発、デプロイ、疎通テストまで全てPycharm上でできるのです!!
筆者の環境
| Software | Version |
|---|---|
| macOS Mojave | 10.14.1 |
| Pycharm | 2018.3 (Community Edition) |
| Docker for macOS | 2.0.0.0-mac81 |
AWS Toolkit for Pycharmのインストール
PycharmへAWS Toolkitをインストール
PycharmのPluginsから、「AWS Toolkit」を検索して「Install」を実行します。

注意)Pycharmのバージョンが古い場合、「AWS Toolkit」が表示されない場合があります。その場合はPycharm自体のアップデートから先に実施してください(2018.2だと表示されませんでした)。
SAM CLIのインストール
AWS Toolkitをインストールしたあと、Pycharmを再起動して「New Project」を作成しようとすると、下記のようにエラーが表示されます。
これはSAM(Serverless Application Model) CLIがインストールされていないためです。
公式サイトのInstall SAM CLIに従って、SAM CLIをインストールします。
brew tap aws/tap
brew install aws-sam-cli
SAM CLIではDockerを必要とするので、公式インストール手順を参考に、必要に応じてDockerのインストールを行ってください。
AWS Toolkit for Pycharmを使用したLambda実装
Create New Project
ここまで来たらPycharmを再起動して、再度「New Project」します。
今度はエラーが表示されることなくProjectが作成されるはずです。
「More Settings」から「SAM Template」として、「AWS SAM Hello World」を選択して「Create」してみます。
エラー解消
Templateのままだと、いくつかエラーが出てしまっているので、それを解消します。

requestsモジュールのインストール
いつものように、importで赤字が出ている箇所で「⌥ + Space」を押してrequestsモジュールをpip installします。
Credential情報の設定
- 見にくいですが、画面右下にAWSのCredential情報を設定する箇所があるのでそこを押し、最下部の「Edit AWS Credential file」を押します。
-
~/.aws/credentialsが存在しない場合、作成しても良いか聞かれるのでYesを選択し、aws_access_key_idとaws_secret_access_keyを設定します。- credential情報の「IAM ユーザーのアクセスキー ID およびシークレットアクセスキーを取得するには」を参考に取得した値を設定します。
- credential情報を設定した場合、再度Pycharmの再起動が必要です。
- credential情報が反映されている場合、右下に
AWS:Profile:default@[リージョン名]と表示されます。
ローカルでの実行
app.pyのlambda_handler関数の左側に、λマークがでているのでそれを押してRun [Local] app.lambda_h...を実行します。
実行のコンフィグ画面に移行するので、「Input」の「Text」から「API Gateway AWS Proxy」を選択して「Run」を押します。

2~3分ほど待つと以下のように実行結果が出力されます。(Docker container imageが作成されるので、結構待ちます。)
結果を見ると、StatusCodeが200でmessageに"hello world"が出力されていることが確認できます!

ソースコードを修正すると当然結果も変わりますし、ローカルでデバッグ実行をすることもできます!


うまくデバッグ実行ができない場合は、以下のハマりどころを参考にしてみてください。
デプロイとリモートテスト
template.yamlを右クリックし、一番下のDeploy Serverless Applicationを選びます。

AWS CloudFormationのStack作成やlambda関数の環境変数設定、デプロイパッケージを保存するS3バケットの作成・指定を行う画面が出てくるので、ここで値を入力することでRemoteへのDeployが実行されます!

画面左下の「AWS Exploler」を押すと、リモートのAWS Lambdaが作成される様子が見えます。
作成されるのを待って、lambdaを右クリックしてRun [Remote] app.lambda_h...を押すとローカル実行のときと同様の画面が出てくるので、「Input」の「Text」から「API Gateway AWS Proxy」を選択して「Run」を押します。

実行結果が帰ってきて、StatusCodeが200でmessageに"hello world"が出力されていることが確認できました!

マネジメントコンソールからも、Lambdaがデプロイされていることが確認できます!

以上で、AWS LambdaをPycharm上から作成し、デプロイすることができました!
「AWS Exploler」を使用すると、マネジメントコンソールを使わずともリモート実行も可能なため、すべての作業がPycharm上で完結していい感じです!
参考:ハマりどころと回避方法
デバッグ実行で502が帰ってくる場合
デバッグ実行をする際、docker.errors.APIError: 502 Server Error: Bad Gatewayのようなエラーが出ることがあります。
これは、Dockerにローカルの/Applicationsディレクトリ以下がVolumeとしてShareされていないために起きるエラーです。

これを解決するには、Docker for macOSの設定を開き、File Sharingから/Applicationsを追加し、「Apply & Restart」を実行してDocker for macOSを再起動します。

Docker for macOS再起動後、再度Pycharmからデバッグ実行をするとうまく動作するはずです!






