スポンサーリンク

2021年6月14日月曜日

CentOS 8 に AWS Lambda + DynamoDB + Go言語の開発環境を構築する ~ #4 AWS SAM CLI のインストール

 途中まで書いた記事が全部消えた……。ショック。
しかも、少し時間を置いていたからどんな感じで書き進めていたのか全く覚えていない。

 消えてしまったものは仕方ない。仕事も落ち着いた&ようやく立ち直ったので、また 1 から書き残しますか。

 CentOS 系の最新バージョンである CentOS 8 に、AWS (Amazon Web Service) Lambda + DynamoDB のサーバーレスアプリケーションを Go 言語で開発するための環境を構築するメモ。第 3 回。
全てローカル環境で開発、動作確認が行えるよう構築するのが目的。必要なアプリケーション等のインストールはインターネット経由で行います。流れは以下のとおりです。

  1. CentOS 8 のインストール
  2. Go 言語のインストール
  3. Docker のインストール
  4. AWS SAM CLI のインストール
  5. DynamoDB Local の導入
  6. 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 件のコメント:

コメントを投稿