3
votes

Hôte DynamoDB inaccessible lors de l'exécution de la simulation d'amplification

J'utilise AWS Amplify pour configurer une API AppSync GraphQL. J'ai un schéma avec une annotation @model et j'essaie d'écrire un résolveur lambda qui lira / écrira dans la table DynamoDB que @model génère. Cependant, lorsque j'essaie de tester localement en utilisant amplify mock ma fonction JS jette

error { UnknownEndpoint: Inaccessible host: `dynamodb.us-east-1-fake.amazonaws.com'. This service may not be available in the `us-east-1-fake' region.

Je n'arrive pas à trouver beaucoup de documentation autour de ce cas d'utilisation (la plupart des exemples de résolveurs lambda lus à partir d'autres tables / API qui ne font pas partie de l'application amplify), donc tous les pointeurs sont appréciés. L'exécution de ce type de configuration est-elle même prise en charge ou dois-je pousser vers AWS pour effectuer un test?


1 commentaires

Je ne suggérerais pas de ne pas l'essayer localement. Le schéma fonctionne-t-il avec 'amplify push'?


3 Réponses :


-3
votes

votre hôte dynamodb est incorrect. dynamodb.us-east-1-fake n'est pas un hôte valide. Veuillez le mettre à jour avec le vrai nom d'hôte dynamodb.
Si vous exécutez la configuration locale, aws configure d'abord sur cli.


1 commentaires

Je me rends compte que c'est un "faux" nom d'hôte, mais comme j'essaie d'utiliser DynamoDB localement, j'ai pensé que c'était probablement une valeur définie par Amplify. Cependant, je ne peux pas savoir si c'est le cas. Mon fichier team-provider-info.json spécifie une région de us-west-2 et le modèle CloudFormation pour mon lambda passe dans la variable AWS :: Region en tant que région DynamoDB. Ma compréhension de l' amplify mock est que la région de l'environnement extrait doit être utilisée comme AWS :: Region, mais ce n'est peut-être pas le cas.



8
votes

Après quelques recherches sur le code CLI d'Amplify, j'ai trouvé une solution qui fonctionnera pour le moment.

C'est ici amplify mock initialise DynamoDB Local. Comme vous pouvez le voir, il ne définit pas l'indicateur --sharedDb qui, basé sur la documentation, signifie que les fichiers de base de données créés seront préfixés avec l'ID de clé d'accès de la demande, puis la région. L'identifiant de clé d'accès des demandes d'Amplify sera "fake" et la région est "us-fake-1" comme défini ici . De plus, le port de l'instance DynamoDB Local démarrée par Amplify est 62224 défini ici .

Par conséquent, pour vous connecter aux tables créées par Amplify, la configuration DynamoDB suivante est nécessaire

const ddb = new AWS.DynamoDB({
  region: 'us-fake-1',
  endpoint: "http://172.16.123.1:62224/",
  accessKeyId: "fake",
  secretAccessKey: "fake"
})

Si vous souhaitez utiliser l'AWS CLI avec les tables créées par Amplify, vous devrez créer un nouveau profil avec la région et les clés d'accès ci-dessus.

Je devrai encore faire un travail supplémentaire pour trouver un bon moyen de faire basculer ces valeurs de configuration entre les valeurs fictives locales et les valeurs réelles, mais cela débloque les tests locaux pour le moment.

Quant à une autre question que j'avais sur l'emplacement d'AWS :: Region de "us-east-1-fake", elle est définie ici mais elle ne semble pas être utilisée ailleurs. c'est-à-dire qu'il est défini comme valeur d'espace réservé lors de l'exécution d' amplify mock mais son utilisation comme région dans d'autres endroits pour des tests locaux ne semble pas fonctionner.


2 commentaires

Si vous utilisez l'atelier NoSQL qui génère ses propres informations d'identification, vous devrez modifier le fichier index.js référencé dans la réponse. Modifiez l'option --sharedDb sur true pour permettre à d'autres connexions d'accéder à la table créée par amplify mock


@ edward-foyle Comment ajouter un profil et l'utiliser dans la maquette d'amplification. J'ai ajouté les faux crédits dans le ~ / .aws / credentials et la fausse région dans le ~ / .aws / config faisant référence au profil. Il ne peut pas se connecter à l'URL DynamoDB. Donne une erreur: NetworkingError: connectez ECONNREFUSED. Aucune suggestion ?



0
votes

Veuillez essayer le paramètre ci-dessous, cela fonctionne bien pour moi,

const AWS = require('aws-sdk');

// Local
const dynamoDb = new AWS.DynamoDB.DocumentClient({
    region: 'us-fake-1',
    endpoint: "http://localhost:62224/",
    accessKeyId: "fake",
    secretAccessKey: "fake"
});

// Live
// const dynamoDb = new AWS.DynamoDB.DocumentClient();


0 commentaires