每当我从 CDK 生成 cloudformation 模板时,我都会看到在逻辑 ids 中,它添加了某种哈希。那个哈希是什么意思?例如。
测试4FCEEF4A
这个哈希值 4FCEEF4A 是如何生成的?
我正在尝试 AWS CDK,但当我尝试执行依赖于堆栈完成的代码块时,我陷入了困境。
这是我当前的代码:
class Application extends cdk.Construct {
constructor(scope: cdk.Construct, id: string) {
super(scope, id);
const webStack = new WebsiteStack(app, `website-stack-${id}`, { stage: id })
const buildStack = new CodeBuildStack(app, `codebuild-stack-${id}`, { stage:id, bucket: webStack.websiteBucket, distribution: webStack.websiteDistribution });
this.generateBuildParameter(id, webStack, buildStack)
}
generateBuildParameter(id: string, webStack: WebsiteStack, buildStack: CodeBuildStack) {
const buildParam = {
projectName: buildStack.buildProject.projectName,
sourceVersion: id,
environmentVariablesOverride: [
{ name: "STAGE", value: id, type: "PLAINTEXT" },
{ name: "WEBSITE_BUCKET", value: webStack.websiteBucket.bucketName, type: "PLAINTEXT" },
{ name: "CLOUDFRONT_DISTRIBUTION_ID", value: …Run Code Online (Sandbox Code Playgroud) 我需要将一些元数据添加到 Cloudformation 中以获取 IAM 策略。我怎样才能用 CDK 做到这一点?
我正在使用 CDK 合成 cloudformation,并且需要包含元数据来抑制 cfn-nag ( https://github.com/stelligent/cfn_nag ) 警告。
我使用以下语句进行了策略生成:
const cfnCustomPolicy = new iam.CfnPolicy(scope,
'cfnCustomPolicy',
{
policyName: "CustomPolicy",
policyDocument: {
Version: "2012-10-17",
Statement: [
{
Effect: "Allow",
Action: "apigateway:GET",
Resource: [
"arn:aws:apigateway:us-east-1::/restapis/*/stages/*/exports/*"
]
}
]
}
}
);
cfnCustomPolicy.cfnOptions.metadata = {
cfn_nag: {
rules_to_suppress: [
{
id: "W12",
reason: "The lambda need access to export documents from any API"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法使用 CDK 来做到这一点,而不使用 L1 接口?
我正在尝试编写一个 CDK 来完成在一些文件夹中写入一些我需要在我的存储桶中可见的空对象的工作。
我发现这个答案 https://serverfault.com/questions/957686/how-to-upload-a-file-into-s3-bucket-using-cloudformation-script显示了 CloudFormation 中的方式。
我想知道是否有人对 CDK 做过类似的事情。
谢谢
我试图将一个 lambda 函数调用到一个“示例应用程序”堆栈中,它给我一个错误,因为我试图将一个“this”参数传递给它。
这是我的 lambda 函数
export async function handler(event) {
console.log("request:", JSON.stringify(event, undefined, 2));
return {
statusCode: 200,
headers: { "Content-Type": "text/plain" },
body: `Hello, CDK! You've hit ${event.path}\n`
};
};
Run Code Online (Sandbox Code Playgroud)
这是调用该函数的“应用程序”
//import sns = require('@aws-cdk/aws-sns');
//import subs = require('@aws-cdk/aws-sns-subscriptions');
//import sqs = require('@aws-cdk/aws-sqs');
import cdk = require('@aws-cdk/core');
import lambda = require('@aws-cdk/aws-lambda');
//Exports class from other file much like a function
export class CdkWorkshopStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Describes …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建 CDK 堆栈以创建 API 网关。如果我在“小块”(资源的评论部分)中创建堆栈,一切都正常工作,但是当我尝试创建完整的堆栈时,我收到此异常:
Number of resources, 224, is greater than maximum allowed, 200
Run Code Online (Sandbox Code Playgroud)
因此,我尝试将我的大堆栈拆分为 2 个较小的堆栈,一个堆栈创建资源并创建一半的资源,另一个堆栈填充相关数据。
代码片段:
Number of resources, 224, is greater than maximum allowed, 200
Run Code Online (Sandbox Code Playgroud)
我尝试创建cross-stack或nested-stack将 API 数据传递给它,但到目前为止没有运气。
我的目标是创建一个包含 2 个小栈的栈——它们都指向同一个 API。或者,如果可能,为资源限制创建一个解决方法。
任何帮助都感激不尽。
2020 年 10 月 10 日更新:
目前,没有解决此问题的方法,最终将 API 网关拆分为多个 API 网关。
2020 年 24 月 10 日更新:
AWS CloudFormation 现在支持增加对五个服务配额的限制 - 模板大小、资源、参数、映射和输出。可以在 S3 对象中传递的模板的最大大小现在是 1MB(以前是 450KB)。最大资源数的新每个模板限制为 500(以前为 200)。
更多信息可以在这里找到。
我目前正在使用 aws-cdk(打字稿)来创建一个由 EC2 实例和 RDS 数据库实例组成的堆栈。RDS 实例需要在 EC2 实例启动并执行 userdata 之前设置。
我遇到的问题是,我找不到在两个资源之间定义 DepensOn (Cloudformation) 属性的方法。解决方法是,我使用的是 netsted 堆栈。
代码如下所示:
const instance = new ec2.Instance(this, 'Instance', {...})
const rdsInstance = new rds.DatabaseInstance(this, 'DbInstance', {...})
Run Code Online (Sandbox Code Playgroud)
现在我想定义类似instance.dependsOn(rdsInstance) 的东西。
有没有人遇到过同样的问题?
谢谢,菲利克斯
我正在将我们的基础设施代码从 Terraform 转移到 AWS cdk。我正在尝试找到一种最佳方式来管理具有多个要部署的堆栈的多个环境。如果我遵循文档中的建议,我将不得不为多个环境定义多个堆栈,这可能会让人感到困惑。例如
const app = new cdk.App();
new DevStack1(app, 'dev-stack-1', settings.dev)
new DevStack2(app, 'dev-stack-2', settings.dev)
.
.
new ProdStack1(app, 'prod-stack-1', settings.prod)
new ProdStack2(app, 'prod-stack-2', settings.prod)
.
.
Run Code Online (Sandbox Code Playgroud)
在相同环境中的不同堆栈之间共享设置。然后我必须一个接一个地部署每个堆栈。有没有更好的方法来做到这一点?
如何将此 CloudFormation 转换为 CDK(JavaScript 或 Java)?我试图这样做,但这是我第一次使用 CDK,我不知道该怎么做。
FargateTaskExecutionServiceRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service:
- ecs-tasks.amazonaws.com
Action:
- sts:AssumeRole
Policies:
- PolicyName: AmazonECSTaskExecutionRolePolicy
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- 'ecr:GetAuthorizationToken'
- 'ecr:BatchCheckLayerAvailability'
- 'ecr:GetDownloadUrlForLayer'
- 'ecr:BatchGetImage'
- 'logs:CreateLogStream'
- 'logs:PutLogEvents'
Resource: '*'
Run Code Online (Sandbox Code Playgroud) 我已经通过 CDK(使用 java 作为语言)创建了一个 RDS Aurora Postgres 数据库集群和数据库实例。现在我正在尝试通过 CDK 实现创建数据库模式。我试过了,但在任何地方都没有找到任何说明文件或帮助
如果有人已经做过或有知识,我会很感激为我指出正确的方向。
谢谢,地平线7
java amazon-web-services aws-cloudformation aws-cdk aws-cloudformation-custom-resource
aws-cdk ×10
typescript ×2
amazon-ec2 ×1
amazon-iam ×1
amazon-rds ×1
amazon-s3 ×1
aws-cloudformation-custom-resource ×1
java ×1
node.js ×1