ローカル開発にはサーバーレスとサーバーレスローカルを使用しています。
アプリの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
これには私のアプリに正しい変数が含まれると思いましたが、機能していません。これはそれが機能することになっている方法ではありませんか?私はここで何か間違ったことをしていますか?
から docs :
外部ファイルの内容を変数に設定できます。
file: ${file(./serverless-env.yml)}
その後、この新しい変数を使用してファイル変数にアクセスできます。
secret: file.dev.SECRET
または、ファイルを直接使用することもできます。
secret: ${file(./serverless-env.yml):dev.SECRET}
サーバーレスフレームワークでリモート非同期値を使用できるようになりました。 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');
}
JSONファイルからLambda環境変数を設定します(AWS CLIを使用)
aws lambda update-function-configuration --profile mfa --function-name test-api --cli-input-json file://dev.json
これは、さまざまな段階で環境を分離する方法です。
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変数にアクセスできます。
私はこれを正しく持っていましたが、ファイルを誤って参照していました。
これはドキュメントには表示されませんが、ファイルをenvironment
に渡すと、ファイルyamlファイルが含まれ、上記の構造は機能します。