忍者ブログ

ひつ(じのひよこが)プログラミングします。
お仕事や趣味で困ったこととか、何度も「あれ?どうだったかしら」と調べたりしたこととか、作ったものとか、こどものこととかを書きます
★前は週末定期更新でしたが今は不定期更新です

2024/05    04« 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  »06

URL短縮サービスを AWS の機能を使ってちょちょっと作る

必要があり、チュートリアル: Lambda と DynamoDB を使用した CRUD API の構築 - Amazon API Gatewayを試したのだが、そのままやっても面白くないので API Gateway を HTTP API じゃなくて REST API にしてみた。

この両者はできること・できないことがそれぞれあるらしい(Choosing between HTTP APIs and REST APIs - Amazon API Gateway)。接続元 IP アドレスによってアクセスを制限するには REST API じゃないと難しいようだ(特定の IP アドレスが API Gateway REST API にアクセスすることを許可する)。試しに作ってみたは良いが変な人に大量アクセスされて課金がにゃーんするのは嫌なのでアクセス制限をかけるために REST API で作ってみる。

API の中のパスは「リソースの作成」で切る

REST API では各リソースに対して各メソッドを使ってアクセスする。リソースは URL のパスで表現される。しかし、このパスはどうやって定義すれば良いのかが最初はよくわからなかった。

リソースから「リソースの作成」でこれを実施できる。各リソースを作ったらリソースに対してメソッドの作成を行えば各メソッドを実行した時に何が起こるのかを定義できる。
リソース>リソースの作成 でパスの中のディレクトリを切る

Lambda 関数にパラメータを渡す

Lambda 関数を上述の状態で実行したところ、Lambda 関数に id 等のパラメータがわたっていなかった。メソッドを設定する際に「Lambda プロキシ統合の使用」にチェックを入れなければ引数が渡らないそうだ。
Lambda プロキシ統合の使用をチェック

Lambda 関数が受け取る引数がちょっと違う

チュートリアルコンテンツのサンプル Lambda 関数は event.routeKey で分岐しているが、routeKey の値が渡ってこない(undefined になる)。その関係で以下のような感じに改変した(一部抜粋)。

  const requestKey = `${event.httpMethod} ${event.resource}`;
  try {
    switch (requestKey) {
      case "DELETE /items/{id}":

ただ、本来はメソッド毎に関数を分けるべきなんだと思う。

PR

コメント

ただいまコメントを受けつけておりません。

ブログ内検索

P R