#javascript #aws-lambda #serverless-framework
Вопрос:
я пытаюсь установить переменную env ( называемую baseUrl), однако я хочу, чтобы значение этой переменной менялось в зависимости от значения этапа.
for example if stage = dev baseurl= https://example.com
for exma[le if stage = prod baseurl= https://example2.com
вот мой бессерверный файл.yml
custom:
profiles:
dev: default
prod: mad
provider:
name: aws
profile: ${self:custom.profiles.${sls:stage}}
runtime: nodejs12.x
lambdaHashingVersion: 20201221
region: ap-southeast-1
iam:
role:
statements:
- Effect: Allow
Action:
- dynamodb:DescribeTable
- dynamodb:Query
- dynamodb:Scan
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
Resource: arn:aws:dynamodb:ap-southeast-1::
resources:
Resources:
trimifyUrlsTable:
Type: 'AWS::DynamoDB::Table'
Properties:
AttributeDefinitions:
- AttributeName: pk
AttributeType: S
- AttributeName: originalUrl
AttributeType: S
KeySchema:
- AttributeName: pk
KeyType: HASH
- AttributeName: originalUrl
KeyType: RANGE
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
TableName: 'mad_dove_urls'
functions:
customAuthorizer:
handler: authorizer/authorizer.auth
environment:
ACCOUNT_ID: ${aws:accountId}
API_ENDPOINT:
Ref: ApiGatewayRestApi
STAGE_NAME: ${opt:stage, 'dev'}
operations:
handler: serverless.handler
environment:
STAGE_NAME: ${opt:stage, 'dev'}
events:
- http:
path: /
method: ANY
cors: true
- http:
path: /{proxy }
method: ANY
cors: true
- http:
path: /auth-ops
method: ANY
authorizer: customAuthorizer
cors: true
- http:
path: /auth-ops/{proxy }
method: ANY
authorizer: customAuthorizer
cors: true
Ответ №1:
Я бы рекомендовал просто использовать функцию dotenv, которая описана в документации: https://www.serverless.com/framework/docs/environment-variables/
Пример того, как это сделать
Структура файлов:
serverless.yml
.env.dev
.env.prod
Содержимое файлов:
.env.dev
:
BASE_URL=https://example.com
.env.prod
:
BASE_URL=https://example2.com
serverless.yml
:
service: example-service
custom:
profiles: ${env:BASE_URL} # this will be example/example2.com depends on the current stage
Затем вы можете легко использовать его из пользовательского раздела в качестве обычной бессерверной переменной фреймворка.