SAMを使ってテンプレートからサーバーレスな環境を構築する(その④-SAM CLI)
AWSのホームページの初心者ハンズオンにある「SAMを使ってテンプレートからサーバーレスな環境を構築する 」の内容を自分のAWSアカウントでやってみました。
ハンズオンではAWSホームページで、10本の Youtube-video でもって、翻訳 Web API を AWS Serverless Application Model (AWS SAM) を用いてテンプレートからシステムを構築します。
( 翻訳 Web API はハンズオンシリーズの前回取り扱い分 )
- SAMの概説とCloud9を使った準備作業
- 小手調べでSAMを使って、「Hello Hands on world!」Lambdaを作った後、SAMでTranslate機能をLambda関数として追加して、IAMも許可する
- API Gateway を構成に追加後、DynamoDBにログを書き込むようにLambda関数を連携させる
- SAM CLIも使ってみる。最後にリソースを削除する。
今回の投稿は4パート目で、SAM CLI を使ってみて、最終的にリソースの後始末(削除)をします。
SAM CLI を使ってみる
AWS SAM Command Line Interface (CLI)とは?
AWS SAM をローカル環境で実行するために、便利な機能を提供するCLI
(Dockerインストールが必要)
■テンプレートを使って、サーバアプリケーションを対話形式で初期化 ■
sam init
■ ローカル環境でビルド ■
sam build
■ AWS環境へデプロイ ■
sam deploy –guided
■ SAMテンプレートの事前検証 ■
sam validate
■ LambdaローカルエンドポイントやAPIエンドポイントを起動し、実行テスト可能 ■
sam local start-lambda / start-api
AWS SAM CLI インストール
SAM CLI のインストールについては、「sam cli install」で検索して見る。
ステップ 1: AWS アカウントを作成する
ステップ 2: IAM 許可と AWS 認証情報を設定する
ステップ 3: Docker をインストールする (オプション)
以上までは、Cloud9の環境では適用済み
ステップ 4: AWS SAM CLI をインストールする から実施していく。
1.AWS SAM CLI zip ファイルを任意のディレクトリにダウンロードします。
wget https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip
2.以下のコマンドを使用してハッシュ値を生成することによって、ダウンロードしたインストーラファイルの
整合性と信頼性を検証します。
miko:~/environment $ sha256sum aws-sam-cli-linux-x86_64.zip
c149433bf12104b82c814fdfc1a83fb291672d771214aa0ff73652169c8f5ca0 aws-sam-cli-linux-x86_64.zip
※ https://github.com/aws/aws-sam-cli/releases/tag/v1.35.0 にある、ハッシュ値で確認する。
3.インストールファイルを sam-installation/ サブディレクトリに解凍します。
unzip aws-sam-cli-linux-x86_64.zip -d sam-installation
4.AWS SAM CLI をインストールします。
miko:~/environment $ sudo ./sam-installation/install
Found preexisting AWS SAM CLI installation: /usr/local/aws-sam-cli/current. Please rerun install script with --update flag.
5.インストールを確認します。
miko:~/environment $ sam --version
SAM CLI, version 1.33.0
※ 上記、AWSドキュメントにアップグレードとアンインストールの仕方も載っている
テンプレートを使って、サーバアプリケーションを対話形式で初期化
下記コマンド実行の結果
template.yaml
app.py
が出来上がっている。
sam init でコマンド起動
1 – AWS Quick Start Templates
1:ZIP形式で指定した
Python3.7 にした。
※ Python3.9は、AWS SAM CLI
のサポート対象外(2021.11.20)
プロジェクト名はデフォルト「sam-app」にした。(ENTERをクリック)
1 – Hello World Example を指定
ローカル環境でビルド
以下のコマンドを投入
miko:~/environment $ cd sam-app
miko:~/environment/sam-app $ sam validate
(SAMテンプレートの事前検証)
miko:~/environment/sam-app $ sam build
※ Python3.9 ではここで失敗する。
AWS環境へデプロイ
sam deploy –guided
Stack Name は「sam-app」のまま(ENTER をクリック)
リージョンは東京のまま(ENTER をクリック)
変更点を確認してからデプロイする(y を入力)
SAMに必要なIAMロールを追加するか(y を入力)
samconfig.toml に設定内容を保存するか(y を入力)
デプロイ結果を確認
API Gateway と連携している。
コードも登録されている。
Lambda関数の動作を確認
AWS Lambda をエミュレートするローカルエンドポイントを起動し、プログラムからAWS CLI または SDK を使用して、 Lambda 関数をローカルで呼び出します。
ローカルのテスト環境で、デプロイする前にLambda関数の動作を確認できます。
「sam local start-lambda」で検索
「sam local start-lambda」を実行
「aws lambda invoke –function-name “HelloWorldFunction” –endpoint-url “http://127.0.0.1:3001” –no-verify-ssl out.txt」を実行
Lambda関数に対するローカルHTTPサーバを作成することで、API Gatewayを経由した動作確認をローカル環境で行うことができます。
「sam local start-api」でAWSドキュメントを確認する
入力待ちのターミナルは「Ctrl+C」で入力待ちをキャンセルして、
上部ターミナルから「sam local start-api」を実行し、そのローカルエンドポイントに対して、下部ターミナルから、curlコマンドで要求を投げると、
curlコマンドに対して、「hello world」が返されてる。
build 実行後に、デプロイせずに、ローカルでテストする
以上で、SAM CLI を使ったコマンドによるサーバレス環境の生成が試すことができました!!
これで、ハンズオンストーリを完走できましたが、最後にリソースの削除の仕方を載せておきます。
リソース削除
① Cloud9を削除
② S3バケットを削除
③ Lambda
ナビゲーションの「アプリケーション」で、Cloudformationのスタックを削除する
※ 次の画面にあるように、すべて削除して良いスタックかどうか分からないので、確認しながら削除する。
※ 緑枠のスタックは、今回の作業で発生したものではないので削除しない。
※ 下記2つのスタックは、ベースとなっているVPCとEC2だったので、削除したら大変問題であった!!
④ DynamoDB テーブル削除
※ 今回作成したテーブル:translate-history-2 は削除されている
以上で、AWSのホームページの初心者ハンズオンにある「SAMを使ってテンプレートからサーバーレスな環境を構築する 」 が後始末も含めて、完遂です!!