functions_framework 0.1.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yardopts +6 -2
- data/CHANGELOG.md +38 -0
- data/README.md +57 -137
- data/bin/functions-framework-ruby +19 -0
- data/docs/deploying-functions.md +182 -0
- data/docs/overview.md +142 -0
- data/docs/running-a-functions-server.md +122 -0
- data/docs/testing-functions.md +169 -0
- data/docs/writing-functions.md +261 -0
- data/lib/functions_framework.rb +19 -42
- data/lib/functions_framework/cli.rb +71 -13
- data/lib/functions_framework/cloud_events.rb +9 -109
- data/lib/functions_framework/cloud_events/errors.rb +42 -0
- data/lib/functions_framework/cloud_events/event.rb +51 -249
- data/lib/functions_framework/cloud_events/event/v1.rb +363 -0
- data/lib/functions_framework/cloud_events/http_binding.rb +270 -0
- data/lib/functions_framework/cloud_events/json_format.rb +122 -0
- data/lib/functions_framework/function.rb +7 -11
- data/lib/functions_framework/legacy_event_converter.rb +145 -0
- data/lib/functions_framework/registry.rb +3 -27
- data/lib/functions_framework/server.rb +63 -42
- data/lib/functions_framework/testing.rb +60 -20
- data/lib/functions_framework/version.rb +1 -1
- metadata +16 -6
- data/lib/functions_framework/cloud_events/binary_content.rb +0 -59
- data/lib/functions_framework/cloud_events/json_structure.rb +0 -88
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d09fadc9facfc650793e4c6c30f8dab5f2e5909d0d068d18e0da0bd8a748115d
|
4
|
+
data.tar.gz: 7b99ab480e94f1ed4eae784121030a07106451cdc1ddd0de5e5b1d7edabbe41f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b4cc30e0acb40f3de6e9a412b240c2f910a539d9b9e76085bcb701d605f657b5239b4bbeabf9a7f5e78c220ff4931ae34c7f21d028d4e472874308c91d26d997
|
7
|
+
data.tar.gz: d059a1fc586dfb12bbd06a757abf46227f0dcfc54c8653365198b596045a0c34d3fd4d00fcddc331a19d5bb028f5e52f5684aa022136b1258ce59a31ec195bd2
|
data/.yardopts
CHANGED
@@ -2,9 +2,13 @@
|
|
2
2
|
--title=Functions Framework
|
3
3
|
--markup markdown
|
4
4
|
--markup-provider redcarpet
|
5
|
-
--main=
|
5
|
+
--main=docs/overview.md
|
6
6
|
./lib/functions_framework/**/*.rb
|
7
7
|
./lib/functions_framework.rb
|
8
8
|
-
|
9
|
-
|
9
|
+
docs/overview.md
|
10
|
+
docs/writing-functions.md
|
11
|
+
docs/testing-functions.md
|
12
|
+
docs/running-a-functions-server.md
|
13
|
+
docs/deploying-functions.md
|
10
14
|
CHANGELOG.md
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,43 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
### v0.3.1 / 2020-06-27
|
4
|
+
|
5
|
+
* Fixed crash when using "return" directly in a function block.
|
6
|
+
* Added a more flexible request generation helper in the testing module.
|
7
|
+
* Fixed several typos in the documentation.
|
8
|
+
|
9
|
+
### v0.3.0 / 2020-06-26
|
10
|
+
|
11
|
+
* Updated the CloudEvent data format for converted pubsub events to conform to Cloud Run's conversion.
|
12
|
+
|
13
|
+
### v0.2.1 / 2020-06-25
|
14
|
+
|
15
|
+
* The `--signature-type` check recognizes the legacy `event` type.
|
16
|
+
|
17
|
+
### v0.2.0 / 2020-06-24
|
18
|
+
|
19
|
+
Significant changes:
|
20
|
+
|
21
|
+
* Converts legacy GCF events and passes them to functions as CloudEvents.
|
22
|
+
* The executable is now named `functions-framework-ruby` to avoid collisions with functions frameworks for other languages.
|
23
|
+
* Deprecated the `event` function type. Use `cloud_event`.
|
24
|
+
* The CloudEvents implementation is now fully-featured and can encode as well as decode events.
|
25
|
+
* Wrote an expanded set of getting-started documentation.
|
26
|
+
|
27
|
+
Minor changes:
|
28
|
+
|
29
|
+
* `Testing.load_temporary` now caches loaded functions so they don't have to be reloaded for subsequent tests.
|
30
|
+
* The executable recognizes the `--signature-type` flag, and verifies that the type is correct.
|
31
|
+
* Error reporting is expanded and improved.
|
32
|
+
* Fixed a crash when a batch CloudEvent was received. (These are still not supported, and now result in a 400.)
|
33
|
+
* Renamed a few undocumented environment variables, and added support for a logging level environment variable. All CLI flags now have associated environment variables.
|
34
|
+
* Several fixes to the example code, and added a new Sinatra example.
|
35
|
+
|
36
|
+
### v0.1.1 / 2020-02-27
|
37
|
+
|
38
|
+
* Server returns 404 when receiving a /favicon.ico or /robots.txt request.
|
39
|
+
* Correct a rack constant name in Testing#make_post_request
|
40
|
+
|
3
41
|
### v0.1.0 / 2020-01-30
|
4
42
|
|
5
43
|
* Initial release
|
data/README.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
# Functions Framework
|
1
|
+
# Functions Framework [](https://rubydoc.info/gems/functions_framework/FunctionsFramework) [](https://badge.fury.io/rb/functions_framework)
|
2
2
|
|
3
3
|
An open source framework for writing lightweight, portable Ruby functions that
|
4
4
|
run in a serverless environment. Functions written to this Framework will run
|
5
5
|
in many different environments, including:
|
6
6
|
|
7
|
-
* [Google Cloud Functions](https://cloud.google.com/functions) *(
|
7
|
+
* [Google Cloud Functions](https://cloud.google.com/functions) *(in preview)*
|
8
8
|
* [Cloud Run or Cloud Run for Anthos](https://cloud.google.com/run)
|
9
9
|
* Any other [Knative](https://github.com/knative)-based environment
|
10
10
|
* Your local development machine
|
@@ -12,7 +12,7 @@ in many different environments, including:
|
|
12
12
|
The framework allows you to go from:
|
13
13
|
|
14
14
|
```ruby
|
15
|
-
FunctionsFramework.http do |request|
|
15
|
+
FunctionsFramework.http("hello") do |request|
|
16
16
|
"Hello, world!\n"
|
17
17
|
end
|
18
18
|
```
|
@@ -24,11 +24,8 @@ curl http://my-url
|
|
24
24
|
# Output: Hello, world!
|
25
25
|
```
|
26
26
|
|
27
|
-
|
28
|
-
request handling logic.
|
29
|
-
|
30
|
-
For more information about the Functions Framework, see
|
31
|
-
https://github.com/GoogleCloudPlatform/functions-framework
|
27
|
+
Running on a fully-managed or self-managed serverless environment, without
|
28
|
+
requiring an HTTP server or complicated request handling logic.
|
32
29
|
|
33
30
|
## Features
|
34
31
|
|
@@ -36,26 +33,14 @@ https://github.com/GoogleCloudPlatform/functions-framework
|
|
36
33
|
* Invoke functions in response to requests.
|
37
34
|
* Automatically unmarshal events conforming to the
|
38
35
|
[CloudEvents](https://cloudevents.io) spec.
|
36
|
+
* Automatically convert most legacy events from Google Cloud services such
|
37
|
+
as Cloud Pub/Sub and Cloud Storage, to CloudEvents.
|
39
38
|
* Spin up a local development server for quick testing.
|
40
39
|
* Integrate with standard Ruby libraries such as Rack and Minitest.
|
41
40
|
* Portable between serverless platforms.
|
41
|
+
* Supports all non-end-of-life versions of Ruby.
|
42
42
|
|
43
|
-
##
|
44
|
-
|
45
|
-
Install the Functions Framework via Rubygems:
|
46
|
-
|
47
|
-
```sh
|
48
|
-
gem install functions_framework
|
49
|
-
```
|
50
|
-
|
51
|
-
Or add it to your Gemfile for installation using Bundler:
|
52
|
-
|
53
|
-
```ruby
|
54
|
-
# Gemfile
|
55
|
-
gem "functions_framework", "~> 0.1"
|
56
|
-
```
|
57
|
-
|
58
|
-
### Supported Ruby versions
|
43
|
+
## Supported Ruby versions
|
59
44
|
|
60
45
|
This library is supported on Ruby 2.4+.
|
61
46
|
|
@@ -68,14 +53,14 @@ about the Ruby support schedule.
|
|
68
53
|
|
69
54
|
## Quickstart
|
70
55
|
|
71
|
-
|
56
|
+
Here is how to run a Hello World function on your local machine.
|
72
57
|
|
73
58
|
Create a `Gemfile` listing the Functions Framework as a dependency:
|
74
59
|
|
75
60
|
```ruby
|
76
61
|
# Gemfile
|
77
62
|
source "https://rubygems.org"
|
78
|
-
gem "functions_framework", "~> 0.
|
63
|
+
gem "functions_framework", "~> 0.3"
|
79
64
|
```
|
80
65
|
|
81
66
|
Create a file called `app.rb` and include the following code. This defines a
|
@@ -96,123 +81,58 @@ running your "hello" function:
|
|
96
81
|
```sh
|
97
82
|
bundle install
|
98
83
|
# ...installs the functions_framework gem and other dependencies
|
99
|
-
bundle exec functions-framework --target hello
|
84
|
+
bundle exec functions-framework-ruby --target hello
|
100
85
|
# ...starts the web server in the foreground
|
101
86
|
```
|
102
87
|
|
103
88
|
In a separate shell, you can send requests to this function using curl:
|
104
89
|
|
105
90
|
```sh
|
106
|
-
curl localhost:8080
|
91
|
+
curl http://localhost:8080
|
107
92
|
# Output: Hello, world!
|
108
93
|
```
|
109
94
|
|
110
|
-
Stop the
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
unmarshalling of the event data.
|
155
|
-
|
156
|
-
Change `app.rb` to read:
|
157
|
-
|
158
|
-
```ruby
|
159
|
-
# app.rb
|
160
|
-
require "functions_framework"
|
161
|
-
|
162
|
-
FunctionsFramework.event("my-handler") do |data, context|
|
163
|
-
FunctionsFramework.logger.info "I received #{data.inspect}"
|
164
|
-
end
|
165
|
-
```
|
166
|
-
|
167
|
-
Start up the framework with this new function:
|
168
|
-
|
169
|
-
```sh
|
170
|
-
bundle install
|
171
|
-
bundle exec functions-framework --target my-handler
|
172
|
-
```
|
173
|
-
|
174
|
-
In a separate shell, you can send a CloudEvent to this function using curl:
|
175
|
-
|
176
|
-
```sh
|
177
|
-
curl --header "Content-Type: text/plain; charset=utf-8" \
|
178
|
-
--header "CE-ID: 12345" \
|
179
|
-
--header "CE-Source: curl" \
|
180
|
-
--header "CE-Type: com.example.test" \
|
181
|
-
--header "CE-Specversion: 1.0" \
|
182
|
-
--data "Hello, world!" \
|
183
|
-
http://localhost:8080
|
184
|
-
```
|
185
|
-
|
186
|
-
CloudEvents functions do not return meaningful results, but you will see the
|
187
|
-
log message from the web server.
|
188
|
-
|
189
|
-
### Configuring the Functions Framework
|
190
|
-
|
191
|
-
The Ruby Functions Framework recognizes the standard command line arguments to
|
192
|
-
the `functions-framework` executable. Each argument also corresponds to an
|
193
|
-
environment variable. If you specify both, the environment variable will be
|
194
|
-
ignored.
|
195
|
-
|
196
|
-
Command-line flag | Environment variable | Description
|
197
|
-
----------------- | -------------------- | -----------
|
198
|
-
`--port` | `PORT` | The port on which the Functions Framework listens for requests. Default: `8080`
|
199
|
-
`--target` | `FUNCTION_TARGET` | The name of the exported function to be invoked in response to requests. Default: `function`
|
200
|
-
`--source` | `FUNCTION_SOURCE` | The path to the file containing your function. Default: `app.rb` (in the current working directory)
|
201
|
-
|
202
|
-
Note: the flag `--signature-type` and corresponding environment variable
|
203
|
-
`FUNCTION_SIGNATURE_TYPE` are not used by the Ruby Function Framework, because
|
204
|
-
you specify the signature type when defining the function in the source.
|
205
|
-
|
206
|
-
The Ruby `functions-framework` executable also recognizes several additional
|
207
|
-
flags that can be used to control logging verbosity, binding, and other
|
208
|
-
parameters. For details, see the online help:
|
209
|
-
|
210
|
-
```sh
|
211
|
-
functions-framework --help
|
212
|
-
```
|
213
|
-
|
214
|
-
## For more information
|
215
|
-
|
216
|
-
* See the `examples` directory for additional examples
|
217
|
-
* Consult https://rubydoc.info/gems/functions_framework for full reference
|
218
|
-
documentation.
|
95
|
+
Stop the server with `CTRL+C`.
|
96
|
+
|
97
|
+
## Documentation
|
98
|
+
|
99
|
+
These guides provide additional getting-started information.
|
100
|
+
|
101
|
+
* **[Writing Functions](https://rubydoc.info/gems/functions_framework/file/docs/writing-functions.md)**
|
102
|
+
: How to write functions that respond to HTTP requests, industry-standard
|
103
|
+
[CloudEvents](https://cloudevents.io), as well as events sent from Google
|
104
|
+
Cloud services such as [Pub/Sub](https://cloud.google.com/pubsub) and
|
105
|
+
[Storage](https://cloud.google.com/storage).
|
106
|
+
* **[Testing Functions](https://rubydoc.info/gems/functions_framework/file/docs/testing-functions.md)**
|
107
|
+
: How to use the testing features of the Functions Framework to write local
|
108
|
+
unit tests for your functions using standard Ruby testing frameworks such
|
109
|
+
as [Minitest](https://github.com/seattlerb/minitest) and
|
110
|
+
[RSpec](https://rspec.info/).
|
111
|
+
* **[Running a Functions Server](https://rubydoc.info/gems/functions_framework/file/docs/running-a-functions-server.md)**
|
112
|
+
: How to use the `functions-framework-ruby` executable to run a local
|
113
|
+
functions server.
|
114
|
+
* **[Deploying Functions](https://rubydoc.info/gems/functions_framework/file/docs/deploying-functions.md)**
|
115
|
+
: How to deploy functions to
|
116
|
+
[Google Cloud Functions](https://cloud.google.com/functions) or
|
117
|
+
[Google Cloud Run](https://cloud.google.com/run).
|
118
|
+
|
119
|
+
The library reference documentation can be found at:
|
120
|
+
https://rubydoc.info/gems/functions_framework
|
121
|
+
|
122
|
+
Additional examples are available in the `examples` directory:
|
123
|
+
https://github.com/GoogleCloudPlatform/functions-framework-ruby/blob/master/examples/
|
124
|
+
|
125
|
+
## Development
|
126
|
+
|
127
|
+
The source for the Ruby Functions Framework is available on GitHub at
|
128
|
+
https://github.com/GoogleCloudPlatform/functions-framework-ruby. For more
|
129
|
+
information on the Functions Framework contract implemented by this framework,
|
130
|
+
as well as links to Functions Frameworks for other languages, see
|
131
|
+
https://github.com/GoogleCloudPlatform/functions-framework.
|
132
|
+
|
133
|
+
The Functions Framework is open source under the Apache 2.0 license.
|
134
|
+
Contributions are welcome. Please see the contributing guide at
|
135
|
+
https://github.com/GoogleCloudPlatform/functions-framework-ruby/blob/master/.github/CONTRIBUTING.md.
|
136
|
+
|
137
|
+
Report issues at
|
138
|
+
https://github.com/GoogleCloudPlatform/functions-framework-ruby/issues.
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Copyright 2020 Google LLC
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
require "functions_framework/cli"
|
18
|
+
|
19
|
+
::FunctionsFramework::CLI.new.parse_args(::ARGV).run
|
@@ -0,0 +1,182 @@
|
|
1
|
+
<!--
|
2
|
+
# @title Deploying Functions
|
3
|
+
-->
|
4
|
+
|
5
|
+
# Deploying Functions
|
6
|
+
|
7
|
+
This guide covers how to deploy your Ruby functions written with the Functions
|
8
|
+
Framework. Functions can be deployed to
|
9
|
+
[Google Cloud Functions](https://cloud.google.com/functions), Google's
|
10
|
+
Functions-as-a-service (FaaS) product, to
|
11
|
+
[Google Cloud Run](https://cloud.google.com/run). Google's container-based
|
12
|
+
serverless environment, or to any KNative-based environment.
|
13
|
+
For more information about the Framework as a whole, see the
|
14
|
+
{file:docs/overview.md Overview Guide}.
|
15
|
+
|
16
|
+
## Before you begin
|
17
|
+
|
18
|
+
To deploy to Google Cloud, whether to Cloud Functions or Cloud Run, you'll need
|
19
|
+
a Google Cloud project with billing enabled. Go to the
|
20
|
+
[Google Cloud console](https://console.cloud.google.com/), create a project (or
|
21
|
+
select an existing project), and ensure billing is enabled.
|
22
|
+
|
23
|
+
Additionally, install the [Google Cloud SDK](https://cloud.google.com/sdk) if
|
24
|
+
you haven't done so previously.
|
25
|
+
|
26
|
+
## Deploying to Cloud Functions
|
27
|
+
|
28
|
+
Google Cloud Functions is Google's scalable pay-as-you-go Functions-as-a-Service
|
29
|
+
(FaaS) environment that can run your function with zero server management. The
|
30
|
+
Functions Framework is designed especially for functions that can be hosted on
|
31
|
+
Cloud Functions.
|
32
|
+
|
33
|
+
You can run Ruby functions on Google Cloud Functions by selecting the `ruby26`
|
34
|
+
runtime. This runtime uses a recent release of Ruby 2.6. Support for other
|
35
|
+
versions of Ruby may be added in the future.
|
36
|
+
|
37
|
+
> **Note:** Ruby support on Cloud Functions is currently in limited preview.
|
38
|
+
> It is not yet suitable for production workloads, and support is best-effort
|
39
|
+
> only. Access is currently limited to selected early-access users.
|
40
|
+
|
41
|
+
### Deploying and updating your function
|
42
|
+
|
43
|
+
Before you can deploy to Cloud Functions, make sure your bundle, and in
|
44
|
+
particular your `Gemfile.lock` file, is up to date. The easiest way to do this
|
45
|
+
is to `bundle install` or `bundle update` and run your local tests prior to
|
46
|
+
deploying. Cloud Functions will not accept your function unless an up-to-date
|
47
|
+
`Gemfile.lock` is present.
|
48
|
+
|
49
|
+
Choose a name for your function. This function name is how it will appear in the
|
50
|
+
cloud console, and will also be part of the function's URL. (It's different from
|
51
|
+
the name you provide when writing your function; Cloud Functions calls that name
|
52
|
+
the "function target".)
|
53
|
+
|
54
|
+
Then, issue the gcloud command to deploy:
|
55
|
+
|
56
|
+
```sh
|
57
|
+
gcloud functions deploy $YOUR_FUNCTION_NAME --project=$YOUR_PROJECT_ID \
|
58
|
+
--runtime=ruby26 --trigger-http --source=$YOUR_FUNCTION_SOURCE \
|
59
|
+
--entry-point=$YOUR_FUNCTION_TARGET
|
60
|
+
```
|
61
|
+
|
62
|
+
The source file defaults to `./app.rb` and the function target defaults to
|
63
|
+
`function`, so those flags can be omitted if you're using the defaults. The
|
64
|
+
project flag can also be omitted if you've set it as the default with
|
65
|
+
`gcloud config set project`.
|
66
|
+
|
67
|
+
If your function handles events rather than HTTP requests, you'll need to
|
68
|
+
replace `--trigger-http` with a different trigger. For details, see the
|
69
|
+
[reference documentation](https://cloud.google.com/sdk/gcloud/reference/functions/deploy)
|
70
|
+
for `gcloud functions deploy`.
|
71
|
+
|
72
|
+
To update your deployment, just redeploy using the same function name.
|
73
|
+
|
74
|
+
### Configuring Cloud Functions deployments
|
75
|
+
|
76
|
+
The Functions Framework provides various configuration parameters, described in
|
77
|
+
{file:docs/running-a-functions-server.md Running a Functions Server}.
|
78
|
+
If you want to set any of these parameters beyond the source file and target,
|
79
|
+
you must set environment variables. For example, to limit logging to WARN level
|
80
|
+
and above, set `FUNCTION_LOGGING_LEVEL` to `WARN` when deploying:
|
81
|
+
|
82
|
+
```sh
|
83
|
+
gcloud functions deploy $YOUR_FUNCTION_NAME --project=$YOUR_PROJECT_ID \
|
84
|
+
--runtime=ruby26 --trigger-http --source=$YOUR_FUNCTION_SOURCE \
|
85
|
+
--entry-point=$YOUR_FUNCTION_TARGET \
|
86
|
+
--set-env-vars=FUNCTION_LOGGING_LEVEL=WARN
|
87
|
+
```
|
88
|
+
|
89
|
+
Consult the table in
|
90
|
+
{file:docs/running-a-functions-server.md Running a Functions Server}
|
91
|
+
for a list of the environment variables that can be set.
|
92
|
+
|
93
|
+
## Deploying to Cloud Run
|
94
|
+
|
95
|
+
Google Cloud Run is Google's managed compute platform for deploying and scaling
|
96
|
+
containerized applications quickly and securely. It can run any container-based
|
97
|
+
workload, including a containerized function.
|
98
|
+
|
99
|
+
Cloud Run has a hosted fully-managed option that runs on Google's infrastructure
|
100
|
+
and monitors and scales your application automatically, and a self-managed or
|
101
|
+
on-prem option called Cloud Run for Anthos that runs atop Kubernetes. Both
|
102
|
+
flavors use the same general interface and can run functions in the same way.
|
103
|
+
This tutorial is written for the managed option, but it should not be difficult
|
104
|
+
to adapt it if you have an Anthos installation.
|
105
|
+
|
106
|
+
### Building an image for your function
|
107
|
+
|
108
|
+
First, build a Docker image containing your function. Following is a simple
|
109
|
+
Dockerfile that you can use as a starting point. Feel free to adjust it to the
|
110
|
+
needs of your project:
|
111
|
+
|
112
|
+
```
|
113
|
+
FROM ruby:2.6
|
114
|
+
WORKDIR /app
|
115
|
+
COPY . .
|
116
|
+
RUN gem install --no-document bundler \
|
117
|
+
&& bundle config --local frozen true \
|
118
|
+
&& bundle config --local without "development test" \
|
119
|
+
&& bundle install
|
120
|
+
ENTRYPOINT ["bundle", "exec", "functions-framework-ruby"]
|
121
|
+
```
|
122
|
+
|
123
|
+
You can test your image locally using the steps described under
|
124
|
+
{file:docs/running-a-functions-server.md Running a Functions Server}.
|
125
|
+
|
126
|
+
When your Dockerfile is ready, you can use
|
127
|
+
[Cloud Build](https://cloud.google.com/cloud-build) to build it and store the
|
128
|
+
image in your project's container registry.
|
129
|
+
|
130
|
+
```sh
|
131
|
+
gcloud builds submit --tag=gcr.io/$YOUR_PROJECT_ID/$YOUR_APP_NAME:$YOUR_BUILD_ID .
|
132
|
+
```
|
133
|
+
|
134
|
+
You must use your project ID, but you can choose an app name and build ID. The
|
135
|
+
command may ask you for permission to enable the Cloud Build API for the project
|
136
|
+
if it isn't already enabled.
|
137
|
+
|
138
|
+
Because you provide your own Docker image when deploying to Cloud Run, you can
|
139
|
+
use any version of Ruby supported by the Functions Framework, from 2.4 through
|
140
|
+
2.7.
|
141
|
+
|
142
|
+
### Deploying an image to Cloud Run
|
143
|
+
|
144
|
+
To deploy to Cloud Run, specify the same image URL that you built above. For
|
145
|
+
example:
|
146
|
+
|
147
|
+
```sh
|
148
|
+
gcloud run deploy $YOUR_APP_NAME --project=$YOUR_PROJECT_ID \
|
149
|
+
--image=gcr.io/$YOUR_PROJECT_ID/$YOUR_APP_NAME:$YOUR_BUILD_ID \
|
150
|
+
--platform=managed --allow-unauthenticated --region=us-central1 \
|
151
|
+
--set-env-vars=FUNCTION_SOURCE=$YOUR_SOURCE,FUNCTION_TARGET=$YOUR_TARGET
|
152
|
+
```
|
153
|
+
|
154
|
+
You can omit the `--project` flag if you've already set it as the default with
|
155
|
+
`gcloud config set project`.
|
156
|
+
|
157
|
+
The command may ask you for permission to enable the Cloud Run API for the
|
158
|
+
project, if it isn't already enabled.
|
159
|
+
|
160
|
+
At the end of the deployment process, the command will display the hostname for
|
161
|
+
the Cloud Run service. You can use that hostname to send test requests to your
|
162
|
+
deployed function.
|
163
|
+
|
164
|
+
### Configuring Cloud Run deployments
|
165
|
+
|
166
|
+
Note that our Dockerfile's entrypoint did not pass any source file or target
|
167
|
+
name to the Functions Framework. If these are not specified, the Framework will
|
168
|
+
use the source `.app.rb` and the target `function` by default. To use different
|
169
|
+
values, you need to set the appropriate environment variables when deploying, as
|
170
|
+
illustrated above with the `FUNCTION_SOURCE` and `FUNCTION_TARGET` variables.
|
171
|
+
|
172
|
+
Source and target are not the only configuration parameters available. The
|
173
|
+
various parameters, along with their environment variables, are described in
|
174
|
+
{file:docs/running-a-functions-server.md Running a Functions Server}.
|
175
|
+
Any of these can be specified in the `--set-env-vars` flag when you deploy to
|
176
|
+
Google Cloud Run.
|
177
|
+
|
178
|
+
It is also possible to "hard-code" configuration into the Dockerfile, by setting
|
179
|
+
environment variables in the Dockerfile, or adding flags to the entrypoint.
|
180
|
+
However, it is often better practice to keep your Dockerfile "generic", and set
|
181
|
+
configuration environment variables during deployment, so that you do not need
|
182
|
+
to rebuild your Docker image every time you want to change configuration.
|