Creating links between Elastic Beanstalk environments - AWS Elastic Beanstalk

Creating links between Elastic Beanstalk environments

As your application grows in size and complexity, you may want to split it into components that have different development and operational lifecycles. By running smaller services that interact with each other over a well defined interface, teams can work independently and deployments can be lower risk. AWS Elastic Beanstalk lets you link your environments to share information between components that depend on one another.

Note

Elastic Beanstalk currently supports environment links for all platforms except Multicontainer Docker.

With environment links, you can specify the connections between your application’s component environments as named references. When you create an environment that defines a link, Elastic Beanstalk sets an environment variable with the same name as the link. The value of the variable is the endpoint that you can use to connect to the other component, which can be a web server or worker environment.

For example, if your application consists of a frontend that collects email addresses and a worker that sends a welcome email to the email addresses collected by the frontend, you can create a link to the worker in your frontend and have the frontend automatically discover the endpoint (queue URL) for your worker.

Define links to other environments in an environment manifest, a YAML formatted file named env.yaml in the root of your application source. The following manifest defines a link to an environment named worker:

~/workspace/my-app/frontend/env.yaml

AWSConfigurationTemplateVersion: 1.1.0.0 EnvironmentLinks: "WORKERQUEUE": "worker"

When you create an environment with an application version that includes the above environment manifest, Elastic Beanstalk looks for an environment named worker that belongs to the same application. If that environment exists, Elastic Beanstalk creates an environment property named WORKERQUEUE. The value of WORKERQUEUE is the Amazon SQS queue URL. The frontend application can read this property in the same manner as an environment variable. See Environment manifest (env.yaml) for details.

To use environment links, add an environment manifest to your application source and upload it with the EB CLI, AWS CLI or an SDK. If you use the AWS CLI or an SDK, set the process flag when you call CreateApplicationVersion:

$ aws elasticbeanstalk create-application-version --process --application-name my-app --version-label frontend-v1 --source-bundle S3Bucket="amzn-s3-demo-bucket",S3Key="front-v1.zip"

This option tells Elastic Beanstalk to validate the environment manifest and configuration files in your source bundle when you create the application version. The EB CLI sets this flag automatically when you have an environment manifest in your project directory.

Create your environments normally using any client. When you need to terminate environments, terminate the environment with the link first. If an environment is linked to by another environment, Elastic Beanstalk will prevent the linked environment from being terminated. To override this protection, use the ForceTerminate flag. This parameter is available in the AWS CLI as --force-terminate:

$ aws elasticbeanstalk terminate-environment --force-terminate --environment-name worker