20m61 / Sonotecture

0 stars 0 forks source link

AWS CDKによるインフラ基盤の作成 #2

Closed 20m61 closed 2 months ago

20m61 commented 2 months ago

AWS CDKを使って、必要なインフラリソース(Lambda、API Gateway、S3など)を定義・デプロイします。

  1. AWS CDKプロジェクトを作成。
  2. Lambda関数の定義(音楽生成用APIなど)。
  3. S3バケットの作成(建物データや静的ファイルのホスティング)。
  4. API Gatewayを設定し、Next.jsとLambdaを連携。
  5. CDKを使用してインフラリソースをデプロイ。
20m61 commented 2 months ago

1. AWS CDKプロジェクトを作成

  1. AWS CLIとCDKをセットアップ(まだインストールしていない場合)。

    • AWS CLIをインストールし、AWSアカウントにログインするための認証情報を設定します。
    curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
    unzip awscliv2.zip
    sudo ./aws/install
    aws --version
    aws configure
    • AWS CDKをインストールします。
    npm install -g aws-cdk
  2. CDKプロジェクトの初期化

    • プロジェクトディレクトリを作成し、CDKプロジェクトを初期化します。
    mkdir sonotecture-infra
    cd sonotecture-infra
    cdk init app --language typescript

2. Lambda関数の定義(音楽生成用APIなど)

  1. Lambda関数を作成

    • lib/sonotecture-infra-stack.tsで、Lambda関数を定義します。例えば、Node.jsを使ったLambda関数を以下のように作成します。
    import * as lambda from 'aws-cdk-lib/aws-lambda';
    import { Stack, StackProps } from 'aws-cdk-lib';
    import { Construct } from 'constructs';
    
    export class SonotectureInfraStack extends Stack {
      constructor(scope: Construct, id: string, props?: StackProps) {
        super(scope, id, props);
    
        // Lambda関数の作成
        const musicGenerationFunction = new lambda.Function(
          this,
          'MusicGenerationFunction',
          {
            runtime: lambda.Runtime.NODEJS_LATEST,
            handler: 'index.handler',
            code: lambda.Code.fromAsset('lambda'), // 'lambda'ディレクトリにハンドラコードを配置
          },
        );
      }
    }
  2. Lambda関数のハンドラコード作成

    • プロジェクトのルートディレクトリにlambdaフォルダを作成し、その中にindex.jsを作成します。簡単なサンプルコードとしては以下のようにします。
    exports.handler = async function(event) {
     console.log("EVENT: \n" + JSON.stringify(event, null, 2));
     return {
       statusCode: 200,
       body: JSON.stringify({ message: "Hello from Lambda!" }),
     };
    };

3. S3バケットの作成(建物データや静的ファイルのホスティング)

  1. S3バケットを定義

    • lib/sonotecture-infra-stack.tsで、S3バケットを追加します。建物データや静的ファイルをホスティングするために使用します。
    import * as s3 from 'aws-cdk-lib/aws-s3';
    
    // S3バケットの作成
    const dataBucket = new s3.Bucket(this, 'SonotectureDataBucket', {
     versioned: true,
     removalPolicy: s3.RemovalPolicy.DESTROY, // スタック削除時にバケットを削除
    });

4. API Gatewayを設定し、Next.jsとLambdaを連携

  1. API Gatewayの作成とLambdaの接続

    • Lambda関数をAPI Gatewayと連携させ、クライアント(Next.js)からLambda関数にアクセスできるようにします。
    import * as apigateway from 'aws-cdk-lib/aws-apigateway';
    
    // API Gatewayを作成し、Lambda関数をエンドポイントとして指定
    const api = new apigateway.LambdaRestApi(this, 'SonotectureApi', {
     handler: musicGenerationFunction,
     proxy: false
    });
    
    // "/generate-music"というエンドポイントを作成
    const musicResource = api.root.addResource('generate-music');
    musicResource.addMethod('GET'); // GETリクエストを許可

5. CDKを使用してインフラリソースをデプロイ

  1. インフラリソースをデプロイ

    • 設定が完了したら、cdk deployコマンドを使用してインフラリソースをAWSにデプロイします。
    cdk synth  # リソースを確認
    cdk deploy # デプロイ実行
  2. APIエンドポイントの確認

    • デプロイ後、API GatewayのURLが出力されるので、Next.jsからそのURLにリクエストを送信して、Lambda関数が正しく動作するか確認します。

まとめ

これらの手順で、AWS CDKを使ったインフラ基盤が構築され、Lambda関数、S3バケット、API Gatewayの基本的なセットアップが完了します。次のステップとしては、フロントエンドからAPIを呼び出してデータをやり取りしたり、音楽生成機能をLambdaに実装していくことになります。