カスタム ドメインを使用した AWS でのマルチリージョン サーバーレス デプロイ


この投稿では、the article で積極的に使用している Serverless FrameworkFINN を拡張し、カスタム ドメインと複数のリージョンを使用してサービスを実装する方法を説明します.

サーバーレスとは​​?



サーバーレスは、使用が必要な場合にのみバックエンド サービスを提供する方法です (この場合: AWS Lambda ). Serverless Framework で自動スケーリング アプリ用のゼロ フリクション開発ツールとして説明されている AWS Lambda を使用します.

サービスを AWS Lambda にデプロイし、サービス用の安静な API (選択) を作成するだけです.カスタム ドメインは、展開のどの段階にもアタッチできます.

手順



次に、関連するカスタム ドメインを使用して、アプリケーションを stagingproduction の両方の環境にデプロイしましょう.

最終的に、 Europe (eu-central-1)US East (us-east-1) の両方のリージョンに、 latency に基づくルーティング設定で 4 つのデプロイが作成されます.
  • ドメイン: stg-multi-region.saral.dev ステージ: staging リージョン: eu-central-1
  • ドメイン: stg-multi-region.saral.dev ステージ: staging リージョン: us-east-1
  • ドメイン: multi-region.saral.dev ステージ: production リージョン: eu-central-1
  • ドメイン: multi-region.saral.dev ステージ: production リージョン: us-east-1

  • 1) サーバーレス プラグインをインストールする



    すでに installed serverless であると仮定します.
    カスタム ドメインを管理するには、 serverless-domain-manager をインストールします.

    yarn add -D serverless-domain-manager
    


    次に stage manager をインストールします.

    yarn add -D serverless-stage-manager
    


    2) serverless.yml をセットアップする



    これはほんの一例です.

    service: multi-region-service
    
    app: myapp
    org: myorg
    
    frameworkVersion: '2'
    
    provider:
      name: aws
      endpointType: REGIONAL
      runtime: nodejs14.x
      memorySize: 256
      stage: ${opt:stage, 'staging'}
      region: ${opt:region, 'eu-central-1'}
      tags:
        author: saral.dev
    
    custom:
      domains:
        production: multi-region.saral.dev
        staging: stg-multi-region.saral.dev
      environments:
        staging: staging
        production: production
      customDomain:
        domainName: ${self:custom.domains.${self:provider.stage}}
        basePath: ''
        stage: ${self:provider.stage}
        createRoute53Record: true
        endpointType: 'regional'
        certificateRegion: ${opt:region, 'eu-central-1'}
        route53Params:
          routingPolicy: latency
      stages:
        - staging
        - production
    
    plugins:
      - serverless-domain-manager
      - serverless-stage-manager
      - serverless-offline
    


    3) リージョンを含むドメインを作成する


  • stg-multi-region.saral.dev リージョンに eu-central-1 を作成します.

  • serverless create_domain --stage staging
    


    また

    serverless create_domain --stage staging --region eu-central-1
    


  • stg-multi-region.saral.dev リージョンに us-east-1 を作成します.

  • serverless create_domain --stage staging --region us-east-1
    


  • multi-region.saral.dev リージョンに eu-central-1 を作成します.

  • serverless create_domain --stage production
    


    また

    serverless create_domain --stage production --region eu-central-1
    


  • multi-region.saral.dev リージョンに us-east-1 を作成します.

  • serverless create_domain --stage production --region us-east-1
    


    4) サービスを AWS にデプロイする


  • staging リージョンに eu-central-1 をデプロイします.

  • serverless deploy --stage staging
    


    また

    serverless deploy --stage staging --region eu-central-1
    


  • staging リージョンに us-east-1 をデプロイします.

  • serverless deploy --stage staging --region us-east-1
    


  • eu-central-1 リージョンに本番環境をデプロイします.

  • serverless deploy --stage production
    


    また

    serverless deploy --stage production --region eu-central-1
    


  • production リージョンに us-east-1 をデプロイします.

  • serverless deploy --stage production --region us-east-1
    


    既存の Edge サービスを Regional に変換する方法



    デフォルトでは、サーバーレスはリージョン エンドポイントをデプロイしません. serverless.yml に次のような設定があるとします.

    customDomain:
        domainName: ${self:custom.domains.${self:custom.stage}}
        basePath: ''
        stage: ${self:custom.stage}
        createRoute53Record: true
    


    マルチリージョンの変更を行う前に、まず次のコマンドを実行してカスタム ドメインを削除する必要があります.現時点では、エンドポイント タイプを変更することはできないためです.

    serverless delete_domain --stage staging
    serverless delete_domain --stage production
    


    その後、上記の手順 3 と 4 を開始できます.

    残念ながら、展開が完了するまでダウンタイムが発生します.


    リージョンをラムダに記録する場合は、環境変数 AWS_REGION を AWS Lambda 経由で利用できます.したがって、 console.log(process.env.AWS_REGION) で印刷できます. Serverless Dashboard でデプロイメントを確認することもできます.

    投稿を楽しんでいただければ幸いです.愛を示すことを忘れないでください. :)