この記事は全部俺 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からデバッグ実行をするとうまく動作するはずです!