我正在使用 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) 我收到指向runtime=_lambda..变量的 Flycheck 错误:
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"
# 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\nRun Code Online (Sandbox Code Playgroud)\n这是一个相当表面的 IDE 问题,代码本身可以工作
\n节点: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) 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 …
我有一个 CDK 项目。我尝试部署堆栈,但出现与权限相关的错误。现在堆栈状态为 UPDATE_ROLLBACK_FAILED。我修复了错误,并且我想继续我的部署。当我输入时cdk deploy失败:
is in UPDATE_ROLLBACK_FAILED state and can not be updated
我在这里读到您可以发出命令来ContinueUpdateRollback。我可以在 CDK 中执行此操作吗?对于这样的状态,最佳实践是什么?如果在生产中发生这种情况我该怎么办,我不想删除堆栈......
我使用 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
我创建了一个简单的堆栈来使用 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 }\nRun 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) 我正在尝试运行这个函数:
"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) 我有以下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) 我正在努力解决如何创建可重用的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 ×10
node.js ×3
typescript ×3
aws-lambda ×2
amazon-ecs ×1
jestjs ×1
prettier ×1
python ×1