标签: aws-cdk

如何测试cdk堆栈中的引用类型值?

我正在使用 aws cdk 库来创建资源,并且能够成功创建资源。现在想要测试这个生成的statck。同样,如果它的单个资源能够很好地测试它,但是当堆栈有多个资源时,那么不知道如何休息。

以下是创建资源的代码。

constructor(scope: cdk.Construct, id: string, props: CIAMSQSProps = {} ) {
    super(scope, id);

    const queue = new sqs.Queue(this, id, {
      queueName: props.queueName!,
    });
    
    let ssmParamters = new CreateSSMParamaters(this, id, {
      envName: props.envName!,
      envValue: sqsQueue.queueUrl
    });
}
Run Code Online (Sandbox Code Playgroud)

以下是测试代码,但由于堆栈包含引用而失败。

test('Test SSM Parameter', () => {
  const app = new App();
  const sqsStack = new TestSQS(app, 'test-sqs-stack', {
    queueName: 'TestQueue',
    envName: 'TestQueue',
  });

  const template = Template.fromStack(sqsStack);
  template.hasResourceProperties(ResourceTypes.SSM_PARAM_TYPE, "{ Name: 'TestQueue', Value: 'TestQueue', Type: 'String' }");
});
Run Code Online (Sandbox Code Playgroud)

以下是错误。

Template …
Run Code Online (Sandbox Code Playgroud)

typescript aws-cdk

4
推荐指数
1
解决办法
3552
查看次数

AWS-CDK 类型“(cls: Runtime) -> Runtime”无法分配给类型“Runtime”

我收到指向runtime=_lambda..变量的 Flycheck 错误:

\n

Argument of type "(cls: Runtime) -> Runtime" cannot be assigned to parameter "runtime" of type "Runtime" in function "__init__" \xc2\xa0\xc2\xa0Type "(cls: Runtime) -> Runtime" cannot be assigned to type "Runtime"

\n
# create lambda function\n# executed as root\nfunction = _lambda.Function(self,\n                            "lambda_function",\n                            runtime=_lambda.Runtime.PYTHON_3_7,\n                            handler="lambda_handler.main",\n                            code=_lambda.Code.from_asset("./lambda"),\n                            environment={\n                                \'EC2_INSTANCE_ID\':\n                                instance.instance_id,\n                                \'S3_OUTPUT\':\n                                output_s3.s3_url_for_object(),\n                                \'S3_INPUT\':\n                                input_s3.s3_url_for_object()\n                            })\n\n
Run Code Online (Sandbox Code Playgroud)\n

这是一个相当表面的 IDE 问题,代码本身可以工作

\n

python aws-cdk

4
推荐指数
1
解决办法
577
查看次数

aws cdk 2.0 init 应用程序无法构建,并出现更漂亮的问题,来自 jest-snapshot

节点:v16.7.0
cdk:2.0.0(内部版本 4b6ce31)

包.json:

  "devDependencies": {
    "@types/jest": "^26.0.10",
    "@types/node": "10.17.27",
    "aws-cdk": "2.0.0",
    "jest": "^26.4.2",
    "ts-jest": "^26.2.0",
    "ts-node": "^9.0.0",
    "typescript": "^3.9.7"
  },
  "dependencies": {
    "aws-cdk-lib": "2.0.0",
    "constructs": "^10.0.0",
    "source-map-support": "^0.5.16"
  }
Run Code Online (Sandbox Code Playgroud)

npm run build/watch 堆栈跟踪:

node_modules/@types/prettier/index.d.ts:41:54 - error TS2315: Type 'IsTuple' is not generic.

41 type IndexProperties<T extends { length: number }> = IsTuple<T> extends true
                                                        ~~~~~~~~~~

node_modules/@types/prettier/index.d.ts:53:6 - error TS2456: Type alias 'IsTuple' circularly references itself.

53 type IsTuple<T> = T extends [] ? true : T extends [infer First, …
Run Code Online (Sandbox Code Playgroud)

node.js typescript jestjs prettier aws-cdk

4
推荐指数
1
解决办法
2366
查看次数

如何在 AWS CDK 中使用 CloudFrontWebDistribution 启用 SecurityHeaders 的托管响应标头策略?

CloudFrontWebDistribution我的 AWS CDK 基础设施代码中有一个 打字稿:

const cloudFrontDistribution = new cloudfront.CloudFrontWebDistribution(this, 'distribution', {
            originConfigs: [
                {
                    s3OriginSource: {
                        s3BucketSource: webBucket,
                        originAccessIdentity: originAccessIdentity,
                    },
                    behaviors : [ {
                        isDefaultBehavior: true,
                        defaultTtl: Duration.seconds(1),
                        lambdaFunctionAssociations: [
                            {
                                eventType: LambdaEdgeEventType.VIEWER_REQUEST,
                                lambdaFunction: midwayEdgeFunction.currentVersion,
                            },
                        ]
                    },
                    ]
                }
            ],
            defaultRootObject: 'index.html',
            viewerCertificate: cloudfront.ViewerCertificate.fromAcmCertificate(props.certificate, {
                aliases: [props.stageProps.cloud_front_domain_name],
                sslMethod: cloudfront.SSLMethod.SNI,
                securityPolicy: cloudfront.SecurityPolicyProtocol.TLS_V1_2_2019
            }),
            viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.HTTPS_ONLY,
            loggingConfig: {
                bucket: logBucket,
                includeCookies: true,
                prefix: 'cflogs/'
            }
        });
Run Code Online (Sandbox Code Playgroud)

我想为此发行版启用安全标头托管策略(请参阅此处)。但是,我只看到 aws cdk 文档针对Distribution对象执行此操作,而不是针对CloudFrontWebDistribution对象。

如何对CloudFrontWebDistribution …

amazon-web-services aws-cdk

4
推荐指数
1
解决办法
1496
查看次数

CDK 堆栈陷入 UPDATE_ROLLBACK_FAILED - 如何继续?

我有一个 CDK 项目。我尝试部署堆栈,但出现与权限相关的错误。现在堆栈状态为 UPDATE_ROLLBACK_FAILED。我修复了错误,并且我想继续我的部署。当我输入时cdk deploy失败:

is in UPDATE_ROLLBACK_FAILED state and can not be updated

在这里读到您可以发出命令来ContinueUpdateRollback。我可以在 CDK 中执行此操作吗?对于这样的状态,最佳实践是什么?如果在生产中发生这种情况我该怎么办,我不想删除堆栈......

aws-cloudformation aws-cdk

4
推荐指数
1
解决办法
2799
查看次数

如何使用 aws cdk 启用 CORS?我不断收到“Access-Control-Allow-Origin”消息

我使用 aws cdk 创建了 lambda 和 apigateway。邮递员的效果很好。

当我从浏览器发出后调用时,我得到No "Access-Control-Allow-Origin".

因此,我尝试使用 CDK 在 API Gateway 中启用 CORS。我按照以下方式进行:

// users microservice api gateway
    const apiGateway = new LambdaRestApi(this, "usersApi", {
      restApiName: "Users Service",
      handler: microServices.fn,
      proxy: false,
    });

    // creating resources
    const users = apiGateway.root.addResource("users");
    users.addMethod("POST");
    users.addCorsPreflight({
      allowOrigins: ["*"],
      allowHeaders: ["*"],
      allowMethods: ["*"],
    });
Run Code Online (Sandbox Code Playgroud)

但我还是明白了No "Access-Control-Allow-Origin"
我缺少什么?如何通过 cdk 启用 CORS?

amazon-web-services node.js aws-lambda aws-api-gateway aws-cdk

4
推荐指数
1
解决办法
1890
查看次数

cdk bootstrap 不起作用时该怎么办

我创建了一个简单的堆栈来使用 cdk 进行部署,为了简单起见,我遵循了 aws 示例,使用带有 typescript 语言的 cdk 创建了一个 s3 存储桶。\n这些是我的依赖项:

\n
      "devDependencies": {\n    "@types/jest": "^26.0.10",\n    "@types/node": "10.17.27",\n    "aws-cdk": "2.19.0",\n    "jest": "^26.4.2",\n    "ts-jest": "^26.2.0",\n    "ts-node": "^10.9.1",\n    "typescript": "^4.7.4"\n  },\n  "dependencies": {\n    "aws-cdk-lib": "2.19.0",\n    "constructs": "^10.0.0",\n    "source-map-support": "^0.5.16"\n  }\n
Run Code Online (Sandbox Code Playgroud)\n

进行cdk部署时,出现以下错误消息:

\n
\xe2\x9c\xa8  Synthesis time: 7.82s\n\nAwsLab2Stack: deploying...\n[0%] start: Publishing 7acebacf84a3ee9c1a08331d943a313131c77ec0f49614e1b7eb0a7c37362d71:040831115250-us-west-2\n[100%] fail: No bucket named 'cdk-hnb659fds-assets-XXXXXXXXX-us-west-2'. Is account XXXXXXXXX bootstrapped?\n\n \xe2\x9d\x8c  AwsLab2Stack failed: Error: Failed to publish one or more assets. See the error messages above for more information.\n    at publishAssets (C:\\Users\\MyUserName\\AppData\\Roaming\\npm\\node_modules\\aws-cdk\\lib\\util\\asset-publishing.ts:28:11)\n …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-cdk

4
推荐指数
1
解决办法
3180
查看次数

修复 AWS CDK 中的“需要应用程序”错误

我正在尝试运行这个函数:

"cdk deploy --require-approval never"
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

--app is required either in command-line, in cdk.json or in ~/.cdk.json
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?这是我的 cdk.json 文件中的内容:

{
  "app": "npx ts-node --prefer-ts-exts bin/project-infra.ts",
}
Run Code Online (Sandbox Code Playgroud)

这是我的项目基础设施代码:

import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as lambda from 'aws-cdk-lib/aws-lambda';
// import * as sqs from 'aws-cdk-lib/aws-sqs';

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

    const layer = new lambda.LayerVersion(this, "BaseLayer", {
      code: lambda.Code.fromAsset("lambda_base_layer/layer.zip")
      compatibleRuntimes: [lambda.Runtime.PYTHON_3_9], …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js typescript aws-lambda aws-cdk

4
推荐指数
1
解决办法
7666
查看次数

AWS CDK-创建AWS ECS服务时出现模糊错误

我有以下CDK代码来创建ECS服务。

注意:堆栈尚未完全配置,特别是我没有docker映像资产或群集没有任何容量。我的意图是建立基础架构所需的最少代码,如何对Cloudformation模板贡献不同的代码片段以及选择的默认值。

CDK代码:

index.ts

#!/usr/bin/env node
import 'source-map-support/register';
import cdk = require('@aws-cdk/cdk');
import { HelloCdkStack } from '../lib/hello-cdk-stack';

const app = new cdk.App();
new HelloCdkStack(app, 'hellocdk-stack');

Run Code Online (Sandbox Code Playgroud)

lib/hello-cdk-stack.ts

import cdk = require('@aws-cdk/cdk');
import ecs = require('@aws-cdk/aws-ecs');
import ec2 = require('@aws-cdk/aws-ec2');

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

    const td = new ecs.Ec2TaskDefinition(scope, 'hellocdk-taskdef');

    const vpc = new ec2.Vpc(scope, 'hellocdk-vpc');

    const cluster = new ecs.Cluster(scope, 'hellocdk-cluster', {
      vpc: vpc,
    });

    new ecs.Ec2Service(scope, …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-ecs aws-cdk

3
推荐指数
1
解决办法
709
查看次数

如何创建可在堆栈之间共享的VPC?

我正在努力解决如何创建可重用的VPC的问题,该VPC可使用AWS CDK跨多个堆栈使用。我希望能够为每个项目创建不同的堆栈,然后能够导入应分配给不同堆栈的VPC。我还想使用一个良好的结构来创建它,在这里我可以在不同的时间部署不同的堆栈(这意味着:我不想一次部署所有堆栈)。

我尝试了以下方法,但是这将为每个堆栈创建一个新的VPC,这不是我想要实现的,而是我想一次创建我的VPC,然后如果已经存在,它将简单地重用先前创建的VPC。

应用程序

import cdk = require('@aws-cdk/core');
import { Stack1 } from '../lib/stack1';
import { Stack2 } from '../lib/stack2';

const app = new cdk.App();

new Stack1(app, "Stack1");
new Stack2(app, "Stack2");
Run Code Online (Sandbox Code Playgroud)

stack1.ts

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

import { Configurator } from './configurators/configurator'

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

    const configurator = new Configurator(scope, "Stack1");

    // later reuse vpc from configurator using configurator.vpc
  }
}
Run Code Online (Sandbox Code Playgroud)

stack2.ts

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

import …
Run Code Online (Sandbox Code Playgroud)

aws-cdk

3
推荐指数
2
解决办法
360
查看次数