标签: aws-cdk

@aws-cdk/pipelines 和 @aws-cdk/aws-codepipeline 有什么区别?

这两个包似乎基本上做同样的事情?这两个包之间的预期区别是什么以及我应该使用哪个?

javascript amazon-web-services typescript aws-codepipeline aws-cdk

10
推荐指数
1
解决办法
2687
查看次数

如何像 Vercel 一样在 AWS 上部署 NextJS?

我想使用 AWS CDK 在 AWS 上部署 NextJS 进行 POC,并且正在寻找选项。在 NextJS 文档中,它说我们只需创建一个实例并运行npm run build && npm start,它就会为我们启动服务。然而,这并不是最优化的部署方式。

Vercel 以尽可能最优化的方式部署它: 在此输入图像描述

我如何使用 AWS 做同样的事情?如何通过 Cloudfront CDN 提供静态资产和页面,以及如何通过 Lambda 或 ECS 提供服务器端呈现的页面和 API?是否有我可以遵循的分步指南来拆分相同的构建文件?

我探索过的其他选择

  • AWS Amplify:由于它是一项高级服务,我觉得自己做这一切会便宜很多,并且在 CDK 中给我更大的灵活性(我不确定 Amplify 在幕后如何工作以在 S3 + 上部署 nextjs 资产) Cloudfront + Lambda 堆栈)
  • 无服务器框架:有一个插件可以部署nextjs。但是,我想完全控制部署,并且不想依赖任何外部框架。想要使用 AWS CDK 在本地完成此操作。

任何使用 AWS CDK 本地执行此操作的指示都会有所帮助。谢谢。

amazon-web-services next.js vercel aws-cdk

10
推荐指数
1
解决办法
4841
查看次数

使用 AWS CDK 为 AWS API 网关启用 CORS

我正在尝试使用 AWS CDK 构建应用程序,如果我要使用 AWS 控制台手动构建应用程序,我通常会在 API 网关中启用 CORS。

尽管我可以从 API Gateway 中导出 swagger 并找到了许多选项来为 OPTIONS 方法生成 Mock 端点,但我不知道如何使用 CDK 来做到这一点。目前我正在尝试:

const apigw             = require('@aws-cdk/aws-apigateway');
Run Code Online (Sandbox Code Playgroud)

在哪里:

var api                 = new apigw.RestApi(this, 'testApi');
Run Code Online (Sandbox Code Playgroud)

并定义 OPTIONS 方法,如:

const testResource   = api.root.addResource('testresource');

var mock = new apigw.MockIntegration({
                    type: "Mock",
                    methodResponses: [
                            {
                                    statusCode: "200",
                                    responseParameters : {
                                            "Access-Control-Allow-Headers" : "string",
                                            "Access-Control-Allow-Methods" : "string",
                                            "Access-Control-Allow-Origin" : "string"
                                    }
                            }
                    ],
                    integrationResponses: [
                            {
                                    statusCode: "200",
                                    responseParameters: {
                                            "Access-Control-Allow-Headers" :  "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'",
                                            "Access-Control-Allow-Origin" : "'*'",
                                            "Access-Control-Allow-Methods" …
Run Code Online (Sandbox Code Playgroud)

aws-cloudformation aws-api-gateway aws-cdk

9
推荐指数
3
解决办法
7678
查看次数

如何使用 #AWS-CDK 从另一个堆栈导入安全组?

我想知道如何导入另一个堆栈中定义的安全组,然后在当前堆栈中使用。

到目前为止我已经尝试过这个..

class relayStack extends cdk.Stack {
    public sg_relay: ec2.SecurityGroupRefProps

    constructor(parent: cdk.App, name: string, props: VPCProps) {
        super(parent, name, props);

        //#IMPORT VPC PROPS
        const vpc = ec2.VpcNetwork.import(this, 'VPC-Hottest100', props.infra.vpc);
        //#AUTOSCALING GROUP
        const asg_relayServer = new ec2.AutoScalingGroup(this, 'ASG_Relay', {
            vpc,
            instanceType: new ec2.InstanceTypePair(ec2.InstanceClass.T2, ec2.InstanceSize.Small),
            minSize: 1,
            maxSize: 3,
            desiredCapacity: 1,
            machineImage: new ec2.GenericLinuxImage({
                "ap-southeast-2": "ami-dc361ebf",
            }),
            keyName: 'icecast-poc',
            allowAllOutbound: false,
            vpcPlacement: {
                usePublicSubnets: false
            }
        });

        //#SECURITY Group
        const sg_relay = new ec2.SecurityGroup(this, 'SG_RELAY', {
            vpc,
            description: "Relay stack security group", …
Run Code Online (Sandbox Code Playgroud)

aws-cdk

9
推荐指数
3
解决办法
9795
查看次数

使用 AWS CDK 将入口规则添加到安全组

我正在尝试使用 Python 通过 AWS CDK 将入口规则添加到安全组。根据此处的文档- 类 aws_cdk.aws_ec2 上有一个方法 add_ingress_rule()。

但是 - 当我尝试部署堆栈时,出现以下错误:

AttributeError: 'method' 对象没有属性 ' jsii__type ' 子进程退出,错误 1

下面的安全组代码片段-

        sg_elb = ec2.SecurityGroup(
            self,
            id = "sg_elb",
            vpc = vpc,
            security_group_name = "sg_elb"
        )

        sg_elb.add_ingress_rule(
            peer = ec2.Peer.any_ipv4,
            connection = ec2.Port.tcp(443)   # This line seems to be a problem.
        )
Run Code Online (Sandbox Code Playgroud)

此处的官方文档中甚至还提供了相同的示例(在 TypeScript 中),因此我不确定自己做错了什么。

任何人都可以建议吗?

提前致谢 !

python aws-cdk

9
推荐指数
1
解决办法
1万
查看次数

在 AWS API Gateway 中,我可以在不附加 API 密钥的情况下使用使用计划吗?

关于 API 网关使用计划的 AWS 文档都暗示它们是使用/附加到 API 密钥创建的,但没有说明如果没有 API 密钥它将如何运行。我有一个未经授权的 API,我想对其应用限制。我可以创建使用计划,将其附加到资源,而不将 API 密钥与其关联吗?它会起作用吗?

上下文:我正在尝试使用 CloudFormation 的 Java SDK 来定义堆栈,但我无法弄清楚如何以编程方式指定特定于资源的节流阀。我还将接受一个答案,该答案告诉我如何在不使用控制台的情况下执行此操作。

throttling amazon-web-services aws-cloudformation aws-api-gateway aws-cdk

9
推荐指数
1
解决办法
1322
查看次数

是否可以从 Lambda 内部署 AWS CDK 堆栈?

我想使用 Lambda 函数部署 AWS CDK 堆栈。用例是支持与Trek10 的无服务器 CI/CD 管道中描述的功能类似的功能,相关代码在此处

简而言之,AWS CodePipelines 仅支持监听单个 Git 分支内的更改。我想监听与创建存储库和分支相关的 GitHub 事件,并创建 CodePipeline 实例以响应这些事件,以便每个 Git 存储库的每个分支都有一个管道。我想要一个 Lambda 来监听 GitHub 事件并创建 CDK 堆栈。Trek10 示例使用 Python 并直接调用 CloudFormation。我希望 Lambda 更简单,而是使用 CDK。

这是一个使用 Typescript 的简单 Lambda,它源自此AWS CDK 问题

// index.ts
import {ScheduledEvent} from 'aws-lambda';
import {CloudFormationDeploymentTarget, DEFAULT_TOOLKIT_STACK_NAME} from 'aws-cdk/lib/api/deployment-target';
import {CdkToolkit} from 'aws-cdk/lib/cdk-toolkit';
import {AppStacks} from 'aws-cdk/lib/api/cxapp/stacks';
import {Configuration} from 'aws-cdk/lib/settings';
import {execProgram} from "aws-cdk/lib/api/cxapp/exec";
import * as yargs from 'yargs';
import {SDK} …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-lambda aws-codepipeline aws-cdk

9
推荐指数
1
解决办法
1902
查看次数

使用 CDK 写入 S3 对象

我正在尝试编写一个 CDK 来完成在一些文件夹中写入一些我需要在我的存储桶中可见的空对象的工作。

我发现这个答案 https://serverfault.com/questions/957686/how-to-upload-a-file-into-s3-bucket-using-cloudformation-script显示了 CloudFormation 中的方式。

我想知道是否有人对 CDK 做过类似的事情。

谢谢

amazon-s3 aws-cdk

9
推荐指数
1
解决办法
7255
查看次数

“this”类型的参数不可分配给参数“Construct”

我试图将一个 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)

node.js aws-cdk

9
推荐指数
3
解决办法
7441
查看次数

CDK 将 API Gateway 堆栈拆分为 2 个小堆栈

我正在尝试创建 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-stacknested-stack将 API 数据传递给它,但到目前为止没有运气。

我的目标是创建一个包含 2 个小栈的栈——它们都指向同一个 API。或者,如果可能,为资源限制创建一个解决方法。

任何帮助都感激不尽。


2020 年 10 月 10 日更新:

目前,没有解决此问题的方法,最终将 API 网关拆分为多个 API 网关。

2020 年 24 月 10 日更新:

AWS CloudFormation 现在支持增加对五个服务配额的限制 - 模板大小、资源、参数、映射和输出。可以在 S3 对象中传递的模板的最大大小现在是 1MB(以前是 450KB)。最大资源数的新每个模板限制为 500(以前为 200)

更多信息可以在这里找到。

amazon-web-services aws-api-gateway aws-cdk

9
推荐指数
1
解决办法
3651
查看次数