LoginSignup
0
0

More than 1 year has passed since last update.

python3.7でローカルからLambda関数をデプロイする手順

Posted at

What's this?

pipenvを利用してコマンド1発でローカル環境のソースコードをLmabda関数にデプロイする際の手順をまとめた記事です。

IAMからユーザー作成

最初にローカルからLambdaへのデプロイを実施するためのIAMユーザーを作成します。
IAM > ユーザー > ユーザーを追加からユーザーを作成します。

今回はユーザー名「dev_user」で作成します。
アクセスの種類はプログラムによるアクセスにチェックします。

image.png

アクセス権限は後から付与できるので一旦スキップしてユーザーを作成します。
ユーザー作成ができるとシークレットアクセスキーが発行されるのでダウンロードしてておきます。

作成されたユーザーに対してLambdaのデプロイに必要なアクセス権限を追加します。
アクセス権限 > インラインポリシーの追加
サービス:Lambdaを選択
アクション:読み込みから
GetFunctionを選択
アクション:書き込みから
UpdateFunctionCode,UpdateFunctionConfigurationを選択

image.png

リソースは全てのリソースを選択します。

image.png

これでユーザーの作成は完了です。

aws-cliのインストール

次にローカルからAWSサービスをコマンドラインで操作するためにaws-cliをインストールします。
すでにローカルにpipがインストールされていればすぐにインストールできます。

//aws-cliのインストール
sudo pip install awscli

//バージョン確認
aws --version
aws-cli/2.1.5 Python/3.9.0 Darwin/19.6.0 source/x86_64 prompt/off

aws-cliがインストールできたので先ほどダウンロードしたアクセスキーを利用してdev_userの認証情報を登録します。

//dev_userの認証情報を追加
aws configure --profile dev_user

AWS Access Key ID [None]:{.csvダウンロードしたアクセスキー}
AWS Secret Access Key [None]:{.csvダウンロードしたシークレットアクセスキー}
Default region name [None]: ap-northeast-1
Default output format [None]: json

//デフォルトユーザーをdev_userに変更
export AWS_DEFAULT_PROFILE=dev_user

//登録した認証情報の確認
aws configure list

これでコマンドラインでのAWSリソース操作ができるようになりました。

lambda関数の作成

次にAWSコンソールからlambda関数を作成します。
image.png

ランタイムはPython 3.7にします。

lmabda関数が作成されるARNが発行されるのでこちらをコピーしておきます。

image.png

ローカル環境からlambda関数をデプロイ

ローカル環境からlambda関数のデプロイは下記コマンドの実施で可能です。

//カレントディレクトリのソースファイルをzip形式で圧縮
zip -r {ファイル名}.zip . -x *.zip

//zipファイルを指定のlambda関数にアップロード
aws lambda update-function-code --function-name {ARN名} --zip-file fileb://{ファイル名}.zip

今回はこのコマンドをpythonでスクリプト化します。

//作業ディレクトリの作成
mkdir sample-lambda

cd sample-lambda

// pipenvのインストール
pip install pipenv

pipenv --python 3.7

デプロイ用lambda関数のlambda_function.pyを作成します。(中身はなんでも良いです)

次にコマンド実行用のlambda_deploy.pyを作成します。

lambda_deploy.py
import subprocess

# create zipfile
cmd = []
cmd.append("zip")
cmd.append("-r")
cmd.append("{ファイル名}.zip")
cmd.append(".")
cmd.append("-x")
cmd.append("*.zip")
subprocess.run(cmd)

# lambda deploy
cmd = []
cmd.append("aws")
cmd.append("lambda")
cmd.append("update-function-code")
cmd.append("--function-name")
cmd.append("{ARN名}")
cmd.append("--zip-file")
cmd.append("fileb://{ファイル名}.zip")

subprocess.run(cmd)

pipfileを編集し、末尾にpipenv run実行時のエイリアスを追加します。

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]

[dev-packages]

[requires]
python_version = "3.7"

# pipenv run deploy -> zip圧縮とlambda関数のアップロード
[scripts]
deploy = "python lambda_deploy.py"

これで準備は完了しました。
実際に実行してデプロイされるか確認します。

//仮想環境に入る
pipenv shell

//デプロイコマンドの実行
pipenv run deploy

無事にソースコードがlambda関数に反映されていればデプロイ成功です。

image.png

今回はこれで以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0