2017-02-08 11 views
1

Serverless 1.xフレームワークでは、サービスルートのserverless.ymlファイルに環境変数を設定します。私は、サービスが実行されていることを、ステージに対応するSTAGE変数を設定しようとしていることがdevprodための簡単だ、そうのように:。Serverless v1.xで "local" stage env変数を設定する

provider: 
    name: aws 
    ... 
    stage: dev 
    environment: 
    STAGE: ${opt:stage, self:provider.stage} 

つまり--stageが明示的に定義されている場合は、ENV変数はそれを使用します。そうでない場合は、デフォルトのdevを使用します。

ただし、sls invoke localを使用すると、デフォルトの段階はdevとなり、正しくありません。ローカルに呼び出すときにステージをlocalにする最良の方法は何ですか?

答えて

1

明白な解決策は、コマンドに-s localを追加することです。しかし、これは私の好みにあまりにも冗長になり始めていて、明らかに望ましくないlocalという新しいステージに誤って展開する可能性も高くなります。 localをかけながらtests/payloads/myFunction/default.json

$ invoke local myFunction 

は、ペイロードでローカルに関数を呼び出します:

# Invoke serverless service 
invoke() { 
    if [ "${1}" == "local" ]; then 
     stage="local -s local" 
    else 
     stage="-s ${1}" 
    fi 

    payloads_dir="tests/payloads/" 
    if [ -z $3 ]; then 
     payload="${payloads_dir}${2}/default.json" 
    else 
     payload="${payloads_dir}${2}/${3}.json" 
    fi 

    if [ ! -f "${payload}" ]; then 
     echo $payload 
     echo "Payload does not exist." 
     return 1 
    fi 

    time --format='%e seconds' serverless invoke $stage -f $2 -p $payload 
} 

使用法:$ invoke stage function_name [payload_name]

だから、私はこのヘルパーbashの関数を作成しましたステージenv。

$ invoke dev myFunction my_payload 

ステージdevおよびペイロードtests/payloads/myFunction/my_payload.jsonと展開関数を呼び出す(展開サービスが適切serverless.ymlファイルを有する場合、ステージENVは正しいであろう)。

これは明らかに不完全な実装ですが、自由に変更することができます。

関連する問題