Using the Elastic Beanstalk Go platform
This topic describes how to configure, build, and run your Go applications on Elastic Beanstalk.
AWS Elastic Beanstalk supports a number of platform branches for different versions of the Go programming language. See Go in the AWS Elastic Beanstalk Platforms document for a full list.
For simple Go applications, there are two ways to deploy your application:
-
Provide a source bundle with a source file at the root called
application.go
that contains the main package for your application. Elastic Beanstalk builds the binary using the following command:go build -o bin/application application.go
After the application is built, Elastic Beanstalk starts it on port 5000.
-
Provide a source bundle with a binary file called
application
. The binary file can be located either at the root of the source bundle or in thebin/
directory of the source bundle. If you place theapplication
binary file in both locations, Elastic Beanstalk uses the file in thebin/
directory.Elastic Beanstalk launches this application on port 5000.
In both cases, with our supported Go platform branches, you can also provide module requirements in a file called go.mod
. For more
information, see Migrating to Go Modules
For more complex Go applications, there are two ways to deploy your application:
-
Provide a source bundle that includes your application source files, along with a Buildfile and a Procfile. The Buildfile includes a command to build the application, and the Procfile includes instructions to run the application.
-
Provide a source bundle that includes your application binary files, along with a Procfile. The Procfile includes instructions to run the application.
The Go platform includes a proxy server to serve static assets and forward traffic to your application. You can extend or override the default proxy configuration for advanced scenarios.
For details about the various ways you can extend an Elastic Beanstalk Linux-based platform, see Extending Elastic Beanstalk Linux platforms.
Configuring your Go environment
The Go platform settings let you fine-tune the behavior of your Amazon EC2 instances. You can edit the Elastic Beanstalk environment's Amazon EC2 instance configuration using the Elastic Beanstalk console.
Use the Elastic Beanstalk console to enable log rotation to Amazon S3 and configure variables that your application can read from the environment.
To configure your Go environment in the Elastic Beanstalk console
Open the Elastic Beanstalk console
, and in the Regions list, select your AWS Region. -
In the navigation pane, choose Environments, and then choose the name of your environment from the list.
Note
If you have many environments, use the search bar to filter the environment list.
In the navigation pane, choose Configuration.
-
In the Updates, monitoring, and logging configuration category, choose Edit.
Log options
The Log Options section has two settings:
-
Instance profile – Specifies the instance profile that has permission to access the Amazon S3 bucket associated with your application.
-
Enable log file rotation to Amazon S3 – Specifies whether log files for your application's Amazon EC2 instances are copied to the Amazon S3 bucket associated with your application.
Static files
To improve performance, you can use the Static files section to configure the proxy server to serve static files (for example, HTML or images) from a set of directories inside your web application. For each directory, you set the virtual path to directory mapping. When the proxy server receives a request for a file under the specified path, it serves the file directly instead of routing the request to your application.
For details about configuring static files using configuration files or the Elastic Beanstalk console, see Serving static files.
Environment properties
The Environment Properties section lets you specify environment configuration settings on the Amazon EC2 instances that are running your application. Environment properties are passed in as key-value pairs to the application.
Inside the Go environment running in Elastic Beanstalk, environment variables are accessible using the os.Getenv
function. For example,
you could read a property named API_ENDPOINT
to a variable with the following code:
endpoint := os.Getenv("API_ENDPOINT")
See Environment properties and other software settings for more information.
Go configuration namespace
You can use a configuration file to set configuration options and perform other instance configuration tasks during deployments. Configuration options can be platform specific or apply to all platforms in the Elastic Beanstalk service as a whole. Configuration options are organized into namespaces.
The Go platform doesn't define any platform-specific namespaces. You can configure the proxy to serve static files by using the
aws:elasticbeanstalk:environment:proxy:staticfiles
namespace. For details and an example, see Serving static files.
Elastic Beanstalk provides many configuration options for customizing your environment. In addition to configuration files, you can also set configuration options using the console, saved configurations, the EB CLI, or the AWS CLI. See Configuration options for more information.
If your Elastic Beanstalk Go environment uses an Amazon Linux AMI platform version (preceding Amazon Linux 2), read the additional information in this section.
Notes
-
The information in this topic only applies to platform branches based on Amazon Linux AMI (AL1). AL2023/AL2 platform branches are incompatible with previous Amazon Linux AMI (AL1) platform versions and require different configuration settings.
-
On July 18,2022, Elastic Beanstalk set the status of all platform branches based on Amazon Linux AMI (AL1) to retired. For more information about migrating to a current and fully supported Amazon Linux 2023 platform branch, see Migrating your Elastic Beanstalk Linux application to Amazon Linux 2023 or Amazon Linux 2.
You can use a configuration file to set configuration options and perform other instance configuration tasks during deployments. Configuration options can be platform specific or apply to all platforms in the Elastic Beanstalk service as a whole. Configuration options are organized into namespaces.
Note
The information in this topic only applies to platform branches based on Amazon Linux AMI (AL1). AL2023/AL2 platform branches are incompatible with previous Amazon Linux AMI (AL1) platform versions and require different configuration settings.
The Amazon Linux AMI Go platform supports one platform-specific configuration namespace in addition to the namespaces supported by all platforms. The aws:elasticbeanstalk:container:golang:staticfiles
namespace lets you define
options that map paths on your web application to folders in your application source bundle that contain static content.
For example, this configuration file tells the proxy server to serve files in the staticimages
folder at the path /images
:
Example .ebextensions/go-settings.config
option_settings:
aws:elasticbeanstalk:container:golang:staticfiles:
/html: statichtml
/images: staticimages
Elastic Beanstalk provides many configuration options for customizing your environment. In addition to configuration files, you can also set configuration options using the console, saved configurations, the EB CLI, or the AWS CLI. See Configuration options for more information.