AWS CDK |Создайте API REST, охватывающий несколько стеков CDK - PullRequest
1 голос
/ 27 сентября 2019

Мы используем AWS CDK для создания нашего безсерверного REST API.Однако существует большое количество конечных точек, и иногда нам приходится уничтожать и повторно развертывать наш стек.Чтобы предотвратить изменение URL-адреса REST API при каждом развертывании, я планирую создать интерфейс API GATEWAY в одном стеке и добавить методы и ресурсы в отдельный стек.Как я могу ссылаться на созданный rest API в отдельном стеке?

Пытался реализовать что-то из https://github.com/aws/aws-cdk/issues/3705,, но все ресурсы (API-шлюз, ресурсы и методы) помещаются в один стеквместо шлюза API в одном стеке и ресурсов в другом.

Ниже приведены фрагменты соответствующих кодов:

bts-app-cdk.ts

const first = new FirstStack(app, 'FirstStack', {
    env: {
        region: 'us-east-1',
        account: '1234567890',
    }
    });

const second = new SecondStack(app, 'SecondStack', {
    apiGateway: first.apiGateway,
    env: {
        region: 'us-east-1',
        account: '1234567890',
    }
});

second.addDependency(first)

first-stack.ts

export class FirstStack extends cdk.Stack {

    public readonly apiGateway: apig.IResource;

    constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
        super(scope, id, props);

        const apiGateway = new apig.RestApi(this, 'BooksAPI', {
            restApiName:'Books API',
        })
        apiGateway.root.addMethod('GET');

        this.apiGateway = apiGateway.root;
    }
}

second-stack

export interface SecondStackProps extends cdk.StackProps {
    readonly apiGateway: apig.IResource;
}

export class SecondStack extends cdk.Stack {
    constructor(scope: cdk.Construct, id: string, props: SecondStackProps) {
        super(scope, id, props);

        props.apiGateway.addMethod('ANY')

    }
}
...