ラベル aws lambda の投稿を表示しています。 すべての投稿を表示
ラベル aws lambda の投稿を表示しています。 すべての投稿を表示

2018年12月2日日曜日

【python】PyCharm CEでAWS Toolkits for PyCharmを使う

  • 公開日:2018年12月02日
  • 最終更新日:2018年12月05日

記事概要

PyCharm CEでAWS Toolkits for PyCharmを使ってAws lambdaをlocalで動かす方法を記載した記事です。

記事の対象者

  • Aws lambdaにpythonアプリをdeployしたことがある
  • PyCharmを使ってAws lambdaをアプリを実装したい

記事で学べること

  • PyCharmでAws lambdaの開発環境を構築する

環境

  • macOS Mojavve10.14
  • Python 3.6.3
  • aws lambda
  • Docker Desktop version2.0.0.0-mac81

PyCharmインストール

公式サイトからPyCharm Communityをダウンロード します。もちろん、Professionalでも問題ありません。

PyCharm CEを立ち上げて適当なプロジェクトを作成します。

Pluginインストール

PluginでAWS Toolkitをインストールします。操作手順は以下の通り。

  • Preference選択
  • Plugins選択
  • AWSで検索
  • AWS Toolkitをインストール

AWS Toolkitのインストールが完了したら、次の作業に進みます。

AWS SAM CLI を導入

AWS SAM CLIが必要になります。
公式サイトに記載してある手順を実行します。

AWS SAM CLIの導入ついでに、aws-cliも最新にしておくとさらに良いです。

terminal

// 現在バージョン確認
$ aws --version
aws-cli/1.16.47 Python/3.6.3 Darwin/18.0.0 botocore/1.12.37

// AWS CLI を最新バージョンに更新
pip install awscli --upgrade --user

// 更新後のバージョン確認
$ aws --version
aws-cli/1.16.67 Python/3.6.3 Darwin/18.0.0 botocore/1.12.57

// aws-sam-cli install
pip install aws-sam-cli

公式サイトだとbrewのコマンドが記載されていますが、brewでpythonを導入していない場合、brewだとインストールに失敗しました。
なので、私はpipで導入しました。
自分の環境に合わせてaws-sam-cliを導入してください。

プロジェクト作成

準備が完了したので、プロジェクトを作成しましょう。

NewProjectを選択すると、AWS Serverless Applicationが出現しています。

択しプロジェクト名、SAM Templateから「AWS SAM Hello World」を選んで作成します。

*注意点1.pythonをVirtualenv環境で利用している場合は、Virtualenv Environmentを選択するようにします。公式サイトに詳しい説明が記載されています。

*注意点2.aws-sam-cliをpipで入れた場合は、pathを自分で設定する必要があります。
pathはwhichコマンドで確認できます。

terminal

which sam

/Users/{username}/.pyenv/shims/sam

上記のpathをCIのpathに設定してください。

lambdaをdockerで動かす。

プロジェクト作成すると、デフォルトでlambdaプロジェクトが作成されています。

テスト環境で動かす場合はλマークをクリックします。[Run local app]でlambdaをdocker環境で動かすことができます。

terminal

2018-12-02 22:05:01 Found credentials in environment variables.
2018-12-02 22:05:01 Invoking app.lambda_handler (python3.6)
2018-12-02 22:05:01 Decompressing /var/folders/_k/82kvh_6s4bz0w8j8lhkp674c0000gn/T/2220729341239739084.zip

Fetching lambci/lambda:python3.6 Docker container image...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
2018-12-02 22:17:48 Mounting /private/var/folders/_k/82kvh_6s4bz0w8j8lhkp674c0000gn/T/tmpco54kn1p as /var/task:ro inside runtime container
START RequestId: c4106c2a-a762-4881-90c1-d3abf01a9a96 Version: $LATEST
END RequestId: c4106c2a-a762-4881-90c1-d3abf01a9a96
REPORT RequestId: c4106c2a-a762-4881-90c1-d3abf01a9a96 Duration: 1444 ms Billed Duration: 1500 ms Memory Size: 128 MB Max Memory Used: 26 MB

{"statusCode": 200, "body": "{\"message\": \"hello world\", \"location\": \"61.12.128.21\"}"}


jsonが取得できています。初回はdockerのイメージを取得してくるので、かなり時間がかかります。気長に待ちましょう。

virtualenvに対応

プロジェクト毎に使用パッケージをvirtualenvで隔離します。lambdaAPIは量を作るケースが多いので、virtualenvは必須です。

ターミナルで作業します。

terminal

// プロジェクトルートへ
cd project_root

// 仮想環境(virtualenv)の構築
$ virtualenv --python="`which python`" virtualenv

// virtualenvのactivate
source virtualenv/bin/activate

(virtualenv)$

コマンドをvirtualenv name のようにして名称をつけても問題ありません。

あとは、PyCharm → Preferences → Project Interpreterでaddボタンを押して作った仮想環境を設定すればOKです。

まとめ

AWS Toolkitを使うと、間違いなく生産性は上がります。
一日で設定可能なので、是非利用しましょう。 WEB開発者はもちろん、機械学習開発者にもおすすめです。

次は、testコードと本番deployと機械学習のmodel APIを試してみようと思います。

以上です。

参照サイト


この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2018年11月25日日曜日

【flask】Aws lambda上にflaskをdeployする

  • 公開日:2018年11月25日
  • 最終更新日:2018年11月25日

記事概要

Aws lambdaでflaskアプリをdeployする方法を記載した記事です。

記事の対象者

  • Aws lambdaでflaskをdeployしたい
  • flaskを使った実装を理解している

環境

  • flask
  • python3.6
  • aws lambda
  • zappa
  • doorkeeper 16.1.0

flaskアプリ作成の準備

アプリ構築用のフォルダを作成します。

terminal

mkdir flask-app

続いて仮想環境を構築します。Zappaを使ってbuildとdeployをするので、仮想環境の構築が必須になります。

仮想環境の構築には、virtualenvを使います。virtualenvはPythonの仮想的な環境を作ることができます。
Zappaがpyenvでdeployできるかどうかは確認していません。

virtualenvは、プロジェクトごとにPythonのバージョンを変えたり、必要なパッケージを分けてインストールして動かす事もできます。

terminal

cd flask-app/

$ virtualenv .env
Using base prefix '/Users/{user_name}/.pyenv/versions/3.6.3'
New python executable in /Users/{user_name}/workspace/flask-app/.env/bin/python3.6
Also creating executable in /Users/{user_name}/workspace/flask-app/.env/bin/python
Installing setuptools, pip, wheel...
done.

仮想環境に入ります。

terminal

source .env/bin/activate

(.env) 

terminalのプロンプトの最初が(.env)に変わってれば入れています。

確認のために仮想環境を出ます。

terminal

deactivate

terminalのプロンプトから(.env)が消えていれば、仮想環境を出ています。

flaskアプリの作成

アプリを作成します。requirements.txtを作成します。

terminal

// 仮想環境に入る
source .env/bin/activate

touch requirements.txt

requirements.txtに必要なパッケージを記載します。

flask-app/requirements.txt

flask
zappa

ライブラリをpipでinstallします。

terminal

pip install -r requirements.txt

Hello worldのアプリを作成します。

flask-app/app.py

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/')
def hello_world():
    return jsonify({"message": "Hello World!"})

if __name__ == '__main__':
 app.run()

ローカルで動作することを確認します。
http://localhost:5000/でブラウザにアクセスします。

ブラウザ

{"message":"Hello World!"}

問題ありませんね。

flaskアプリをlambdaにdeploy

ZAPPAを使います。

terminal

$ zappa init

// 全てデフォルト

zappa_settings.jsonが作成されていることを確認します。

terminal

$ ls -l
total 24
-rw-r--r--@ 1 edy  staff  178 11 24 21:57 app.py
-rw-r--r--  1 edy  staff   11 11 24 21:49 requirements.txt
-rw-r--r--  1 edy  staff  240 11 24 23:09 zappa_settings.json

内容を確認すると、色々と設定が記載されているはずです。

deployします。

terminal

zappa deploy dev

deployします。
The role defined for the function cannot be assumed by Lambdaというエラーが表示されて deployに失敗することがありますが、何回か叩くとうまくいくはずです。

URLが返却されたらURLをブラウザで叩いてみてください。

ブラウザ

{"message":"Hello World!"}

上手くいきました。

flaskアプリをlambdaから削除

削除もコマンドで行えます。

terminal

zappa undeploy

これで削除されます。便利ですね。

まとめ

lambdaを使うと低コストでサーバーを利用することができます。
シンプルなAPIを作成するなら、これで十分です。機械学習のAPIとかなら、十分ですね。いやー、凄い時代になりました。

以上です。

参照サイト


この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加
Related Posts Plugin for WordPress, Blogger...