App Engine
App Engine Standard Environment
- Offers a simple deployment experience compare to the Flexible Environment
- Offers fined-grained autoscaling
- Offers free daily usage quota (low usage service may run at no charge)
- Google provides several SDKs for development and deployment on AppEngine. We can test the application locally before uploading it to the AppEngine Service
- AppEngine runtimes: specific versions of Java, PHP, Python and Go
- For other languages we may want to consider the Flexible Environment
- Sandbox: software construct independent of the hardware. Constraints:
- No writing to local files
- All requests time out at 60 seconds
- Limits in third-party software
App Engine Flexible Environment
- Instead of the sandbox, we can specify the contain the App Engine is running on
- App Engine manages the containers, we get to chose where they are running
- App Engine applications can access GC services such as data stores, memory caches, task queues, etc.
App Engine Standard vs Flexible Comparison
App Engine Standard | App Engine Flexible | |
---|---|---|
Instance startup | Milliseconds | Minutes |
SSH access | No | Yes (not by default) |
Write to local disk | No | Yes (ephemeral writes only) |
Support 3rd party binaries | No | Yes |
Network Access | Via App Engine services | Yes |
Pricing Model | After free daily use, pay per instance class, with automatic shutdown | Pay for resource allocation per hour, no automatic shutdown |
App Engine Config Files
app.yaml
: defines our configuration settings for our runtime as well as general app, network, and other resource settingscron.yaml
: a cron.yaml file should in the root directory of your application (alongside app.yaml) and configures scheduled tasks for our applicationsdispatch.yaml
: allows us to override routing rules. We can use the dispatch.yaml to send incoming requests to a specific service (formerly known as modules) based on the path or hostname in the URLindex.yaml
: we can use Firestore in Datastore mode (Datastore) for storing data for our applications that run in the flexible environment. We define indexes our app needs in a index.yaml configuration file
App Engine IAM Roles
- App Engine Admin (
roles/appengine.appAdmin
):- Read/Write/Modify access to all application configuration and settings
- To deploy new versions, a principal must have the Service Account User (roles/iam.serviceAccountUser) role on the App Engine default service account, and the Cloud Build Editor (roles/cloudbuild.builds.editor) and Cloud Storage Object Admin (roles/storage.objectAdmin) roles on the project
- App Engine Creator (
roles/appengine.appCreator
):- Ability to create the App Engine resource for the project
- App Engine Viewer (
roles/appengine.appViewer
):- Read-only access to all application configuration and settings
- App Engine Code Viewer (
roles/appengine.codeViewer
):- Read-only access to all application configuration, settings, and deployed source code
- App Engine Deployer (
roles/appengine.deployer
):- Read-only access to all application configuration and settings
- To deploy new versions, you must also have the Service Account User (roles/iam.serviceAccountUser) role on the App Engine default service account, and the Cloud Build Editor (roles/cloudbuild.builds.editor) and Cloud Storage Object Admin (roles/storage.objectAdmin) roles on the project
- Cannot modify existing versions other than deleting versions that are not receiving traffic
- App Engine Service Admin (
roles/appengine.serviceAdmin
):- Read-only access to all application configuration and settings
- Write access to module-level and version-level settings. Cannot deploy a new version