Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
30
Help us understand the problem. What is going on with this article?
@tez

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

More than 1 year has passed since last update.

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

参考

30
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
tez
libora
e-Learning一括検索サービス『LIBORA』の開発・運営を行っています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
30
Help us understand the problem. What is going on with this article?