tech.chakapoko.com
Home / AWS / API Gateway

[AWS][API Gateway]API Gatewayで独自ドメインを利用する

前提条件

  • AWS CLIがインストールされ、適切に設定されている。
  • 外部DNSサービスを利用してドメインを管理している。(本記事では example.com とします)
  • SSL証明書はAWS Certificate Manager(ACM)で発行済み。

AWS Lambdaのセットアップ

コードを準備

以下は、簡単なPython Lambda関数の例です。

import json

def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'body': json.dumps('Hello, World!')
    }

このコードをlambda_function.pyとして保存します。

Lambda関数を作成

次のコマンドを使用して、Lambda関数を作成します。

aws lambda create-function \
    --function-name MyWebApp \
    --runtime python3.9 \
    --role <IAM_ROLE_ARN> \
    --handler lambda_function.lambda_handler \
    --zip-file fileb://function.zip
  • --function-name: 作成するLambda関数の名前。
  • --runtime: 使用するランタイム。
  • --role: IAMロールのARN(Lambdaが必要な権限を持つロール)。
  • --handler: Lambda関数のエントリーポイント。
  • --zip-file: 関数コードを含むZIPファイルのパス。

function.zipには、lambda_function.pyを圧縮して作成します。

zip function.zip lambda_function.py

API Gatewayのセットアップ

API Gatewayの作成

API Gatewayを作成してLambda関数を公開します。

aws apigatewayv2 create-api \
    --name MyWebAppAPI \
    --protocol-type HTTP \
    --target <LAMBDA_FUNCTION_ARN>
  • --name: APIの名前。
  • --protocol-type: HTTPまたはWebSocket。
  • --target: 接続するLambda関数のARN。

Lambda権限の付与

API GatewayがLambda関数を実行できるように権限を付与します。

aws lambda add-permission \
    --function-name MyWebApp \
    --statement-id apigateway-access \
    --action lambda:InvokeFunction \
    --principal apigateway.amazonaws.com
  • --statement-id: 権限を識別する一意の名前。
  • --action: 実行可能なアクション。
  • --principal: 許可するプリンシパル。

カスタムドメインの設定

SSL証明書をAPI Gatewayに関連付け、カスタムドメインを設定します。

aws apigatewayv2 create-domain-name \
    --domain-name example.com \
    --domain-name-configurations CertificateArn=<ACM_CERTIFICATE_ARN>
  • --domain-name: 設定するカスタムドメイン名。
  • --domain-name-configurations: ACM証明書のARNを指定。

APIマッピングの設定

カスタムドメインにAPIエンドポイントを関連付けます。

aws apigatewayv2 create-api-mapping \
    --domain-name example.com \
    --api-id <API_ID> \
    --stage $default
  • --api-id: 作成したAPIのID。
  • --stage: APIのステージ(デフォルトは$default)。

DNS設定

外部DNSサービスでドメインを管理している場合、以下の手順でDNS設定を行います。

CNAMEレコードの追加

外部DNSサービスの管理画面で、以下のCNAMEレコードを追加します。

  • 名前: example.com
  • : API Gatewayのカスタムドメインのエンドポイント

DNS設定が反映されるまで数分〜数時間かかることがあります。

動作確認

ブラウザでカスタムドメイン(例: https://example.com)にアクセスし、「Hello, World!」が表示されることを確認します。