good questions! If there isn't a huge volume of events, you can just store them in a database like RDS (which can be much cheaper than DynamoDB, if you don't need real-time access to past data). You can then export the data for featurization and training from the database.
Regarding your second question, you can design your schema so that it accounts for both signed-in and anonymous users.
If you need real-time predictions, you can place your feature transformation in a Python module that is shared between real-time inference and training to guarantee consistency