Pythonを使用したサーバーレスWebサービス構築(Zappa活用)第3版

カスタムドメインとSSL証明書の設定

本章では、前章で開発した引用アプリケーションにカスタムドメインを設定します。AWS Route53とAmazon Certificate Manager (ACM)を連携させた設定プロセスについて詳細に説明します。

技術要件

  • Ubuntu 16.04/Windows/macOS
  • Pipenvツール
  • ZappaおよびPython開発パッケージ
  • 独自ドメイン
  • AWSアカウント

AWS Route53でのドメイン構成

  1. AWSコンソールからRoute53サービスにアクセス
  2. 新規ホストゾーンの作成を選択
  3. NSレコードを取得し、ドメインプロバイダ(GoDaddyなど)のDNS設定を更新

ACMによるSSL証明書発行

Wildcard証明書の発行手順:

  1. US EastリージョンでACMコンソールを開く
  2. DNS検証方式を選択
  3. CNAMEレコードをRoute53に自動登録

Zappaでの統合設定

{
    "dev": {
        "domain": "quote.abdulwahid.info",
        "certificate_arn": "arn:aws:acm:us-east-1:042373950390:certificate/af0796fa-3a46-49ae-97d8-90a6b5ff6784"
    }
}

AWS Lambdaでの非同期タスク実行

Zappaを活用した非同期処理の実装方法について解説します。Amazon SNSと連携したSMS配信機能を例に説明します。

非同期実行の設定

from flask import Flask
from zappa.async import task
app = Flask(__name__)

@task
def pie_作成():
    # 長時間処理の例
    return 作成完了

@app.route('/api/order/pie')
def 注文():
    pie_作成()
    return "準備中"

SNSイベントソースの設定

{
    "dev": {
        "async_source": "sns",
        "async_resources": true
    }
}

高度なZappa設定

主要設定項目

  • keep_warm:Lambdaウォーム保持
  • cors:CORS設定
  • slim_handler:大規模プロジェクト対応
  • exception_handler:エラーハンドリング

大規模プロジェクト対応

{
    "dev": {
        "slim_handler": true
    }
}

セキュリティ強化

APIゲートウェイの保護

  • APIキー認証
  • IAMポリシー
  • Lambdaオーソライザ

死信キューの設定

{
    "dev": {
        "dead_letter_arn": "arn:aws:sns:ap-south-1:042373950390:UnhandledException"
    }
}

VPC統合設定

{
    "dev_vpc": {
        "vpc_config": {
            "SubnetIds": ["subnet-1b10a072"],
            "SecurityGroupIds": ["sg-892c4be0"]
        }
    }
}

タグ: AWS Route53 Amazon Certificate Manager Zappa 非同期処理 APIゲートウェイ

6月9日 20:08 投稿