はじめに
Cloudfront + S3 + APIGateway + Lambda を使い、初めてサーバレス環境を構築しました。
自身の備忘録として記述しますが、どなたかのお役に立てたら光栄です。
(不足が多々あるかと思いますがご容赦ください!)
※本記事は以下の「サーバレス環境構築(CloudFront+S3)」に続く作業となります。
https://qiita.com/mtsunezawa/private/4c1cdfa8f569d5523d2b
構成について
- CloudFront Functions を利用し、特定のIPアドレスのみアクセスを許可
- 静的コンテンツは S3 Bucket へ保存
- 動的コンテンツは API Gateway を利用
- Lambdaはデフォルトの"Hello Lambda" を利用
今回は、APIGatewayとLambda関数を構築したいと思います。
環境構築
①Lambda構築
-
「関数の作成」画面となるので、以下を設定。その他の項目についてはデフォルトままとする。
・「一から作成」を選択
・関数名: ※任意の関数名を入力
-
関数が正常に作成された後、index.mjsの内容を修正します。
※ 'Hello from Lambda!' を'Hello from Lambda-AAA!' に修正しています。
index.mjs 修正後
export const handler = async (event) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda-AAA!'),
};
return response;
};
- 変更後、「Deploy」をクリックする。
※以下はDeployクリック後の画面
以上でLambda-Aの構築は完了です。
同様にLambda-Bを構築し、Lambdaの構築は完了となります。
(手順は上記を読み替えてください。)
②APIGateway の構築
- APIGatewayへ移動し「API」を選択します。
APIタイプは「REST API」とし構築をクリック
- 作成画面が表示されるので以下を選択
・REST
・新しいAPI
・API名: ※任意の名称
・説明: ※任意
・エンドポイントタイプ:リージョン
- 作成後、リソースやステージを作成します。
リソースを表示させ、アクション → リソースの作成をクリックします。
- 新しい子リリースのページが開くので以下を入力し「リソースの作成」をクリックします。
・リソース名: ※任意(本記事ではLambda-Aとしています)
・リソースパス: ※任意(本記事では自動入力された値をそのまま利用します)
- lambda-aリソースが作成されます。
「lambda-a」をクリックし、アクション → メソッドの作成をクリックします。
「lambda-a」の下にプルダウンが表示されるので「GET」を選択し、横のチェックマークをクリックします。
- セットアップ画面が表示されるので、以下を入力し「保存」をクリックします。
・統合タイプ:Lambda関数
・Lambdaプロキシ統合の利用:チェックしない
・Lambdaリージョン:ap-northeast-1
・Lambda関数:lambda-A (※←は上記で作成したLambda関数名を指定)
・デフォルトタイムアウトの使用:チェックする
保存をクリックすると、以下のような権限追加の確認が表示されるので、OKをクリックしてください。
作成されました
以上で「lambda-a」用のリソースが作成できました。
同様の手順でlambda-b用のリソースも準備してください。
(手順は上記を参考に作成してください)
lambda-b作成後は以下のようになります。
- 次に「APIのデプロイ」を実施します。
リソースのアクションから「APIのデプロイ」をクリックします。
- APIのデプロイ画面が表示されるので、以下を入力し「デプロイ」をクリックします。
・デプロイされるステージ:「新しいステージ」を選択
・ステージ名: ※任意(今回はtestを設定)
ステージが作成され「URLの呼び出し」が作成されます。
このURLに上記でリソースとして作成した「/lambda-a」を付け加えてアクセスしてみます。
Lambda-A作成時に設定した「Hello from Lambda-AAA!」が返ってきているのが確認できます。
lambda-bも同様に「Hello from Lambda-BBB!」が返ってくるはずなので確認してください。
以上でAPIGatewayとLambdaが連携するようの構築は完了となります。
次回以降でCloudFrontとAPIGatewayの連携を設定したいと思います。