Passer au contenu

Comment puis-je résoudre les problèmes liés à une règle AWS IoT qui ne parvient pas à envoyer de messages vers une rubrique Amazon MSK ?

Lecture de 6 minute(s)
0

Je souhaite résoudre une règle AWS IoT Core qui ne parvient pas à envoyer de messages vers une rubrique Amazon Managed Streaming for Apache Kafka (Amazon MSK).

Brève description

Lorsqu'une règle AWS IoT ne publie pas de message sur un cluster Amazon MSK, l'un des messages d'erreur suivants s’affiche :

  • « KafkaAction n'a pas réussi à envoyer de message aux serveurs d'amorçage spécifiés. Rubrique <topic\ _nom> non présente dans les métadonnées après 1 000 ms. »
  • « KafkaAction n'a pas réussi à envoyer de message aux serveurs d'amorçage spécifiés. Échec de la liaison SSL. »
  • « KafkaAction n'a pas réussi à envoyer de message aux serveurs d'amorçage spécifiés. « Une erreur inconnue s’est produite. »
  • « KafkaAction n'a pas réussi à envoyer de message aux serveurs d'amorçage spécifiés. Aucune URL d’amorçage soluble n'est donnée dans bootstrap.servers. »

Résolution

Avant de commencer à résoudre les problèmes, procédez comme suit :

  1. Configurez la journalisation AWS IoT dans la même région AWS que la règle AWS IoT.
  2. Vérifiez la configuration de la règle AWS IoT et des clusters Amazon MSK. Pour en savoir plus, consultez la section Étape 3. Configurez le producteur et le consommateur Kafka sur AWS Cloud9 pour tester la configuration de Notes de champ : Envoyez des messages à l'aide d'une action de règle IoT à Amazon Managed Streaming pour Apache Kafka.

Résoudre les problèmes en fonction du message d'erreur KafkaAction que vous avez reçu

Remarque : Assurez-vous d'utiliser les numéros de port appropriés pour communiquer avec les ordinateurs clients.

Erreur : KafkaAction n'a pas réussi à envoyer de message aux serveurs d'amorçage spécifiés. Rubrique non présente dans les métadonnées après 1 000 ms.

Cette erreur se produit lorsqu'AWS IoT Core ne peut pas accéder aux métadonnées de la rubrique définie sur le cluster Amazon MSK. Pour résoudre ce problème, procédez comme suit :

  1. Vérifiez si la rubrique concerne le cluster Amazon MSK. 
    Remarque : Remplacez example-topic-name par le nom de votre rubrique.

    ./bin/kafka-topics.sh —list —zookeeper $ZOOKEEPER_STRING | grep example-topic-name
  2. Vérifiez si les chaînes de connexion correctes pour le serveur d’amorçage et ZooKeeper se trouvent dans la configuration des règles AWS IoT. Vous trouverez le serveur d’amorçage et les chaînes de connexion ZooKeeper sur la page Informations sur le client dans les paramètres Amazon MSK.

  3. Vérifiez le groupe de sécurité mappé au cluster. Le groupe de sécurité doit autoriser le trafic entrant vers les ports mappés pour le serveur d'amorçage depuis la destination Amazon Virtual Private Cloud (Amazon VPC).

  4. Vérifiez si les ports de ZooKeeper autorisent le trafic entrant. ZooKeeper utilise le port 2181 pour le texte en clair et le port 2182 pour le chiffrement TLS.

  5. (Facultatif) Si la destination et le cluster Amazon VPC ne partagent pas le même Amazon VPC et le même sous-réseau, créez une passerelle NAT dans vos sous-réseaux. Cela vous permet de transférer des messages depuis AWS IoT Core vers un cluster Amazon MSK public. Pour plus d'informations, consultez la section Connexion à un cluster Amazon MSK.

  6. Lancez une instance Amazon Elastic Compute Cloud (Amazon EC2) dans le même sous-réseau que le cluster Amazon MSK.

  7. Vérifiez si les ports sont ouverts :
    Remarque : Remplacez example-port-number par le numéro de port.

    Amorçage :

    telnet bootstrap-broker example-port-number

    ZooKeeper :

    telnet Apache-ZooKeeper-node example-port-number
  8. Vérifiez si le rôle AWS Identity and Access Management (IAM) attaché à la règle AWS IoT dispose des autorisations appropriées. Le rôle IAM doit disposer des autorisations nécessaires pour gérer les interfaces réseau Elastic dans Amazon VPC :

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ec2:CreateNetworkInterface",
                    "ec2:DescribeNetworkInterfaces",
                    "ec2:CreateNetworkInterfacePermission",
                    "ec2:DeleteNetworkInterface",
                    "ec2:DescribeSubnets",
                    "ec2:DescribeVpcs",
                    "ec2:DescribeVpcAttribute",
                    "ec2:DescribeSecurityGroups"
                ],
                "Resource": "*"
    
             }
        ]
    }
  9. Si le cluster Amazon MSK est configuré avec un nom d'utilisateur et un mot de passe, vérifiez si les autorisations figurent dans la stratégie :

    {
                "Effect": "Allow",
                "Action": [
                    "secretsmanager:GetSecretValue",
                    "secretsmanager:DescribeSecret"
                ],
                "Resource": "arn:aws:secretsmanager:region:account-id:"
            }
  10. Vérifiez si la stratégie d’approbation autorise AWS IoT Core à endosser le rôle :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "iot.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
  1. (Facultatif) Si vous utilisez une clé gérée par le client pour chiffrer les données au repos, assurez-vous que le rôle IAM dispose des autorisations appropriées. Le rôle IAM doit être autorisé à utiliser la clé AWS Key Management Service (AWS KMS) pour l'appelant. Dans l'exemple de politique IAM suivant, le rôle IAM reçoit des autorisations AWS KMS :
    Remarque : Remplacez example-account-id par votre ID de compte et example-iam-role par votre rôle IAM.
{  
            "Sid": "Enable IAM User Permissions",  
            "Effect": "Allow",  
            "Principal": [  
                "AWS": {  
                    "arn:aws:iam::example-account-id:example-iam-role",  
                    "arn:aws:iam::example-account-id:root"  
                }  
            ],  
            "Action": "kms:*",  
            "Resource": "*"  
}
  1. Vérifiez que le rôle IAM endossé par la règle AWS IoT est autorisé à effectuer des actions AWS KMS dans la stratégie IAM.
  2. Vérifiez si la partition appropriée se trouve sur le cluster Amazon MSK. Si vous n'avez qu'une seule partition (0) et que la règle AWS IoT tente d'accéder à une partition (1), le message d'erreur s'affiche à nouveau.

Erreur : KafkaAction n'a pas réussi à envoyer de message aux serveurs d'amorçage spécifiés. Échec de la liaison SSL.

Cette erreur se produit lorsque le cluster Amazon MSK rencontre un problème lors de la liaison TLS avec le cluster Amazon MSK. Si cette erreur s’affiche, vous devez utiliser les certificats émis par AWS Private Certificate Authority (AWS Private CA). Vous pouvez ajouter des certificats AWS Private CA à un magasin de clés et aux règles AWS IoT. Pour en savoir plus, consultez la section Authentification TLS mutuelle.

Erreur : KafkaAction n'a pas réussi à envoyer de message aux serveurs d'amorçage spécifiés. Une erreur inconnue s’est produite.
Erreur : KafkaAction n'a pas réussi à envoyer de message aux serveurs d'amorçage spécifiés. Aucune URL d’amorçage soluble n'est donnée dans bootstrap.servers.

Pour résoudre ces erreurs, effectuez les étapes 1 à 13 précédentes. Si les messages d'erreur s’affichent toujours, augmentez progressivement le nombre de messages publiés dans la rubrique AWS IoT. Si les problèmes persistent, contactez AWS Support.

Informations connexes

Apache Kafka

Comment intégrer AWS IoT Core à Amazon MSK

Diffuser des données à grande échelle vers Amazon Managed Streaming pour Apache Kafka (Amazon MSK)

AWS OFFICIELA mis à jour il y a 2 ans