途中まで書いた記事が全部消えた……。ショック。
しかも、少し時間を置いていたからどんな感じで書き進めていたのか全く覚えていない。
消えてしまったものは仕方ない。仕事も落ち着いた&ようやく立ち直ったので、また 1 から書き残しますか。
CentOS 系の最新バージョンである CentOS 8 に、AWS (Amazon Web Service) Lambda + DynamoDB のサーバーレスアプリケーションを Go 言語で開発するための環境を構築するメモ。第 3 回。
全てローカル環境で開発、動作確認が行えるよう構築するのが目的。必要なアプリケーション等のインストールはインターネット経由で行います。流れは以下のとおりです。
- CentOS 8 のインストール
- Go 言語のインストール
- Docker のインストール
- AWS SAM CLI のインストール
- DynamoDB Local の導入
- Visual Studio Code のインストール
ここで残すのは、Lambda 関数を Go 言語で作成し、ブラウザから API を叩いて実行するまでです。全てローカルで実行します。
では、#4 いきます。
AWS SAM CLI のインストール
AWS SAM とは、Amazon Web Service Serverless Application Model の略で、AWS 上でサーバーレスアプリケーションを構築するためのフレームワークです。
AWS SAM をコマンドラインで扱うためのツールが AWS SAM CLI になります。これを用いることで、ローカル環境で Lambda を実行できるようになります。
AWS CLI のインストール
AWS SAM CLI のインストールには pip を利用するため、Pytyon3 が必要です。
ここまでの当ブログの記事のとおりに進めていれば、Python3 はインストールされています。しかし、pip というコマンドは存在しません。代わりに pip3 を使用します。
なお、pip3 でのインストールをルートユーザーで行おうとすると警告が出ます。一般ユーザーでインストールを行う場合は --user オプションの付与が必要です。
$ pip3 install awscli --user
AWS CLI の設定
AWS CLI のインストールが完了したら、リージョン等の設定を行います。複数の設定をプロファイルとして保存できます。
$ aws configure --profile=local AWS Access Key ID [None]: dummy AWS Secret Access Key [None]: dummy Default region name [None]: ap-northeast-1 Default output format [None]: json
AWS SAM CLI のインストール
続いて、AWS SAM CLI をインストールします。AWS CLI と同様に --user オプションを付与します。
$ pip3 install aws-sam-cli --user
プロファイルの切り替えは AWS_PROFILE 環境変数で行います。また、実行時にプロファイルを指定することができます。;
$ export AWS_PROFILE=local
テンプレートの作成
環境が整ったら、AWS SAM CLI を使用して Lambda 関数のテンプレートを作成します。お馴染みの hello world です。
今回は Go 言語の Lambda 関数を作成するので、ランタイムに go1.x を指定します。
以下のコマンドを実行することで、カレントディレクトリに --name で指定したディレクトリでテンプレートが作成されます。
テンプレートの作成は対話形式で行われます。今回は簡単な hello world を作成します。
$ sam init --runtime go1.x --name hello-world Which template source would you like to use? 1 - AWS Quick Start Template 2 - Custome Template Location Choice: 1 Cloning app templates from https://github.com/awslabs/aws-sam-cli-app-templates.git AWS quick start application templates: 1 - Hello World Example 2 - Step Functions Sample App (Stock Trader) Template selection: 1 ----------------------- Generating Application: ----------------------- Name: hello-world Runtime: go1.x Dependency Manager: mod Application Template: hello-world Output Directory: . Next steps can be found in the README file at ./hello-world/README.md
その他にどんな言語でテンプレートを作成可能かは、以下のコマンドで確認できます。
$ sam init --help
Lambda 関数の実行
AWS SAM CLI でテンプレートを作成したら、そのフォルダに移動して以降の作業を行います。
$ cd hello-world
テストの実行
AWS SAM CLI で作成されたテンプレートには、テスト実行用の go ファイルも作成されています。以下のコマンドでテストを実行できます。
$ go test ./hello-world ok _/home/user/hello-world/hello-world 0.006s
Lambda 関数のビルド
次に、go ファイルをコンパイルします。
作成されたテンプレート直下には、ビルド用に Makefile が作成されています。従って、ビルドは make 一発です。
$ make sam build Building function 'HelloWorldFunction' Running GoModulesBuilder:Build Build Succeeded Built Artifacts : .aws-sam/build Built Template : .aws-sam/build/template.yaml Commands you can use next ========================= [*] Invoke Function: sam local invoke [*] Deploy: sam deploy --guided
Lambda 関数の実行
まずは実行できることを確認したいので、Web API として実行し、ブラウザからアクセスして確認します。
$ sam local start-api Mounting HellowWorldFunction at http://127.0.0.1:3000/hello [GET] You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. You only need to restart SAM CLI if you update your AWS SAM template yyyy-MM-dd hh:mm:ss * Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)
Running とでたら、curl かブラウザで確認します。
作成されたテンプレートでは、アクセスのあった IP アドレスに対してこんにちはします。
$ curl http://localhost:3000/hello Hello, xxx.xxx.xxx.xxx
参考
AWS SAM CLI のインストールと Lambda 関数の実行にあたり、以下のサイト様を参考にさせていただきました。
0 件のコメント:
コメントを投稿