2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Cloud Native Buildpacksを利用してGoogleCloudFunctionsをローカル環境で実行

Last updated at Posted at 2021-01-04

はじめに

Google Cloud Functionsのローカル開発環境を作成し、Hello Worldを出力するサービスを構築します。
また、ローカル開発環境はCloud Native Buildpacksをします。
基本的にGoogle様のドキュメントに従ってやっていきます。補足程度にとらえてください。

前提

私のPCは以下のような環境です。

  • Windows 10にwsl2を使用してUbuntuを構築
  • Ubuntuにdockerをインストール
  • windowsにpython3.8をインストール

今回はUbuntu上にGoogle Cloud Functionsのローカル開発環境を作成していきます。

いざ構築

ローカルでの開発を参照し構築していきます。
資料を参照すると、Google Cloud Funcitonsをローカルで開発するための選択肢は下記の2種類とのこと。

今回はCloud Native Buildpacksを使用してローカル環境を構築したいと思います。
なお、Cloud Native Buildpacksを使用するためには下記が必要とのこと。

そのため、下記の流れで進めていきます。

  1. packツールのインストール
  2. テスト用のPython Cloud関数の作成
  3. Cloud Native Buildpacksの実行

packツールのインストール

packツールのインストールは公式ドキュメントを参照して実施します。
packツールはCommand Line Interface (CLI)とGo libraryとして提供されており、今回はCLIをインストールします。

環境がUbuntuになるため、下記コマンドを実行してインストール。

$sudo add-apt-repository ppa:cncf-buildpacks/pack-cli
$sudo apt-get update
$sudo apt-get install pack-cli

そして、.bash_profileに以下を追記

$echo '. $(pack completion)' >> ~/.bash_profile

テスト用のPython Cloud関数の作成

テスト用にHello Worldを出力するPython Cloud関数を作成します。
Python Cloud関数はPythonクイックスタート丸コピ参照して作成します。

以下をhello_world.pyとして保存。

def hello_world(request):
    """Responds to any HTTP request.
    Args:
        request (flask.Request): HTTP request object.
    Returns:
        The response text or any set of values that can be turned into a
        Response object using
        `make_response <http://flask.pocoo.org/docs/1.0/api/#flask.Flask.make_response>`.
    """
    request_json = request.get_json()
    if request.args and 'message' in request.args:
        return request.args.get('message')
    elif request_json and 'message' in request_json:
        return request_json['message']
    else:
        return f'Hello World!'
    ```

Cloud Native Buildpacksの実行

Cloud Native Buildpacksに従い、以下を実行。

pack build --builder gcr.io/buildpacks/builder:v1 \
--env GOOGLE_RUNTIME=python \
--env GOOGLE_FUNCTION_SIGNATURE_TYPE=http \
--env GOOGLE_FUNCTION_TARGET=hello_world hello

すると、下記のようなエラーが発生。

=== Python - Functions Framework (google.python.functions-framework@0.9.2) ===
Failure: (ID: 5c04ec9c) missing main.py and GOOGLE_FUNCTION_SOURCE not specified. Either create the function in main.py or specify GOOGLE_FUNCTION_SOURCE to point to the file that contains the function

どうやらPython Cloud関数の名前をmain.py以外にしているため、ソース(hello_world.py)との紐づけに失敗し発生している模様。
そのため、packコマンド実行時の引数にGOOGLE_FUNCTION_SOURCEを追加して再度実行

pack build --builder gcr.io/buildpacks/builder:v1 \
--env GOOGLE_RUNTIME=python \
--env GOOGLE_FUNCTION_SIGNATURE_TYPE=http \
--env GOOGLE_FUNCTION_TARGET=hello_world \
--env GOOGLE_FUNCTION_SOURCE=hello_world.py hello

すると無事にイメージのビルドに成功。
作成したhelloイメージ使用してコンテナを実行してみる。

$ docker run --rm -p 8080:8080 hello

実行後はcurlコマンドを使用してPython Cloud関数にアクセスし、hello worldが返ってくることを確認。

$ curl http://localhost:8080/hello_world
Hello World!

無事、ローカル開発環境でHello Worldを出力するサービスを構築することができた。

まとめ

  • Cloud Native Buildpacksを利用しローカル開発環境を作成することができた。
  • ローカル環境でHello Worldを出力するサービスを構築することができた。
  • ローカルでの開発を参照すると簡単に構築できる。
  • 簡単に構築できるのなら、こんな記事不要では・・・?

参考

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?