Tengo una plantilla de formación de nubes que define una nueva puerta de enlace api:
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: API for getting planetary info Resources: PlanetsApi: Type: AWS::ApiGateway::RestApi Properties: Name: "Planets API"Tengo CodePipeline configurado para crear esto como un conjunto de cambios y luego ejecutar el conjunto de cambios.
Cuando se ejecuta el conjunto de cambios, falla con el siguiente error:
13:55:28 UTC-0400 CREATE_FAILED AWS::ApiGateway::RestApi PlanetsApi S3 object size exceeds limit of 2 MBNo sé de dónde viene este límite ni por qué se carga algo en S3. Las búsquedas de Google no arrojan información útil. Curiosamente, si creo el conjunto de cambios y lo ejecuto a través de la consola de CloudFormation, no obtengo ningún error.
¿Qué estoy haciendo mal?
Tenía el mismo problema. Y wow, me di cuenta cuando uso aws cloudformation package , crea un BodyS3Location con sus propiedades ( Bucket y key ) debajo de donde defino mi Type: AWS::ApiGateway::RestApi . Esto sucede, a pesar de que no había definido dichos parámetros anteriormente en mi plantilla, antes de que el cloudformation package lo procesara. Esto, entonces causa el error.
Lo que hice para abordar este problema:
Deje que CodePipeline se ejecute y falle (con el error)
Vaya a la consola de AWS , busque la pila fallida y expanda Plantilla
Encuentre las líneas en las que se genera BodyS3Location y sus parámetros (para mí estaban en las líneas 22 a 24)
Agregue un comando en buildspec.yml para eliminar estas líneas, después del comando del paquete (ejemplo a continuación)
aws cloudformation package --s3-bucket some-s3bucket --template-file ./template.yml --output-template-file ./packaged-template.yml
sed --in-place '22,24d' packaged-template.yml
commit y push al repositorio nuevamente
Nota: ¡Esta no es la mejor solución, este problema debe resolverse desde el final de AWS !
ACTUALIZAR:
Tiene algo que ver con la versión AWS CLI. Intente instalar esta versión antes de ejecutar el comando del cloudformation package cloudformation (en su CodeBuild ), y debería estar listo para comenzar.
pip install awscli==1.11.37