Tengo una duda en mi mente con respecto a AWS Amplify y CDK. ¿En Amplify si podemos crear nuevos entornos y publicarlos en sus respectivos cubos? ¿Por qué necesitamos CDK? ¿Algún caso de uso que haría que CDK encajara mejor?
CDK le permite implementar (bastante) cualquier tipo de pila que tenga que hacer manualmente con la formación en la nube. Con cdk , creará una pila de CloudFormation de forma más rápida y segura.
Un ejemplo en JAVA, para crear una nueva tabla, puede usar el siguiente código en lugar de lidiar con la configuración de 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(); }Para crear un nuevo Lambda (siempre que ya exista un JAR), puede usar el siguiente código en lugar de lidiar con la configuración de 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(); }Entonces, para crear la política para permitir que la lambda lea de la tabla:
final Table masterDataTable = CreateMasterDataTable(API_NAME); final Function siteAggregationNow = CreateSiteAggregationNowFunction(); masterDataTable .grantReadData(siteAggregationNow);Con estas pocas líneas, ha creado una pila de CloudFormation con una tabla de DynamoDB (que usa flujo) y una Lambda que lee de esta tabla.
Amplify está bien para implementar sitios estáticos, con una base de datos simple e integración con Cognito, pero no es bueno para administrar una gran cantidad de entornos o pilas más complicadas. CDK es mucho mejor para gestionar implementaciones de infraestructuras complejas. Este es un ejemplo de cómo puede implementar sitios estáticos con CDK. https://github.com/davidsteed/awscdkstaticsite . Mejora lo que se puede hacer con Amplify al tratar los encabezados de seguridad y la generación de certificados.
Descubrirá que necesitará escribir y editar muchas plantillas de CloudFormation para una aplicación de producción. Eso se vuelve muy doloroso muy rápido.
Amplify debería emitir código CDK, eso nos daría lo mejor de ambos mundos.
Utilicé mucho Amplify inicialmente, ya que podía iniciarlo rápidamente, pero desde que descubrí CDK, CDK es la herramienta que más uso.