What's this?
pipenvを利用してコマンド1発でローカル環境のソースコードをLmabda関数にデプロイする際の手順をまとめた記事です。
IAMからユーザー作成
最初にローカルからLambdaへのデプロイを実施するためのIAMユーザーを作成します。
IAM > ユーザー > ユーザーを追加からユーザーを作成します。
今回はユーザー名「dev_user」で作成します。
アクセスの種類はプログラムによるアクセスにチェックします。
アクセス権限は後から付与できるので一旦スキップしてユーザーを作成します。
ユーザー作成ができるとシークレットアクセスキーが発行されるのでダウンロードしてておきます。
作成されたユーザーに対してLambdaのデプロイに必要なアクセス権限を追加します。
アクセス権限 > インラインポリシーの追加
サービス:Lambdaを選択
アクション:読み込みから
GetFunction
を選択
アクション:書き込みから
UpdateFunctionCode
,UpdateFunctionConfiguration
を選択
リソースは全てのリソースを選択します。
これでユーザーの作成は完了です。
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関数の作成
ランタイムはPython 3.7にします。
lmabda関数が作成されるARN
が発行されるのでこちらをコピーしておきます。
ローカル環境から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
を作成します。
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関数に反映されていればデプロイ成功です。
今回はこれで以上です。