web-dev-qa-db-ja.com

serverless.ymlの外部ファイルから環境変数を設定します

ローカル開発にはサーバーレスとサーバーレスローカルを使用しています。

アプリのnode.envから取得した環境変数への参照を保持する外部ファイルがあります。

私が理解していることから、次のような環境変数を設定できるはずです。

dev:
   AWS_KEY: 'key',
   SECRET: 'secret
test:
   AWS_KEY: 'test-key',
   SECRET: 'test-secret',
etc:
   ...

そして、serverless.ymlの次の行を介して、これらの環境変数をアプリに含めます。

provider:
  name: aws
  runtime: nodejs4.3
  stage: ${opt:stage, self:custom.default_stage}
  deploymentBucket: serverless-deploy-packages/${opt:stage, self:custom.default_stage}
  environment: 
    ${file(./serverless-env.yml):${opt:stage, self:custom.default_stage}}

次に、コマンドラインで、

serverless offline --stage dev --port 9000

これには私のアプリに正しい変数が含まれると思いましたが、機能していません。これはそれが機能することになっている方法ではありませんか?私はここで何か間違ったことをしていますか?

9
pedalpete

から docs

外部ファイルの内容を変数に設定できます。

file: ${file(./serverless-env.yml)}

その後、この新しい変数を使用してファイル変数にアクセスできます。

secret: file.dev.SECRET

または、ファイルを直接使用することもできます。

secret: ${file(./serverless-env.yml):dev.SECRET}
4
Zanon

サーバーレスフレームワークでリモート非同期値を使用できるようになりました。 https://serverless.com/blog/serverless-v1.13.0/ を参照してください

これは、s3またはリモートデータベースなどから値を呼び出すことができることを意味します。

例:

serverless.yml

service: serverless-async-vars

provider:
  name: aws
  runtime: nodejs6.10

custom:
  secret: ${file(./vars.js):fetchSecret} # JS file running async / promised

vars.js

module.exports.fetchSecret = () => {
  // async code
  return Promise.resolve('SomeSecretKey');
}
4
DavidWells

JSONファイルからLambda環境変数を設定します(AWS CLIを使用)

aws lambda update-function-configuration --profile mfa --function-name test-api --cli-input-json file://dev.json

1
Jinu George

これは、さまざまな段階で環境を分離する方法です。

serverless.yml

custom:
  test:
    project: xxx
  prod:
    project: yyy

provider:
  ...
  stage: ${opt:stage, 'test'}
  project: ${self:custom.${opt:stage, 'test'}.project}
  environment:
    ${file(.env.${opt:stage, 'test'}.yml):}

package:
  exclude:
    - .env.*

.env.test.yml

VARIABLE1: value1
VARIABLE2: value2

デプロイ中に、--stage=prodを渡すかスキップすると、testプロジェクトがデプロイされます。次に、JSコードで、process.env.VARIABLE1を使用してENV変数にアクセスできます。

1
rilian

私はこれを正しく持っていましたが、ファイルを誤って参照していました。

これはドキュメントには表示されませんが、ファイルをenvironmentに渡すと、ファイルyamlファイルが含まれ、上記の構造は機能します。

0
pedalpete