Edited at

Pycharmの力を使って爆速でAWS Lambdaを開発・テスト・デプロイする方法

この記事は全部俺 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」を実行します。

image.png

注意)Pycharmのバージョンが古い場合、「AWS Toolkit」が表示されない場合があります。その場合はPycharm自体のアップデートから先に実施してください(2018.2だと表示されませんでした)。


SAM CLIのインストール

AWS Toolkitをインストールしたあと、Pycharmを再起動して「New Project」を作成しようとすると、下記のようにエラーが表示されます。

これはSAM(Serverless Application Model) CLIがインストールされていないためです。

image.png

公式サイトのInstall SAM CLIに従って、SAM CLIをインストールします。

brew tap aws/tap

brew install aws-sam-cli

image.png

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」してみます。

image.png


エラー解消

Templateのままだと、いくつかエラーが出てしまっているので、それを解消します。

image.png


requestsモジュールのインストール

いつものように、importで赤字が出ている箇所で「⌥ + Space」を押してrequestsモジュールをpip installします。


Credential情報の設定


  • 見にくいですが、画面右下にAWSのCredential情報を設定する箇所があるのでそこを押し、最下部の「Edit AWS Credential file」を押します。


  • ~/.aws/credentialsが存在しない場合、作成しても良いか聞かれるのでYesを選択し、aws_access_key_idaws_secret_access_keyを設定します。



    • credential情報の「IAM ユーザーのアクセスキー ID およびシークレットアクセスキーを取得するには」を参考に取得した値を設定します。

    • credential情報を設定した場合、再度Pycharmの再起動が必要です。

    • credential情報が反映されている場合、右下にAWS:Profile:default@[リージョン名]と表示されます。



image.png

image.png


ローカルでの実行

app.pylambda_handler関数の左側に、λマークがでているのでそれを押してRun [Local] app.lambda_h...を実行します。

image.png

実行のコンフィグ画面に移行するので、「Input」の「Text」から「API Gateway AWS Proxy」を選択して「Run」を押します。

image.png

2~3分ほど待つと以下のように実行結果が出力されます。(Docker container imageが作成されるので、結構待ちます。)

結果を見ると、StatusCodeが200でmessageに"hello world"が出力されていることが確認できます!

image.png

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

image.png

image.png

うまくデバッグ実行ができない場合は、以下のハマりどころを参考にしてみてください。


デプロイとリモートテスト

template.yamlを右クリックし、一番下のDeploy Serverless Applicationを選びます。

image.png

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

image.png

image.png

画面左下の「AWS Exploler」を押すと、リモートのAWS Lambdaが作成される様子が見えます。

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

image.png

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

image.png

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

image.png

以上で、AWS LambdaをPycharm上から作成し、デプロイすることができました!

「AWS Exploler」を使用すると、マネジメントコンソールを使わずともリモート実行も可能なため、すべての作業がPycharm上で完結していい感じです!


参考:ハマりどころと回避方法


デバッグ実行で502が帰ってくる場合

デバッグ実行をする際、docker.errors.APIError: 502 Server Error: Bad Gatewayのようなエラーが出ることがあります。

これは、Dockerにローカルの/Applicationsディレクトリ以下がVolumeとしてShareされていないために起きるエラーです。

image.png

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

image.png

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


参考