【问题标题】:AWS CDK vs AWS AmplifyAWS CDK 与 AWS Amplify
【发布时间】:2020-02-06 02:56:41
【问题描述】:

我对 AWS Amplify 和 CDK 有疑问。 在 Amplify 中,我们是否可以创建新环境并将它们发布到各自的存储桶中?为什么我们需要 CDK? 有什么用例可以让 CDK 更适合?

【问题讨论】:

    标签: amazon-web-services aws-amplify aws-cdk


    【解决方案1】:

    CDK 让您可以部署(相当)任何类型的 Stack,您必须手动使用 cloudformation。使用cdk,您将更快速、更安全地创建 CloudFormation 堆栈。

    JAVA中的一个例子,为了创建一个新的Table,你可以使用下面的代码来代替处理YAML配置:

     private Table CreateMasterDataTable(String TABLE_NAME) {
        return Table.Builder.create(this, TABLE_NAME + "_MasterDataTable")
                .tableName(TABLE_NAME.concat("_gvr-bic-masterdata"))
                .partitionKey(Attribute.builder().type(AttributeType.STRING).name("siteId").build())
                .removalPolicy(RemovalPolicy.RETAIN)
                .stream(StreamViewType.NEW_AND_OLD_IMAGES)
                .readCapacity(5)
                .writeCapacity(5)
                .build();
    }
    

    为了创建一个新的 Lambda(提供一个已经存在的 JAR),您可以使用以下代码而不是处理 YAML 配置:

    private Function CreateSiteAggregationNowFunction() {
        Map<String, String> env = new HashMap<>();
        env.put(Constants.LAMBDA_KEY_ENV, API_NAME);
        return Function.Builder.create(this, API_NAME + "_SiteAggregationNow")
                .code(Code.fromAsset(Constants.LAMBDA_PATH_SITE_NOW))
                .handler("it.fabricalab.gvr.bic.DeviceLoader::handleRequest")
                .timeout(Duration.seconds(30))
                .environment(env)
                .functionName(API_NAME.concat("_SiteAggregationNow"))
                .runtime(Runtime.JAVA_8)
                .retryAttempts(Constants.LAMBDA_RETRY_FALLBACK)
                .memorySize(512)
                .build();
    }
    

    然后,为了创建让 lambda 从表中读取的策略:

    final Table masterDataTable = CreateMasterDataTable(API_NAME);
    final Function siteAggregationNow = CreateSiteAggregationNowFunction();
    
    masterDataTable .grantReadData(siteAggregationNow);
    

    通过这几行代码,您创建了一个 CloudFormation 堆栈,其中包含一个 DynamoDB 表(使用流)和一个从该表读取的 Lambda。

    【讨论】:

      【解决方案2】:

      Amplify 适用于部署静态站点,具有简单的数据库和 Cognito 集成,但不适用于管理大量环境或更复杂的堆栈。 CDK 更适合管理复杂的基础设施部署。这是一个如何使用 CDK 部署静态站点的示例。 https://github.com/davidsteed/awscdkstaticsite。它通过处理安全标头和证书生成来改进 Amplify 的功能。

      【讨论】:

        【解决方案3】:

        您会发现您需要为生产应用程序编写和编辑大量 CloudFormation 模板。这会很快变得非常痛苦。

        Amplify 应该发出 CDK 代码,这将使我们两全其美。

        我最初使用 Amplify 很多,因为它可以快速引导您,但自从发现 CDK 后,CDK 是我使用最多的工具。

        【讨论】:

          猜你喜欢
          • 2021-07-31
          • 2019-03-04
          • 1970-01-01
          • 2023-04-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-10
          • 2021-08-25
          相关资源
          最近更新 更多