はじめに
AWSでは、API GatewayのステージとLambdaのバージョン・エイリアスを活用することで、同一リソースを使用しながら開発環境と本番環境を簡単に切り分けることができます。
AWSの認定資格でもこの手の問題がよく出題されます。
認定資格の試験勉強の中で、机上ではできることを理解していましたが、今回は実際にありそうなケースを想定してハンズオンを行います。
今回のハンズオンでは、「Lambdaの性能改善を開発環境で行い、本番環境に影響を与えずに変更をテストし、必要に応じて本番環境に反映する」といったシナリオを想定して実施してみます
環境構成
今回のハンズオンの構成です。Lambda関数を2つ記載していますが、実際は一つのLambda関数を利用しています。
ハンズオンの概要
1. Lambda関数の作成と本番環境用のエイリアスを作成と2. API Gatewayの作成で本番想定のAPIを構築します。
その後、Lambdaで新しいエイリアスを作成し、本番想定のAPIを新しいエイリアスに切り替えていきます。
1. Lambda関数の作成と本番環境用のエイリアスを作成
Lambda関数を作成します。以下の内容で作成します。
- 関数名:demo-alias
- ランタイム:Node.js 20.x
- タイムアウト時間:3秒→15秒
- コード:
export const handler = async (event) => {
// 10秒の処理を想定
sleep(10000);
// 復帰パラメタの定義
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
return response;
};
// sleep関数
function sleep(waitMsec) {
var startMsec = new Date();
console.log("処理開始")
while (new Date() - startMsec < waitMsec);
console.log("処理終了")
}
コードをコピペした後に「Deploy」をしてください。
次にバージョンを作成します。バージョンタブを選択して、「新しいバージョンを発行」を選択してください。
説明を入力して、「発行」を選択します。
エイリアスを作成します。エイリアスタブを選択して、「エイリアスを作成」を選択してください。
エイリアスの名前、バージョンは先ほど作成したバージョンを選択します。入力が完了したら「保存」を選択してください。
2. API Gatewayの作成と本番環境用のステージを作成
新しいREST APIを作成します。任意の名前でREST APIを作成してください。
メソッドの作成を選択してください。
メソッドの設定をします。以下を入力して保存を選択してください。
- メソッド:GET
- 統合タイプ:Lambda 関数
- Lambdaプロキシ統合:ON
- Lambda関数:arn:aws:lambda:ap-northeast-1:************:function:demo-alias:Release_01
- 統合のタイムアウト:29000
APIをデプロイします。「APIをデプロイ」を選択してください。
ステージは新しいステージを選択し、ステージ名は「prod」と入力して、デプロイします。
こちらでAPIが実行可能になりました。URLをコピーしてください。
3. APIの実行
任意のAPIクライアントで先ほどのURLに対しGETをしてください。10秒ほどでレスポンスが返ってきます。
次から同じAPI GatewayとLambdaを使って開発用のAPIを作成します。
4. Lambda関数の更新と開発環境用のエイリアスを作成
コードを以下に更新します。性能の改善を想定してsleep(10000)をsleep(3000)、処理時間を10秒から3秒に修正します。修正後、「Deploy」を選択してください。
- コード:
export const handler = async (event) => {
// 3秒の処理を想定
sleep(3000);
// 復帰パラメタの定義
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
return response;
};
// sleep関数
function sleep(waitMsec) {
var startMsec = new Date();
console.log("処理開始")
while (new Date() - startMsec < waitMsec);
console.log("処理終了")
}
1. Lambda関数の作成と本番環境用のエイリアスを作成と同様にバージョンとエイリアスを作成します。
5. API Gatewayの開発環境用のステージを作成
先ほど作成したGETのAPIを編集します。
開発用に作成したエイリアスに切り替えます。
デプロイします。ステージは新しく「dev」を作成してください。
開発環境用APIが実行可能になりました。URLをコピーしてください。
6. APIの実行
任意のAPIクライアントで開発環境のURLに対しGETをしてください。3秒ほどでレスポンスが返ってきます。
7. API Gatewayの本番環境用のステージにデプロイ
性能が改善されたことを確認したので、同じ設定で本番のステージにデプロイします。
8. APIの実行
任意のAPIクライアントで本番環境どのURLに対しGETをしてください。本番環境でも3秒ほどでレスポンスが返ってくるようになりました。
さいごに
本ハンズオンではAPI GatewayのステージとLambdaのバージョン・エイリアスを活用して、同一リソース内で開発環境と本番環境を切り分けながら、本番環境へのリリースをしました。
ハンズオンでは触れませんでしたが、エイリアス作成時に重みづけの設定ができたので、一部を新バージョンへ切り替えるといったこともできそうです。
API GatewayのステージとLambdaのバージョン・エイリアスを使った問題ははAWS Certified Developer – Associateの問題にもよく出てきますので、理解を深めて認定資格を取得してみましょう!