Other

ymlでenv(環境変数)を使う方法

いつもご利用ありがとうございます。このブログは、広告費によって運営されています。

Web技術を勉強するなら、かなりオススメの雑誌です。毎月新しい発見があります。

はじめに

この記事では、

Error:
Cannot resolve serverless.yml: Variables resolution errored with:
  - Cannot resolve variable at "provider.environment.SLACK_SIGNING_SECRET": Value not found at "env" source,
  - Cannot resolve variable at "provider.environment.SLACK_BOT_TOKEN": Value not found at "env" source

こんなエラーが解決するかもしれません。

経緯

Lambda などで、yml に環境変数を入れたくなる時があります。

例えば、SlackAPI などを使う場合、

serverless.yml

service: serverless-bolt-js
frameworkVersion: '3'
provider:
  name: aws
  runtime: nodejs14.x
  environment:
    SLACK_SIGNING_SECRET: ${env:SLACK_SIGNING_SECRET}
    SLACK_BOT_TOKEN: ${env:SLACK_BOT_TOKEN}
functions:
  slack:
    handler: app.handler
    events:
      - http:
          path: slack/events
          method: post
      - http:
          path: /slack/install
          method: get
      - http:
          path: /slack/user_install
          method: get
      - http:
          path: /slack/oauth_redirect
          method: get
useDotenv: true
plugins:
  - serverless-offline

環境変数が使いたくなります。

環境変数を使う方法

上記のコードは、すでに環境変数が使えるような設定になっています。

該当部分は、

  environment:
    SLACK_SIGNING_SECRET: ${env:SLACK_SIGNING_SECRET}
    SLACK_BOT_TOKEN: ${env:SLACK_BOT_TOKEN}
useDotenv: true

の2箇所です。

プロジェクトのルートディレクトリに、

.env というファイルを作成し、

SLACK_SIGNING_SECRET=ここにAPIkeyなどを入力
SLACK_BOT_TOKEN=ここにAPIkeyなどを入力

とするだけで使えます。

まとめ

検索すると意外とこの簡単な方法が見つかりづらかったので記事にしました。

参考になれば幸いです。