Help us understand the problem. What is going on with this article?

AWS CDKでSwaggerからAPI Gatewayを構築する

概要

AWS CDKでは、API GatewayのSwaggerが対応されてなくてハマったのでメモ。

https://github.com/aws/aws-cdk/issues/723

API Gatewayのリソース定義

import cdk = require('@aws-cdk/aws-core');
import apigateway = require('@aws-cdk/aws-apigateway');

export class ApigatewayStack extends cdk.Stack {
    constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
        // Rest API
        const api = new apigateway.RestApi(this, 'ApiGateway', {
            endpointConfiguration: {
                types: [ apigateway.EndpointType.REGIONAL ],
            },
            restApiName: 'API',
        });

        // Api Gateway Stage
        const stage = new apigateway.Stage(this, 'ApiGatewayStage', {
            deployment: new apigateway.Deployment(this, 'ApiGatewayDeployment', { api }),
            stageName: 'Stage'
        });

        // Usage Plan
        api.addUsagePlan('ApiGatewayUsagePlan', {
            apiStages: [
                { api, stage },
            ],
            description: 'UsagePlan for API',
            name: 'UsagePlan',
        });
    }
}

SwaggerのJsonファイルをS3にアップロード

S3バケットのJSONファイルを参照してAPI Gatewayのリソースを構築するので先にアップロードしておく。
事前に、SwaggerのJSONファイルをredoc-cliなどで生成しておく。

new s3deploy.BucketDeployment(this, 'DeploySwagger', {
    sources: [s3deploy.Source.asset(`${destDir}`)], // JSONファイルのディレクトリ
    destinationBucket: s3.Bucket.fromBucketName(this, 'SwaggerBucketName', 'Bucket'), // アップロード先のバケット
    destinationKeyPrefix: `swagger/`,
});

SwaggerのJSONファイルからAPI Gatewayのリソース生成

Cfnリソースを利用する。bodyプロパティにSwaggerのJSONファイルのパスを指定する。

const cfnApi = api.node.defaultChild as apigateway.CfnRestApi;

cfnApi.bodyS3Location = {
    bucket: 'Bucket',
    key: 'swagger/openapi.json'
};

以上でAPI Gatewayのリソースが生成できるが、これだけではエラーになってしまったので、モックのMETHODを定義しておく。

api.root.addMethod('ANY', new apigateway.MockIntegration());
r-kurokw
フルスタックになりたいエンジニアです。ネットワークなどのインフラをメインとしてましたが、現在はWeb開発をメインにやってます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした