Serverless: يتم إنشاء تجمع مستخدم Cognito مكرر عند تحديد المورد والوظيفة بنفس الاسم

تم إنشاؤها على ١١ سبتمبر ٢٠١٨  ·  10تعليقات  ·  مصدر: serverless/serverless

هذا (تقرير خطأ)

وصف

لتقارير الأخطاء:
cognito-user-pool.yml

Resources:
  CognitoUserPool:
    Type: AWS::Cognito::UserPool
    Properties:
      # Generate a name based on the stage
      UserPoolName: ${self:provider.stage}MyUserPool

serverless.yml

functions:
  preSignUp:
    handler: presignup.handler
    events:
      - cognitoUserPool:
          pool: ${self:provider.stage}MyUserPool
          trigger: PreSignUp

resources:
  - ${file(resources/cognito-user-pool.yml)}

انتهى الأمر بإنشاء وحدتي UserPools بنفس الاسم وواحدة مع وظيفة المشغل المرفقة ، والأخرى مع السياسات المرفقة والأشياء الأخرى التي أحددها في cognito-user-pool

قضايا مماثلة أو تابعة:

  • # 4207

بيانات إضافية

"بدون خادم": "1.30.3"

bug caaws-event-cognito

التعليق الأكثر فائدة

الحل الخاص بك يعمل مثل السحر @ robotlemons !! 🎉 شكرا جزيلا لك على مشاركتها!

الجزء الذي كان محيرًا حقًا بالنسبة لي هو أن المستندات تستدعي CognitoUserPool كـ MyUserPool طوال الوقت ، وكنت أقوم بإعداد UserPoolName: ${self:provider.stage}-user-pool ، لذلك اعتقدت أنه عند التصريح عن لامدا ، يجب أن نقوم بما يلي:

- cognitoUserPool:
  pool: ${self:provider.stage}-user-pool
  trigger: PostConfirmation

اعتقدت أنه بهذه الطريقة كنت أقوم بتعيين نفس الاسم لكليهما ، ولكن المفتاح هنا هو إعطاء السمة pool نفس قيمة CognitoUserPool الخاصة بك ، ولهذا السبب قامت المستندات بتعيينها على أنها MyUserPool .

لذلك أخيرًا أعلنت للتو أن مجموع المستخدمين الخاص بي cognito-user-pool.yml النحو التالي:

Resources:
  CognitoUserPoolMyUserPool:
    Type: AWS::Cognito::UserPool
    Properties:
      UserPoolName: ${self:provider.stage}-user-pool

وفي serverless.yml يتم الإعلان عن لامدا على أنها:

  postConfirmation:
    handler: src/cognito/postConfirmation.handler
    events:
      - cognitoUserPool:
          pool: MyUserPool  // Notice that this one is the declared name of my pool CognitoUserPoolMyUserPool but without the CognitoUserPool part.
          trigger: PostConfirmation

أتمنى أن يساعد هذا شخصًا آخر في المستقبل!

شكرا جزيلا مرة أخرى لمساعدتك! 💯

ال 10 كومينتر

وجود نفس المشكلة. هل تشعر بالفضول عندما يتم التوصل إلى حل؟

أواجه هذه المشكلة أيضًا ولا يمكنني حلها باتباع الأمثلة الموجودة في المستندات أو المشكلات الأخرى المغلقة

@ Ccastillo06 لقد تمكنت من تصحيح المشكلة من خلال القيام بذلك ... (الأجزاء الغامقة هي القطعة المهمة. لقد نجح هذا الأمر بالنسبة لي حتى بعد أن كنت أعاني من جميع المشكلات.

CognitoUserPoolMyUserPool:
النوع: AWS :: Cognito :: UserPool
الخصائص:
UserPoolName: mypool _ $ { self: Provider.stage } _auth_pool
اسم المستخدم
- البريد الإلكتروني
مخطط:
- الاسم: الاسم_الاسم
AttributeDataType: سلسلة
متغير: صحيح
مطلوب: صحيح
- الاسم: اسم العائلة
AttributeDataType: سلسلة
متغير: صحيح
مطلوب: صحيح
- الاسم: البريد الإلكتروني
AttributeDataType: سلسلة
متغير: خطأ
مطلوب: صحيح
- الاسم: phone_number
AttributeDataType: سلسلة
متغير: صحيح
مطلوب: صحيح
السمات التي تم التحقق منها تلقائيًا:
- البريد الإلكتروني

بعد تأكيد:
المعالج: ..
حجم الذاكرة: ...
الأحداث:
- http:
المسار: ...
الطريقة: وضع
التكامل: لامدا
كورس: صحيح
المفوض:
اكتب: COGNITO_USER_POOLS
المعرف:
المرجع: ApiGatewayAuthorizer
- cognitoUserPool:تجمع: MyUserPoolالمشغل: PostConfirmation

الحل الخاص بك يعمل مثل السحر @ robotlemons !! 🎉 شكرا جزيلا لك على مشاركتها!

الجزء الذي كان محيرًا حقًا بالنسبة لي هو أن المستندات تستدعي CognitoUserPool كـ MyUserPool طوال الوقت ، وكنت أقوم بإعداد UserPoolName: ${self:provider.stage}-user-pool ، لذلك اعتقدت أنه عند التصريح عن لامدا ، يجب أن نقوم بما يلي:

- cognitoUserPool:
  pool: ${self:provider.stage}-user-pool
  trigger: PostConfirmation

اعتقدت أنه بهذه الطريقة كنت أقوم بتعيين نفس الاسم لكليهما ، ولكن المفتاح هنا هو إعطاء السمة pool نفس قيمة CognitoUserPool الخاصة بك ، ولهذا السبب قامت المستندات بتعيينها على أنها MyUserPool .

لذلك أخيرًا أعلنت للتو أن مجموع المستخدمين الخاص بي cognito-user-pool.yml النحو التالي:

Resources:
  CognitoUserPoolMyUserPool:
    Type: AWS::Cognito::UserPool
    Properties:
      UserPoolName: ${self:provider.stage}-user-pool

وفي serverless.yml يتم الإعلان عن لامدا على أنها:

  postConfirmation:
    handler: src/cognito/postConfirmation.handler
    events:
      - cognitoUserPool:
          pool: MyUserPool  // Notice that this one is the declared name of my pool CognitoUserPoolMyUserPool but without the CognitoUserPool part.
          trigger: PostConfirmation

أتمنى أن يساعد هذا شخصًا آخر في المستقبل!

شكرا جزيلا مرة أخرى لمساعدتك! 💯

تضمين التغريدة
أنا آسف ، أنا في حيرة من أمري وأحب بعض المساعدة.

لذلك في إعلان PostConfirmation ، في قسم أحداث cognitoUserPool. ماذا يجب أن تكون قيمة "التجمع"؟ لقد جربت الاسم الفعلي لتجمع المستخدمين ويستمر في إنشاء تجمعات مستخدمين جديدة. لقد جربت أيضًا القيمة مباشرةً ضمن "الموارد" (في حالتك "CognitoUserPoolMyUserPool").

الآن في قيمة "pool" ، قلت إنك أدخلت "MyUserPool" بدون جزء CognitoUserPool ، لكن اسم المورد الخاص بي مختلف. إذن ماذا يجب أن يكون اسمي؟ لقد جربت الاسم الكامل ولم ينجح ذلك.

@ Studio2133

Resources:
  CognitoUserPoolMyUserPool:
    Type: AWS::Cognito::UserPool
    Properties:
      UserPoolName: ${self:provider.stage}-user-pool

في هذا المثال ، يمكنك استخدام كل ما هو بعد CognitoUserPool كقيمة للتجمع. في هذه الحالة ، سيكون MyUserPool

robotlemons شكرا على الاستجابة السريعة!

لذلك يجب أن أعيد تسمية موردي. حاليًا لا يمكنني البدء بـ CognitoUserPool. حاليًا يطلق عليه فقط: MycompanyUserPool. سأغيرها إلى: CognitoUserPoolMyCompanyUserPool ... هل هذا صحيح؟

نعم

مرسل من الايفون الخاص بي

في 11 أبريل 2019 ، الساعة 12:33 مساءً ، كتب Studio2133 [email protected] :

robotlemons شكرا على الاستجابة السريعة!

لذلك يجب أن أعيد تسمية موردي. حاليًا لا يمكنني البدء بـ CognitoUserPool. حاليًا يطلق عليه فقط: MycompanyUserPool. سأغيرها إلى: CognitoUserPoolMyCompanyUserPool ... هل هذا صحيح؟

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذه الرسالة الإلكترونية مباشرةً ، أو اعرضها على GitHub ، أو قم بكتم صوت الموضوع.

@ Studio2133 في حالتك ، يجب أن تفعل ما قالتهrobotlemons ، فقط أضف CognitoUserPool قبل اسم تجمع المستخدم الفعلي MycompanyUserPool .

لذا في النهاية يجب أن يكون لديك: CognitoUserPoolMycompanyUserPool لاسم التجمع هذا.

لذلك يجب أن يكون تعريف تجمع المستخدمين في cognito-user-pool.yml :

Resources:
  CognitoUserPoolMycompanyUserPool:
    Type: AWS::Cognito::UserPool
    Properties:
      UserPoolName: ${self:provider.stage}-user-pool

ومن ثم يجب أن يكون تعريف مشغل lambda في serverless.yml :

 postConfirmation:
    handler: src/cognito/postConfirmation.handler
    events:
      - cognitoUserPool:
          pool: MycompanyUserPool  
          trigger: PostConfirmation

لقد نجحت في العمل بشكل جيد بالنسبة لنا في أحدث مشروع لدينا (الاتصال بأجهزة lambdas والخدمات الأخرى من AWS باستخدام مشغل PostConfirmation ) ولم أواجه أي مشاكل على الإطلاق.

تذكر إزالة كل مجموعة مكررة قبل إنشاء التجمعات الثابتة حتى لا يكون هناك شيء محير في لوحة تحكم AWS.

أتمنى أن يكون هذا مفيدًا ويحل المشكلة!

@ Studio2133
عند إضافة حدث cognitoUserPool إلى lambda ، يقوم Serverless تلقائيًا بإنشاء تجمع مستخدم Cognito جديد وإضافته إلى نموذج CloudFormation الذي تم إنشاؤه. اسم المورد المنطقي CloudFormation لهذا التجمع هو CognitoUserPool {normalizedPoolId} ، حيث يعد normalizedPoolId هو الاسم الذي توفره للتجمع في حدث cognitoUserPool. هذا هو التجمع الذي سيتم توصيل المشغل به. لتوصيل المشغل بالمجموعة الخاصة بك التي تعلنها في الموارد ، يمكنك الاستفادة من اصطلاح التسمية هذا لتجاوز المجموعة التي تم إنشاؤها عن طريق إضافة حدث cognitoUserPool. للقيام بذلك ، تحتاج إلى استخدام CognitoUserPool {normalizedPoolId} كاسم المورد المنطقي لمجموعتك في قسم الموارد. سيؤدي ذلك إلى قيام Serverless باستخدام هذا التجمع لتوصيل المشغل به ، بدلاً من إنشاء مجموعة جديدة.

يمكن العثور على مزيد من التفاصيل حول هذا النهج في هذه المقالة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات