この記事について

最近Lambdaの関数を作成する機会がありました。
その際に、DockerとVScodeを使用してそれっぽい感じの開発環境作ってみました。
その環境の作り方をこの記事にまとめます。

前提

※DockerとVSCodeはバージョンが古すぎなければ大丈夫だと思います

VSCode + Docker + Pythonの環境を作る

VSCodeにremote-containerの拡張機能を入れる

拡張機能名ms-vscode-remote.remote-containers

コンテナを立ち上げる

作業ディレクトリを作成します。

> mkdir work-lambda
> cd work-lambda

Dockerfileを作成します。

> vi Dockerfile
> cat Dockerfile
FROM python:3.8

RUN pip install pylint

VSCodeで作業ディレクトリを開いて、Remote-Cotainers: Reopen in Containerを実行します。

From 'Dockerfile'を選択します。

コンテナが作成され、コンテナの中に入ることが可能になります。(数分間待つ必要あり)
※以下をクリックすると、コンテナをビルドする際のログを確認することができます。

コンテナ上でVSCodeの拡張機能を使用できるようにする

.devcontainer/devcontainer.jsonの以下箇所に、使用したい拡張機能を登録します。

Remote-Containers: Rebuild Containerを実行して、コンテナをビルドし直します。

pythonプログラムを実行できるか確認するため、hello.pyファイルを作成します。

hell.py

print("hello world!")

Pythonプログラムが実行できていることを確認します。

> python hello.py 

hello world!

コンテナ上でLambda開発をできるようにする

Chaliceについて

Chaliceというツール(フレームワーク)を使って、lambda開発環境を作ります。

AWS公式オンラインセミナー: https://amzn.to/JPWebinar 過去資料: https://amzn.to/JPArchive

コンテナにChaliceを入れる

Dockerfileを以下の通り更新します。

FROM python:3.8

RUN pip install pylint chalice 

Remote-Containers: Rebuild Containerでコンテナをビルドし直します。

lambdaファンクションをデプロイする

chaliceを実行するために、コンテナにクレデンシャル情報を登録します。

以下の操作をコンテナ上にて実施します。

> export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXXXX
> export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

デフォルトリージョンを定義します。

> export  AWS_DEFAULT_REGION=ap-northeast-1

プロジェクトを作成します。

> chalice new-project helloworld

app.pyの中身を確認します。
(デフォルトでは{‘hello’: ‘world’}を返すだけの関数)

app.py

from chalice import Chalice

app = Chalice(app_name='helloworld')


@app.route('/')
def index():
    return {'hello': 'world'}

デプロイします。

> cd helloworld/
> chalice deploy

以下の出力が表示されていたらデプロイ完了です。

Resources deployed:
  - Lambda ARN: arn:aws:lambda:ap-northeast-1:xxxxxxxxxxxx:function:helloworld-dev
  - Rest API URL: https://xxxxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/api/

マネコンからlambda関数が作成されていることを確認します。

一緒に作成されたAPI Gatewayのエンドポイントを叩いてみます。

curl https://xxxxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/api/

{"hello":"world"}

ちゃんと動いてそうですね!

削除方法

lambda関数を削除したい場合は、削除したい関数のプロジェクトにて以下を実行します。

> chalice delete

元記事はこちら

VSCode & Docker で(自称)モダンなLambda開発環境を作る
著者:
@K5K


アイレットなら、AWS で稼働するサーバーを対象とした監視・運用・保守における煩わしい作業をすべて一括して対応し、経験豊富なプロフェッショナルが最適なシステム環境を実現いたします。AWS プレミアコンサルティングパートナーであるアイレットに、ぜひお任せください。

AWS 運用・保守サービスページ

その他のサービスについてのお問合せ、お見積り依頼は下記フォームよりお気軽にご相談ください。
https://cloudpack.jp/contact/form/