カスタムドメインとSSL証明書の設定
本章では、前章で開発した引用アプリケーションにカスタムドメインを設定します。AWS Route53とAmazon Certificate Manager (ACM)を連携させた設定プロセスについて詳細に説明します。
技術要件
- Ubuntu 16.04/Windows/macOS
- Pipenvツール
- ZappaおよびPython開発パッケージ
- 独自ドメイン
- AWSアカウント
AWS Route53でのドメイン構成
- AWSコンソールからRoute53サービスにアクセス
- 新規ホストゾーンの作成を選択
- NSレコードを取得し、ドメインプロバイダ(GoDaddyなど)のDNS設定を更新
ACMによるSSL証明書発行
Wildcard証明書の発行手順:
- US EastリージョンでACMコンソールを開く
- DNS検証方式を選択
- 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"]
}
}
}