aws-samples / retail-demo-store

AWS Retail Demo Store is a sample retail web application and workshop platform demonstrating how AWS infrastructure and services can be used to build compelling customer experiences for eCommerce, retail, and digital marketing use-cases
MIT No Attribution
726 stars 515 forks source link

DeploymentSupport - CREATE_FAILED #644

Closed sganado closed 1 month ago

sganado commented 1 month ago

I'm having trouble deploying a demo store retail service DeploymentSupport : CREATE_FAILED error detail: Embedded stack arn:aws:cloudformation:us-east-1:340120563881:stack/retaildemostorev6-DeploymentSupport-8PNH0OQE6HZL/1bd1cc00-8039-11ef-9ef0-0affdee11ef9 was not successfully created: The following resource(s) failed to create: [CustomLoadDataProducts].

CustomLoadDataProducts - CREATE_FAILED error Detail: CloudFormation did not receive a response from your Custom Resource. Please check your logs for requestId [e45ca0f5-d3f3-492e-b18a-fcbda8683685]. If you are using the Python cfn-response module, you may need to update your Lambda function code so that CloudFormation can attach the updated version.

sganado commented 1 month ago

Profundicé más en las plantillas y descubrí que LoadDataLambda obtiene el valor correctamente de la variable de entorno y a continuación se muestra la carga útil para la misma cuando se crea la función:

{ "Role": "arn:aws:iam::340120563881:role/retaildemostorev7-DeploymentSupp-LoadDataLambdaRole-OY6IZaTvl240", "MemorySize": "128", "Runtime": "python3.12", "Description": "Función de utilidad de implementación de Retail Demo Store que llama al punto final de inicialización del servicio de producto para cargar información de producto y categoría en las tablas de DynamoDB", "VpcConfig": { "SecurityGroupIds": ["sg-0bbc5c28ee6e95cc3"], "SubnetIds": ["subnet-07043bede0a34f75a", "subnet-0cb14575bae827fac"] }, "Tiempo de espera": "600", "Controlador": "index.handler", "Entorno": { "Variables": { "ProductsServiceUrl": "http://retail-LoadB-6wbk793nobck-347d2f36e8f3e0b6.elb.us-east-1.amazonaws.com" } }, "Código": { "ArchivoZip": "de urllib.request importar Request, urlopen\nde urllib.error importar URLError\nimport logging\nimport cfnresponse\nimport time\nimport os\nlogger = logging.getLogger()\nlogger.setLevel(logging.INFO)\ndef handler(event, contexto):\n response_data = {}\n response_status = cfnresponse.SUCCESS\n max_retries = 15 # Número máximo de reintentos - debe ser menor que el tiempo de espera\n retries = 0\n if event['RequestType'] in ['Create', 'Update']: \n url = os.environ['ProductsServiceUrl']\n request = Request(f\"{url}/init\", method='POST')\n while retries < max_retries:\n try:\n with urlopen(request) as response:\n logger.info(f\"Método de inicialización del servicio de producto éxito: {response.read()}\")\n # exit while, success.\n break\n except URLError as e:\n retries += 1\n print(f\"Error en la solicitud. Reintentando en 30 segundos... (Intento {retries}/{max_retries})\")\n logger.error(f\"Error al llamar al servicio de producto init: {e.code} : {e.reason}\")\n print(f\"Error: {e}\")\n response_data['Message'] = f\"Recurso {event['RequestType']} falló: {e}\"\n time.sleep(30)\n\n #\n si los reintentos son >= max_retries:\n response_status = cfnresponse.FAILED\n \n \n cfnresponse.send(event, context, response_status, response_data)\n" } }

Creo que el problema se encuentra en la siguiente parte de la lógica en la línea 198 de deployment-support.yaml:

url = os.environ['ProductsServiceUrl'] request = Request(f"{url}/init", method='POST') #### /init puede no manejarse bien en la aplicación que se encuentra dentro de la instancia de destino while retries < max_retries: try: with urlopen(request) as response: logger.info(f"Product Service init method success: {response.read()}")

exit while, success.

break except URLError as e: retries += 1 print(f"Request failed. Retrying in 30 seconds... (Attempt {retries}/{max_retries})") print(f"Error: {e}") time.sleep(30)

En el fragmento anterior, notará que la parte try-catch sigue reintentando, lo que pude confirmar desde su archivo adjunto de CloudWatch. Esto sucede debido a la línea 198 en [1], donde solicita la URL que puede obtener con éxito en la carga útil anterior, pero luego, al final, agrega '/init' que no se maneja en el lado de la aplicación. Verifiqué el grupo de destino de Network LoadBalancer conectado a este en la ID de instancia '10.215.20.90', por ejemplo 'i-03f6bb025c3dd12b5 bajo vpc - 'vpc-0ee17bb28f85a78c8', pero no puedo confirmar la lógica de la aplicación dentro de él.

Este es un problema de la aplicación que se encuentra en la instancia del grupo de destino y también puede confirmarlo accediendo directamente a ProductsServiceUrl usando un host bastión o CloudShell para ver si devuelve una respuesta.

sganado commented 1 month ago

Hice nuevamente un despliegue para que me den mas detalles de lo que esta pasando. parámetros de despliegue de retail demostorev8-Deployment Support-DKVBZ7K7JWU3 (imagen CloudFormation-Pila-retaildemostorev8-DeploymentSupport-DKVBZ7K7JWU3-10-03-2024_10_51_AM.png) imágenes del balanceador de carga: (loadbalanced.jpeg) El balanceador de carga para este despliegue es: http://retail-LoadB-pXFctwHmlYsi-7e260332dbad6d60.elb.us-east-1.amazonaws.com (retail-LoadB-pXFctwHmlYsi.jpeg) Cuando intento abrir la URL desde el navegador me da un timed out

No se puede acceder a este sitioretail-loadb-pxfctwhmlysi-7e260332dbad6d60.elb.us-east-1.amazonaws.com tardó demasiado en responder. Intenta: Comprobar la conexión. Comprobar el proxy y el firewall. ERR_CONNECTION_TIMED_OUT

Cambié el esquema para que sea público: Esquema Con conexión a Internet El esquema actual era: Esquema:interno

Cloud watch: https://us-east-1.console.aws.amazon.com/cloudwatch/home?region=us-east-1#logsV2:log-groups/log-group/$252Faws$252Flambda$252Fretaildemostorev8-Deploymen-LoadDataLambdaFunction-4tQwwZ8GwWvy/log-events/2024$252F10$252F03$252F$255B$2524LATEST$255D44cd4ae36f1b4f75ae2b1cf83b1c1a07 Error: <urlopen error [Errno 110] Se agotó el tiempo de conexión >


El problema que veo es que se agotó el tiempo de conexión de la URL del balanceador de carga. ¿Podría deberse a algo en la configuración? retail-LoadB-pXFctwHmlYsi loadbalanced CloudFormation-Pila-retaildemostorev8-DeploymentSupport-DKVBZ7K7JWU3-10-03-2024_10_51_AM

MustaphaU commented 1 month ago

Hi @sganado

A similar issue was raised here #626 but it's resolved. You might find the solution/discussion useful.

sganado commented 1 month ago

Gracias!! Me estaba pasando lo mismo! Quedo resuelto el problema del despliegue.