目次

概要

カスタムドメインを使用するAPI Gateway のCloudFormationテンプレートのサンプル。

ドメインの取得

任意のドメインレジストラ、もしくは Route53 でドメインを取得しておく。

CloudFormation テンプレート

template.yml

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31

Resources:

  ...

  SampleCertificate:
    Type: 'AWS::CertificateManager::Certificate'
    Properties:
      DomainName: example.mydomain.com
      ValidationMethod: EMAIL

  DomainName:
    Type: 'AWS::ApiGateway::DomainName'
    Properties:
      CertificateArn: !Ref SampleCertificate
      DomainName: example.mydomain.com

  Mapping:
    Type: 'AWS::ApiGateway::BasePathMapping'
    Properties:
      DomainName: !Ref DomainName
      RestApiId: !Ref SampleApi
      #BasePath: sample

  SampleApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: prod
      DefinitionBody:
        swagger: 2.0
        info:
          title:
            Ref: AWS::StackName
        paths:
          /:
            get:
              x-amazon-apigateway-integration:
                httpMethod: POST  # 統合リクエストで使用されるHTTP メソッド。Lambdaの場合はPOSTを指定
                type: aws_proxy   # Lambdaプロキシ統合
                uri: !Sub "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${SampleFunction1.Arn}/invocations"
              responses: {}
          '/{id}':
            get:
              x-amazon-apigateway-integration:
                httpMethod: POST
                type: aws_proxy
                uri: !Sub "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${SampleFunction1.Arn}/invocations"
              responses: {}

  # Lambda本体
  SampleFunction1:
    Type: "AWS::Serverless::Function"
    Properties:
      FunctionName: SampleFunction1
      Runtime: python3.6
      Handler: index.handler
      CodeUri: ./src
      MemorySize: 128
      Timeout: 60
      Role: !GetAtt SampleFunction1Role.Arn

  # Lambdaのロール
  SampleFunction1Role:
    Type: "AWS::IAM::Role"
    Properties:
      RoleName: SampleFunction1Role
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: "Allow"
            Principal:
              Service: "lambda.amazonaws.com"
            Action: "sts:AssumeRole"
      Policies:
        - PolicyName: "SampleFunction1Policy"
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: "Allow"
                Action:
                  - logs:CreateLogGroup
                  - logs:CreateLogStream
                  - logs:PutLogEvents
                Resource: "*"

補足

証明書検証が済むまでは、スタックは CREATE_IN_PROGRESS 状態のままとなる。
以降のスタックオペレーションは、証明書検証 E メールの指示に応じて動作するか、CNAME レコードを DNS 設定に追加することにより、証明書リクエストを検証するまで延期される。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-certificatemanager-certificate.html

関連: 独自ドメイン名で API Gateway または EC2にアクセスする の 「ドメイン名の検証について」を参照。


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-03-20 (水) 04:11:14 (267d)