Giter Site home page Giter Site logo

gmsh_lambda's Introduction

概要

AWS公式リファレンス

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images-create.html#images-create-from-alt

記事 第一回 コンテナ Lambda の”いろは”、AWS CLI でのデプロイに挑戦 ! を参考に

windows10 で AWS Lambda 関数を Docker コンテナを使ってビルド & デプロイ する方法を書きました

AWS Lambda 関数を Docker コンテナを使ってビルド & デプロイ するには以下の3ステップが必要です

1.Docker イメージを作成する 2.Docker イメージAmazon ECR リポジトリ にプッシュする 3.Lambda関数Amazon ECR リポジトリ(の Docker イメージ) から ビルドする

image.png

前提条件

Docker Desktop がインストールされていること

この記事は Windows10 上で Docker を用いて操作しています。

この記事の作業はローカル環境に Docker Desktop がインストールされていることを前提で進めます。インストールされていない場合は、インストールしてから進めてください。

Amazon CLI がインストールされていること

Amazon CLI https://aws.amazon.com/jp/cli/

aws configure (初期化) が済んでいること

> aws configure
AWS Access Key ID [None]: ATI********CS
AWS Secret Access Key [None]: ***erg***sdfg***bs1sderg**
Default region name [None]: ap-northeast-1
Default output format [None]: json

実装

1.Docker イメージを作成する手順

手順1-1: 2つのテキストファイルを用意する

作業するフォルダを決めて 以下の2つのテキストファイルを作成しましょう

image.png

それぞれのファイルの中身は以下の通りとします。

import json

def handler(event, context):
    return {
        "statusCode": 200,
        "body": json.dumps(
            {
                "message": "hello world",
            }
        ),
    }
FROM public.ecr.aws/lambda/python:3.8
COPY app.py   ./
CMD ["app.handler"]  

解説 FROM 命令で public.ecr.aws/lambda/python:3.8 と ECR の AWS 公式の公開イメージを指定していますが、amazon/aws-lambda-python:3.8 のように docker hub のイメージを参照することも可能です。   COPY コマンドでローカルに配置されている Lambda 関数本体である app.py ファイルをイメージにコピーしています。そして CMD で Lambda 関数のハンドラーを渡しています。

手順1-2: Dockerfile 元にビルド

Dockerfile を元にビルドしてみましょう。 コマンド docker build -t func1 . を実行します。

> docker build -t func1 .

[+] Building 19.2s (7/7) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                                                                                                                                                      
=> => naming to docker.io/library/func1                                                                                                                                                                       

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

ビルド成功しました

image.png

手順1-3 実行してみる

docker run -it func1:latest    

image.png

手順1-4 python3 を実行してみる

2021.08.22 現在 import gmsh に失敗するので この issue に基づいて

https://gitlab.onelab.info/gmsh/gmsh/-/issues/1023

下記を実行

ENV PYTHONPATH=/usr/local/lib/python3.9/site-packages/gmsh-4.8.4-Linux64-sdk/lib/

2.Docker イメージを Amazon ECR にプッシュする手順

手順2-1: Amazon ECR に今回作成する Lambda 関数のイメージ用のリポジトリを作成します。

さて、ここから Amazon ECR に今回作成する Lambda 関数のイメージ用のリポジトリを作成します。

Amazon ECR とは Elastic Container Registry の略で Dockerのコンテナイメージを保存しておくためのレジストリで、 Dockerコンテナイメージを保存・管理・デプロイが簡単に出来ます。

image.png

手順2-2: Docker に リポジトリの URI を含めたタグを付与します。

ECR 上にリポジトリが作成されたら、リポジトリの URI を含めたタグを付与します。

docker tag func1:latest 533291615220.dkr.ecr.ap-northeast-1.amazonaws.com/func1:latest

image.png

Docker Desktop の Images に追加されます。 image.png

手順2-3:リポジトリに push する前に、ECR にログインします。

> aws ecr get-login-password | docker login --username AWS --password-stdin 533291615220.dkr.ecr.ap-northeast-1.amazonaws.com
Login Succeeded

手順2-4:リポジトリに push

リポジトリに push しましょう。

PS> docker push 533291615220.dkr.ecr.ap-northeast-1.amazonaws.com/func1:latest
The push refers to repository [533291615220.dkr.ecr.ap-northeast-1.amazonaws.com/func1]
29fe8a4ae381: Pushed 
20b4eff3dd4d: Pushing  68.11MB/92.13MB
11284767d41d: Pushing  87.48MB/199.7MB
d6fa53d6caa6: Pushed 
b09e76f63d5d: Pushed 
0acabcf564c7: Pushed 
f2342b1247df: Pushing  125.9MB/294.9MB
latest: digest: sha256:123*************************************789

push が完了すると、ダイジェストが発行されるので、覚えておく

AWS コンソールで確認すると cocker イメージが Amaxon ECR リポジトリ にアップロードされたのが確認できる image.png

3.Lambda関数に Amazon ECR リポジトリ(の Docker イメージ) から ビルドする手順

手順3-1: AWS Lambda ダッシュボードから 関数作成 ボタンをクリックする

image.png

手順3-2: コンテナイメージから作成

ここから、Lambda 関数をコンテナイメージを利用して作成していきますが、AWS Lambda のコンテナサポートで、—package-type を指定できるようになりました。

image.png

image.png

できました 今回の Lambda関数名 は, gmsh としました

image.png

手順3-3:作成された関数を実行確認

そしていよいよ実行することができます。作成された関数を実行してみましょう。

> aws lambda invoke --function-name docer_test output ; cat output

image.png

正常に返ってきました!!

gmsh_lambda's People

Contributors

sasaco avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.