gpt4 book ai didi

amazon-web-services - AWS CDK部署到阶段而不删除先前的阶段

转载 作者:行者123 更新时间:2023-12-03 07:18:44 24 4
gpt4 key购买 nike

我正在使用 AWS CDK 来管理 API Gateway 的部署。我使用阶段来通过环境来推广我的代码,例如开发、测试、预生产、生产。我的脚本看起来像这样:

export class MyStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);

const api = new apigateway.SpecRestApi(this, 'my-api', {
deploy: false,
apiDefinition: apigateway.ApiDefinition.fromAsset('path/to/swagger.yaml'),
});

const stageName = this.node.tryGetContext('stageName');

const deployment = new apigateway.Deployment(this, `my-api-deployment-${stageName}`, { api });
new apigateway.Stage(this, `my-api-stage-${stageName}`, {
stageName,
deployment,
});
}
}

不幸的是,当我将代码从一个阶段提升到下一阶段时,例如cdk deploy --context stageName=PREPROD,之前的阶段已被删除,因此我的 API 网关中最终只有一个阶段。

是否可以部署到一个阶段而不删除其他阶段?

最佳答案

当您部署相同的堆栈和部署的 id 时,阶段会因不同的 stageName 参数而发生变化。 Cloudformation 将删除以前的资源并创建一个新资源。

您需要将代码分成 2 个堆栈才能使其正常工作。堆栈 1 将包含用于创建 api 并将其导出为的代码

export class MyStack1 extends cdk.Stack {
public readonly api: apigateway.SpecRestApi;
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);

this.api = new apigateway.SpecRestApi(this, 'my-api', {
deploy: false,
apiDefinition: apigateway.ApiDefinition.fromAsset('path/to/swagger.yaml'),
});

MyStack2 将具有用于创建阶段和部署的代码。

在 bin/App 文件中,您需要将 api 从 MyStack1 传递到 MyStack2 构造函数。

export class MyStack2 extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, api: apigateway.SpecRestApi, props?: cdk.StackProps) {
super(scope, id, props);

const stageName = this.node.tryGetContext('stageName');

const deployment = new apigateway.Deployment(this, `my-api-deployment`, { api });
new apigateway.Stage(this, `my-api-stage`, {
stageName,
deployment,
});

保留 MyStack2 id,如 my-api-deployment-stack-${stageName}

这样做的目的是,您将拥有一个带有 api 网关的公共(public)堆栈,以及每个环境的不同堆栈,例如 dev、test、preprod 和 prod。

关于amazon-web-services - AWS CDK部署到阶段而不删除先前的阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66380828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com