我最近开始研究一个我们正在使用无服务器框架的项目。我们正在使用 docker 使开发环境更易于设置。
作为此 docker 设置的一部分,我们创建了一个脚本,用于创建 S3 存储桶和表等。我们之前在docker-compose
文件中定义环境变量,并在我们的 nodejs 应用程序中访问它们。为了部署到其他环境,我们的 devops 团队在serverless.yaml
文件中定义了一些环境变量,导致环境配置出现在两个地方。我们现在计划将docker-compose
文件中定义的所有环境配置移动到serverless.yaml
. 这适用于我们的 lambdas 函数,因为它们能够读取这些配置,但它不适用于我们编写的独立设置脚本。
我尝试使用这个插件(serverless-scriptable-plugin
)试图能够读取这些环境变量,但仍然无法这样做。
这是我的serverless.yaml
文件
service:
name: my-service
frameworkVersion: '2'
configValidationMode: error
provider:
name: aws
runtime: nodejs14.x
region: 'us-east-1'
profile: ${env:PROFILE, 'dev'}
stackName: stack-${self:provider.profile}
apiName: ${self:custom.environment_prefix}-${self:service.name}-my-api
environment: ${self:custom.environment_variables.${self:provider.profile}}
plugins:
- serverless-webpack
- serverless-scriptable-plugin
- serverless-offline-sqs
- serverless-offline
functions:
myMethod:
handler: handler.myHandler
name: ${self:custom.environment_prefix}-${self:service.name}-myHandler
events:
- sqs:
arn:
Fn::GetAtt:
- MyQueue
- Arn
resources:
Resources:
MyQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: ${self:custom.queuename}
Tags:
- Key: product
Value: common
- Key: service
Value: common
- Key: function
Value: ${self:service.name}
- Key: region
Value: ${env:REGION}
package:
individually: true
custom:
webpack:
webpackConfig: ./webpack.config.js
includeModules: true
serverless-offline:
host: 0.0.0.0
port: 3000
serverless-offline-sqs:
apiVersion: '2012-11-05'
endpoint: http://sqs:9324
region: ${self:provider.region}
accessKeyId: root
secretAccessKey: root
skipCacheInvalidation: false
localstack:
stages:
- local
lambda:
mountCode: true
debug: true
environment_prefixes:
staging: staging
production: production
dev: dev
environment_prefix: ${self:custom.environment_prefixes.${self:provider.profile}}
queuename: 'myQueue'
environment_variables:
dev:
AWS_ACCESS_KEY_ID: test
AWS_SECRET_ACCESS_KEY: test
BUCKET_NAME: my-bucket
S3_URL: http://localstack:4566
SLS_DEBUG: '*'
scriptable:
commands:
setup: node /app/dockerEntrypoint.js
在我的 DockerFile 中,我尝试使用sls setup
CMD 执行脚本。我最初认为使用sls
命令可能会暴露serverless.yaml
文件中定义的这些环境变量,但它似乎没有发生。
有没有其他方法可以实现?我正在尝试使用process.env
适用于 lambdas 但不适用于我的独立脚本的变量来访问这些变量。谢谢!