With the Custom Runtime and HTTP triggers of Function Compute, you can migrate F# ASP.NETCore projects with one click, and thus you can access the function using a browser or an HTTP client tool such as curl.

Prerequisites

You have completed the following operations:
Note
  • The examples in this topic apply to scenarios where Docker is installed. If you do not want to use Docker, you need to install. NET Core 3.1. For more information about installation, see dot.net.core3.1. For more information about the command, see the following command.
    https://github.com/awesome-fc/fc-custom-demo/blob/master/FSharp-demo/Makefile#L10-L18
  • If you have installed Funcraft, you can go to Step 2: Deploy and invoke the function.

Step 1: Prepare the environment

An easy and simple way to install Funcraft is to download the executable binary files.

  1. Install Funcraft on the local machine. For more information, see installation instructions.
  2. Run fun --version to check whether the installation is successful.
  3. Run fun config to configure Funcraft. Then configure Account ID, Access Key ID, Access Key Secret, and Default region name as prompted.
    $ fun config
    Aliyun Account ID 1234xxx
    Aliyun Access Key ID xxxx
    Aliyun Access Key Secret xxxx
    Default region name cn-xxxx
    The timeout in seconds for each SDK client invoking 300
    The maximum number of retries for each SDK client 5
    Allow to anonynously report usage statistics to improve the tool over time? (Y/n)

Step 2: Deploy and invoke the function

  1. Run the following command to clone the sample project to your local machine.
    git clone https:// github.com/awesome-fc/fc-custom-demo          
    Note If you do not have git installed, enter https://github.com/awesome-fc/fc-custom-demo in the address bar of your browser. Click the download button to download directly.
  2. Run the following command to go to the cloned sample project.
    cd FSharp-demo
  3. Run the following command to deploy the function.
    $ make deploy
    docker run -it -v $(pwd):/tmp mcr.microsoft.com/dotnet/core/sdk:3.1 bash -c "cd /tmp/FSharpDemo && dotnet publish -r linux-x64 -c Release --self-contained true && cd /tmp/FSharpDemo/bin/Release/netcoreapp3.1/linux-x64/publish && mv FSharpDemo bootstrap && chmod +x bootstrap"
    Microsoft (R) Build Engine version 16.5.0+d4cbfca49 for .NET Core
    Copyright (C) Microsoft Corporation. All rights reserved.
    
      Restore completed in 15.2 sec for /tmp/FSharpDemo/FSharpDemo.fsproj.
      FSharpDemo -> /tmp/FSharpDemo/bin/Release/netcoreapp3.1/linux-x64/FSharpDemo.dll
      FSharpDemo -> /tmp/FSharpDemo/bin/Release/netcoreapp3.1/linux-x64/publish/
    fun deploy -y
    ...
    Waiting for service fsharp_demo to be deployed...
            Waiting for function fc_fsharp to be deployed...
                    Waiting for packaging function fc_fsharp code...
                    The function fc_fsharp has been packaged. A total of 338 files were compressed and the final size was 39.3 MB
                    Waiting for HTTP trigger http_t to be deployed...
                    triggerName: http_t
                    methods: [ 'GET', 'POST', 'PUT', 'DELETE' ]
                    url: https://19861144305****.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/fsharp_demo/fc_fsharp/
                    Http Trigger will forcefully add a 'Content-Disposition: attachment' field to the response header, which cannot be overwritten 
                    and will cause the response to be downloaded as an attachment in the browser. This issue can be avoided by using CustomDomain.
    
                    trigger http_t deploy success
            function fc_fsharp deploy success
    service fsharp_demo deploy success
    
    Detect 'DomainName:Auto' of custom domain 'my_domain'
    Fun will reuse the temporary domain 16225220-19861144****.test.functioncompute.com, expired at 2020-04-17 10:07:00, limited by 1000 per day.
    
    Waiting for custom domain my_domain to be deployed...
    custom domain my_domain deploy success
    						
  4. Run the following command to invoke the deployed function.

    In the example, directly use curl or the browser to access the temporary domain name 16225220-198611443 *****. test.functioncompute.com after the deployment is successful .

    $ curl 16225220-1986114430****.test.functioncompute.com/weatherforecast 
    [{"date":"2020-04-07T07:46:29.4315198+00:00","temperatureC":49,"summary":"Hot","temperatureF":120},{"date":"2020-04-08T07:46:29.431527+00:00","temperatureC":11,"summary":"Bracing","temperatureF":51},{"date":"2020-04-09T07:46:29.4315276+00:00","temperatureC":45,"summary":"Bracing","temperatureF":112},{"date":"2020-04-10T07:46:29.431528+00:00","temperatureC":13,"summary":"Chilly","temperatureF":55},{"date":"2020-04-11T07:46:29.4315284+00:00","temperatureC":-8,"summary":"Mild","temperatureF":18}]