見出し画像

非エンジニアPdMがAWSに挑戦!LambdaとAPI Gateway連携の仕組みを理解してみた

最近、クラウド技術の進化は本当に目覚ましいものがありますね。特にAWS(Amazon Web Services)は、その豊富なサービス群で開発者にとって欠かせないプラットフォームとなっています。

今回の記事は、非エンジニアのPdM(プロダクトマネージャー)が、自らも開発に関わった「TechReport」というプロダクトを例に、AWSのLambdaとAPI Gatewayの仕組みを理解し、簡単なAPI構築に挑戦した内容をまとめたものです。

普段はプロダクトの企画や戦略を担当している私が、なぜAWSの仕組みを理解する必要があったのか?その背景と、試行錯誤を重ねながら理解を深めていく過程を、ぜひ最後までお付き合いください!


1. 非エンジニアPdM、「TechReport」をきっかけにAWSに触れる

エンジニアとともに「TechReport」というプロダクトを開発する中で、AWSのインフラを利用してシステムが構築しました。
そこで、非エンジニアのPdMである私も、AWSの仕組みを少しでも理解したいと考え、エンジニアにこの機会を作ってもらいました。

正直、AWSの専門用語が飛び交う世界は少しハードルが高く感じていましたが、エンジニアのサポートを受けながら、一つずつ理解を深めていくことにしました。

今回の記事は、私がAWSの仕組みを理解する過程と、簡単な実装デモを体験した記録です。

2. AWS CDKとは?なぜ使うのか?

まず最初にエンジニアから教わったのが、AWS CDK (Cloud Development Kit) というツールでした。
AWSのリソースを管理する方法は様々ですが、GUIでポチポチ操作する方法は、手軽な反面、設定ミスやリソースの管理が煩雑になるというデメリットがあるそうです。

そこで登場するのがAWS CDKです。AWS CDKは、プログラミング言語 (今回はTypeScript) を用いてAWSリソースを定義・管理できるツールです。コードでインフラを記述することで、以下のメリットが得られるそうです。

可読性と保守性の向上: コードとしてインフラを記述するため、設定内容が明確になり、変更や修正が容易になります。

再利用性の向上: 共通のインフラ構成をコードとして定義し、複数のプロジェクトで使い回すことができます。

変更管理の容易化: コードの変更履歴を追跡できるため、インフラの変更管理が容易になります。

設定ミス防止: コード上で型チェックや構文チェックが行われるため、設定ミスを事前に防ぐことができます。

AWS CDKを用いることで、手作業による設定ミスを減らし、効率的なインフラ管理が実現できると考えられます。

3. LambdaとAPI Gatewayの役割

次に、API構築に不可欠なAWS LambdaAPI Gatewayについて説明を受けました。

AWS Lambda: サーバーレスでコードを実行できるサービス。今回は、HTTPリクエストに応じて "Hello World" という文字列を返す簡単な処理を実装します。

API Gateway: APIのエンドポイントを作成し、リクエストをLambdaにルーティングするサービス。外部からのリクエストを受け付け、Lambda関数を呼び出す役割を担います。

Lambdaだけでは外部からアクセスできないため、API Gatewayを通してアクセスする必要があるそうです。
API Gatewayは、Lambdaへの入り口として機能し、リクエストの振り分けや認証などの役割も担います。

4. 実際にAPIを構築してみよう!

エンジニアに教えてもらいながら、AWS CDKを使って、LambdaとAPI Gatewayを連携させる手順を試しました。

まず、AWS CDKプロジェクトを作成し、必要なライブラリをインストールしました。次に、以下のようなTypeScriptのコードを記述します。

import * as cdk from 'aws-cdk-lib';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as apigw from 'aws-cdk-lib/aws-apigateway';

export class AwsTestStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // API Gatewayの作成
    const api = new apigw.RestApi(this, 'TestApi');

    // Lambda関数の作成
    const helloLambda = new lambda.Function(this, 'HelloLambda', {
      runtime: lambda.Runtime.NODEJS_16_X,
      handler: 'index.handler',
      code: lambda.Code.fromInline(`
        exports.handler = async (event) => {
            return {
              statusCode: 200,
              body: JSON.stringify({ message: 'Hello World' }),
            };
          };
        `),
    });

    // API GatewayにLambdaを統合
    const helloResource = api.root.addResource('hello');
    helloResource.addMethod(
      'GET',
      new apigw.LambdaIntegration(helloLambda)
    );
  }
}

このコードでは、以下の処理を行っているそうです。


  1. API Gateway (RestApi) を作成します。

  2. Lambda関数 (Function) を作成します。

    • 実行環境としてNode.js 16.xを指定します。

    • インラインでLambda関数のコードを記述します。

  3. API Gatewayに /hello というパスを追加し、GETリクエストを受け付けたらLambda関数を実行するように設定します。


このコードを cdk deploy コマンドでデプロイすると、AWS上にAPI GatewayとLambda関数が作成され、APIが利用可能になるという事でした。

5. 認証の仕組みとAPI Gatewayの役割

APIを公開する際には、認証の仕組みを導入することが重要です。API Gatewayは、様々な認証方式に対応しており、APIへのアクセスを制御することができます。

例えば、APIキーを設定することで、APIにアクセスできるユーザーを制限したり、OAuth 2.0などの認証プロトコルを実装することで、より高度なアクセス制御を行うことも可能です。

エンジニアによると、API Gatewayは、APIへの入り口として、認証、ルーティング、リクエストの制御などの重要な役割を担っているそうです。

6. 今後の展望:API Gatewayを活かして

今回の挑戦を通じて、AWS LambdaとAPI Gatewayの基本的な仕組みを理解することができました。
特に、API Gatewayがあることで、単にLambdaを外部に公開するだけでなく、様々な仕組みが作れる可能性に気づきました。

例えば、
Webアプリ版の「TechReport」をLINEアプリでも再現できるのではないか?
というアイデアが生まれました。

LINEのメッセージから特定のキーワードをトリガーにして、API Gatewayを通じてLambda関数を呼び出し、レポートを生成してLINEに返すような仕組みも、もしかしたら実現できるかもしれません。

今後は、今回の経験を活かし、API Gatewayの機能をさらに深掘りし、プロダクト開発に活かしていきたいと考えています。

7. まとめ:振り返り

今回の挑戦を通じて、非エンジニアの私でも、エンジニアのサポートを受ければAWSの基本的な仕組みを理解し、簡単なAPIを構築できることを実感しました。
AWS CDKを用いることで、インフラ構築のコード化が容易になり、効率的なAPI開発が可能になると感じました。
API Gatewayは、APIへの入り口として、認証、ルーティング、リクエストの制御などの重要な役割を担っているということも理解できました。

いいなと思ったら応援しよう!

Sumi(スミ)2020@SaaSプロダクト・PdM、新規事業・事業開発
よろしければ応援お願いします! いただいたチップはプロダクト開発の開発費に使わせていただきます!