UNPKG

serverless

Version:

Serverless Framework - Build web, mobile and IoT applications with serverless architectures using AWS Lambda, Azure Functions, Google CloudFunctions & more

167 lines (128 loc) • 4.78 kB
<!-- title: Serverless Framework - Alibaba Cloud Function Compute Guide - Serverless Variables menuText: Variables menuOrder: 10 description: How to use Serverless Variables to insert dynamic configuration info into your serverless.yml layout: Doc --> <!-- DOCS-SITE-LINK:START automatically generated --> ### [Read this on the main serverless docs site](https://www.serverless.com/framework/docs/providers/aliyun/guide/variables) <!-- DOCS-SITE-LINK:END --> # Alibaba Cloud - Variables The Serverless framework provides a powerful variable system which allows you to add dynamic data into your `serverless.yml`. With Serverless Variables, you'll be able to do the following: - Reference & load variables from environment variables - Reference & load variables from CLI options - Recursively reference properties of any type from the same `serverless.yml` file - Recursively reference properties of any type from other YAML / JSON files - Recursively nest variable references within each other for ultimate flexibility - Combine multiple variable references to overwrite each other **Note:** You can only use variables in `serverless.yml` property **values**, not property keys. So you can't use variables to generate dynamic logical IDs in the custom resources section for example. ## Reference variables from environment variables To reference variables from environment variables, use the `${env:someProperty}` syntax in your `serverless.yml`. ```yml service: new-service provider: name: aliyun runtime: nodejs8 credentials: ~/.aliyuncli/credentials # path must be absolute plugins: - serverless-aliyun-function-compute functions: ossTriggerTest: handler: index.ossTriggerHandler events: - oss: sourceArn: acs:oss:cn-shanghai:${env:ALIYUN_ACCOUNT}:my-service-resource triggerConfig: events: - oss:ObjectCreated:PostObject - oss:ObjectCreated:PutObject filter: key: prefix: source/ ``` ## Reference Properties In serverless.yml To self-reference properties in `serverless.yml`, use the `${self:someProperty}` syntax in your `serverless.yml`. This functionality is recursive, so you can go as deep in the object tree as you want. ```yml service: new-service provider: name: aliyun runtime: nodejs8 credentials: ~/.aliyuncli/credentials # path must be absolute plugins: - serverless-aliyun-function-compute functions: first: handler: index.first events: - http: path: ${self:custom.path} method: get second: handler: index.second events: - http: path: ${self:custom.path} method: post ``` In the above example you're setting a global event resource for all functions by referencing the `resource` property in the same `serverless.yml` file. This way, you can easily change the event resource for all functions whenever you like. ## Reference Variables in JavaScript Files To add dynamic data into your variables, reference javascript files by putting `${file(./myFile.js):someModule}` syntax in your `serverless.yml`. Here's an example: ```javascript // myCustomFile.js module.exports.path = () => { // Code that generates dynamic data return '/quo/foo/bar'; }; ``` ```yml # serverless.yml service: new-service provider: name: aliyun runtime: nodejs8 credentials: ~/.aliyuncli/credentials # path must be absolute plugins: - serverless-aliyun-function-compute functions: first: handler: index.first events: - http: path: ${file(./myCustomFile.js):path} # Reference a specific module method: get ``` You can also return an object and reference a specific property. Just make sure you are returning a valid object and referencing a valid property: ```javascript // myCustomFile.js module.exports.paths = () => { // Code that generates dynamic data return { current: '/quo/foo/bar', }; }; ``` ```yml # serverless.yml service: new-service provider: name: aliyun runtime: nodejs8 credentials: ~/.aliyuncli/credentials # path must be absolute plugins: - serverless-aliyun-function-compute functions: first: handler: index.first events: - http: path: ${file(./myCustomFile.js):paths.current} # Reference a specific module method: get ``` ## Multiple Configuration Files Adding many custom resources to your `serverless.yml` file could bloat the whole file, so you can use the Serverless Variable syntax to split this up. ```yml resources: Resources: ${file(aliyun-cloud-resources.json)} ``` The corresponding resources which are defined inside the `aliyun-cloud-resources.json` file will be resolved and loaded into the `Resources` section.