Serverless: Kumpulan Pengguna Kognito Duplikat dibuat ketika sumber daya dan fungsi ditentukan dengan nama yang sama

Dibuat pada 11 Sep 2018  ·  10Komentar  ·  Sumber: serverless/serverless

Ini adalah (Laporan Bug)

Deskripsi

Untuk laporan bug:
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)}

Itu berakhir dengan membuat dua UserPools dengan nama yang sama dan satu dengan fungsi pemicu terlampir, lainnya dengan kebijakan terlampir dan hal-hal lain yang saya definisikan di cognito-user-pool

Masalah serupa atau bergantung:

  • # 4207

Data tambahan

"tanpa server": "1.30.3"

bug caaws-event-cognito

Komentar yang paling membantu

Solusi Anda bekerja seperti pesona @robotlemons !! 🎉 Terima kasih banyak telah membagikannya!

Bagian yang benar-benar membingungkan bagi saya adalah bahwa dokumen menyebut CognitoUserPool sebagai MyUserPool sepanjang waktu, dan saya menyetel UserPoolName: ${self:provider.stage}-user-pool , jadi saya berpikir bahwa ketika mendeklarasikan lambda , kita harus melakukan:

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

Saya pikir dengan cara ini saya menetapkan nama yang sama untuk keduanya, tetapi kuncinya di sini adalah memberi atribut pool nilai yang sama dengan CognitoUserPool Anda, oleh karena itu mengapa dokumen menetapkannya sebagai MyUserPool .

Jadi saya akhirnya baru saja menyatakan kumpulan pengguna saya di cognito-user-pool.yml sebagai:

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

Dan di serverless.yml lambda dideklarasikan sebagai:

  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

Semoga ini bisa membantu orang lain di masa depan!

Sekali lagi terima kasih atas bantuan Anda! 💯

Semua 10 komentar

Mengalami masalah yang sama. Penasaran kapan resolusi bisa dicapai?

Saya juga mengalami masalah ini dan tidak bisa menyelesaikannya dengan mengikuti contoh di dokumen atau masalah tertutup lainnya

@ Ccastillo06 Saya dapat memperbaiki masalah dengan melakukannya ... (bagian yang dicetak tebal adalah bagian yang penting. Ini berhasil untuk saya bahkan setelah saya mengalami semua masalah.

CognitoUserPoolMyUserPool:
Jenis: AWS :: Cognito :: UserPool
Properti:
UserPoolName: mypool _ $ { self: provider.stage } _auth_pool
UsernameAttributes:
- surel
Skema:
- Nama: given_name
AttributeDataType: String
Dapat diubah: benar
Diperlukan: benar
- Nama: family_name
AttributeDataType: String
Dapat diubah: benar
Diperlukan: benar
- Nama: email
AttributeDataType: String
Dapat diubah: salah
Diperlukan: benar
- Nama: phone_number
AttributeDataType: String
Dapat diubah: benar
Diperlukan: benar
AutoVerifiedAttributes:
- surel

postConfirmation:
penangan: ..
ukuran memori: ...
acara:
- http:
jalur: ...
metode: letakkan
integrasi: lambda
cors: benar
pemberi otorisasi:
jenis: COGNITO_USER_POOLS
authorizerId:
Ref: ApiGatewayAuthorizer
- cognitoUserPool:pool: MyUserPoolpemicu: PostConfirmation

Solusi Anda bekerja seperti pesona @robotlemons !! 🎉 Terima kasih banyak telah membagikannya!

Bagian yang benar-benar membingungkan bagi saya adalah bahwa dokumen menyebut CognitoUserPool sebagai MyUserPool sepanjang waktu, dan saya menyetel UserPoolName: ${self:provider.stage}-user-pool , jadi saya berpikir bahwa ketika mendeklarasikan lambda , kita harus melakukan:

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

Saya pikir dengan cara ini saya menetapkan nama yang sama untuk keduanya, tetapi kuncinya di sini adalah memberi atribut pool nilai yang sama dengan CognitoUserPool Anda, oleh karena itu mengapa dokumen menetapkannya sebagai MyUserPool .

Jadi saya akhirnya baru saja menyatakan kumpulan pengguna saya di cognito-user-pool.yml sebagai:

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

Dan di serverless.yml lambda dideklarasikan sebagai:

  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

Semoga ini bisa membantu orang lain di masa depan!

Sekali lagi terima kasih atas bantuan Anda! 💯

@Bayu_joo
Maaf, saya sangat bingung dan butuh bantuan.

Jadi di deklarasi PostConfirmation, di bagian acara cognitoUserPool. Berapa nilai 'pool'? Saya sudah mencoba nama sebenarnya dari kumpulan pengguna dan terus membuat kumpulan pengguna baru. Saya juga mencoba nilainya langsung di bawah 'Resources' (dalam kasus Anda 'CognitoUserPoolMyUserPool').

Sekarang dalam nilai 'pool' Anda mengatakan Anda memasukkan 'MyUserPool' tanpa bagian CognitoUserPool, tetapi nama resource saya berbeda. Jadi, siapa namaku? Saya sudah mencoba nama lengkapnya dan tidak berhasil.

@ Studio23

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

Contoh ini, Anda akan menggunakan apa pun yang ada setelah CognitoUserPool sebagai nilai kumpulan Anda. Dalam kasus ini, ini adalah MyUserPool

@robotlemons Terima kasih atas tanggapan yang cepat!

Jadi saya harus mengganti nama sumber daya saya. Saat ini saya tidak memulainya dengan CognitoUserPool. Saat ini hanya disebut: MycompanyUserPool. Saya akan mengubahnya menjadi: CognitoUserPoolMyCompanyUserPool ... Apakah itu benar?

Iya

dikirim dari iPhone saya

Pada 11 April 2019, pukul 12:33, Studio2133 [email protected] menulis:

@robotlemons Terima kasih atas tanggapan yang cepat!

Jadi saya harus mengganti nama sumber daya saya. Saat ini saya tidak memulainya dengan CognitoUserPool. Saat ini hanya disebut: MycompanyUserPool. Saya akan mengubahnya menjadi: CognitoUserPoolMyCompanyUserPool ... Apakah itu benar?

-
Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub, atau nonaktifkan utasnya.

@ Studio2133 Dalam kasus Anda, Anda harus melakukan apa yang @robotlemons katakan, cukup tambahkan CognitoUserPool sebelum nama kumpulan pengguna Anda yang sebenarnya MycompanyUserPool .

Jadi pada akhirnya Anda harus memiliki: CognitoUserPoolMycompanyUserPool untuk nama kumpulan itu.

Jadi definisi kumpulan pengguna Anda di cognito-user-pool.yml harus:

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

Dan kemudian definisi pemicu lambda di serverless.yml harus:

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

Saya telah membuat ini berfungsi dengan baik untuk kami di proyek terbaru kami (memanggil lambda dan layanan lain dari AWS menggunakan pemicu PostConfirmation ) dan tidak memiliki masalah sama sekali.

Ingatlah untuk menghapus setiap kumpulan duplikat sebelum Anda membuat kumpulan tetap sehingga tidak ada yang membingungkan di panel kontrol AWS.

Semoga ini berguna dan menyelesaikan masalah!

@ Studio23
Saat Anda menambahkan acara cognitoUserPool ke lambda, Serverless secara otomatis membuat Cognito User Pool baru dan menambahkannya ke template CloudFormation yang Anda buat. Nama resource logis CloudFormation dari kumpulan ini adalah CognitoUserPool {normalizedPoolId}, dengan normalizedPoolId adalah nama yang Anda berikan untuk kumpulan di acara cognitoUserPool Anda. Ini adalah kumpulan tempat pemicu akan terhubung. Untuk menghubungkan pemicu ke kumpulan Anda sendiri yang Anda deklarasikan di Resources, Anda bisa memanfaatkan konvensi penamaan ini untuk mengganti kumpulan yang dihasilkan dengan menambahkan peristiwa cognitoUserPool. Untuk melakukannya, Anda perlu menggunakan CognitoUserPool {normalizedPoolId} sebagai nama sumber daya logis kumpulan Anda di bagian Sumber Daya. Ini akan menyebabkan Tanpa Server menggunakan kumpulan ini untuk menghubungkan pemicu Anda, alih-alih membuat yang baru.

Detail lebih lanjut tentang pendekatan ini dapat ditemukan di artikel ini .

Apakah halaman ini membantu?
0 / 5 - 0 peringkat