search
LoginSignup
1
Help us understand the problem. What are the problem?

posted at

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

この記事について

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

前提

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

VSCode + Docker + Pythonの環境を作る

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

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

image.png

コンテナを立ち上げる

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

> 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を実行します。

image.png

From 'Dockerfile'を選択します。
image.png

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

image.png

image.png

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

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

image.png

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

image.png

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

hell.py
print("hello world!")

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

> python hello.py 

hello world!

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

Chaliceについて

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

コンテナにChaliceを入れる

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

FROM python:3.8

RUN pip install pylint chalice 

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

image.png

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関数が作成されていることを確認します。

image.png

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

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

{"hello":"world"}

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

削除方法

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

> chalice delete

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
1
Help us understand the problem. What are the problem?