I have had some trivial toy Haskell projects running on AppEngine just testing it out.
Using the AppEngine custom runtime it's trivial to deploy an application. I use OSX as my development machine which complicates it a little but all you need to do is create a statically linked binary and a Dockerfile to start it. The only interesting bit in the Docker file is my app looks for a port environment variable which i hardcore and I use a optimised base image meaning the docker container is around 20Mb in total. https://github.com/fpco/haskell-scratch FROM fpco/haskell-scratch:integer-gmp COPY ./.stack-work/install/x86_64-linux-dkda49f7ca9b244180d3cfb1987cbc9743/ lts-7.0/8.0.1/bin/myapp-exe /usr/bin/ CMD PORT=8080 myapp-exe I'm using stack to build my projects. As I'm on OSX I need it to tell stack to build the app in a linux docker container to run in the 'fpco/haskell-scratch' container above. in the stack.yml I add the below image: container: base: "fpco/haskell-scratch:integer-gmp" docker: enable: true Then to build I run the below which generates the executable used in the Dockerfile stack build If on Linux you probably won't need to build in a docker container and just use: stack build --ghc-options='-optl-static -optl-pthread' --force-dirty. Interacting with the services in AppEngine where they have a public API shouldn't be an issue, hit the documented HTTP endpoint as they specify. It's the API's which don't have a public Google Cloud equivalent that are problematic. Search being one. AppEngine give the tools for custom runtimes but don't give docs for interacting with things such as the search API so you can write your own API using your own runtime. I've not had anytime yet to reverse engineer the protocol buffer sidecar they have on the instances....If i wasn't playing with a toy project and on a deadline I'd write a separate service using Scala + the Java sdk's to deploy as a thin REST service for search / mail then call that from Haskell. With the custom runtimes AppEngine should publish the sidecar API so people can create open source SDK's which would only help grow AppEngine. On Saturday, 15 October 2016 00:23:41 UTC+11, Thomas Koch wrote: > > Hi Adam, > > have you had success trying Haskell on AppEngine? I'd love to try it out > myself once I've time for this and would love to learn from your experience > or help you if you got stuck. > > Regards, > > Thomas > > Am Mittwoch, 5. Oktober 2016 11:26:40 UTC+2 schrieb Adam Evans: >> >> Yes. >> >> That looks to be the simplest / obvious solution, take the off the shelf >> Java / Python AppEngine SDK and create a RESTish wrapper around the search >> features. Deploying in AppEngine I'd then need to look at service to >> service auth to restrict access so my index is not publicly available. >> >> The primary reason for investigating AppEngine is cheap computing on the >> the micro instances + search vs AWS EC2 with ElasticSearch. I would prefer >> not have an instance specifically as a search sidecar to keep the cost down. >> >> I'll try and investigate the ProtoBuf api reverse engineered by the PHP >> project. It would be useful if Google opened up the spec if providing >> custom runtimes so 3rd parties can implement the libraries, it'd also make >> AppEngine a no brainer as a PaaS with custom runtime support. >> >> On Wednesday, 5 October 2016 07:52:30 UTC+11, Tom Walder wrote: >>> >>> I guess you could deploy a PHP/Python/Standard runtime app to just >>> expose a RESTish API to the Search service. >>> >>> I've done this before. >>> >> -- You received this message because you are subscribed to the Google Groups "Google App Engine" group. To unsubscribe from this group and stop receiving emails from it, send an email to google-appengine+unsubscr...@googlegroups.com. To post to this group, send email to firstname.lastname@example.org. Visit this group at https://groups.google.com/group/google-appengine. To view this discussion on the web visit https://groups.google.com/d/msgid/google-appengine/0622091b-1a3e-414e-b36d-924f424404ce%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.