コンテンツにスキップ

環境変数

環境変数は Service が実行されている Environment に応じてサービスから利用可能な変数です。Service は自身で定義することなくそれらの変数を参照できます。環境変数は特定の Environment に固有のデータを Service へ渡したい場合に便利です。例として、テスト用と本番用で接続するデータベースの名前を切り替える場合などです。

環境変数へのアクセス方法は通常、利用しているプログラミング言語によって決まります。ここではいくつかのプログラミング言語で DATABASE_NAME という環境変数を取得する例を示します。

Go

dbName := os.Getenv("DATABASE_NAME")

Javascript

var dbName = process.env.DATABASE_NAME;

Python

database_name = os.getenv('DATABASE_NAME')

デフォルト環境変数とは

デフォルトで、AWS Copilot CLI はサービスが利用できるいくつかの環境変数を提供します。

  • COPILOT_APPLICATION_NAME - この Service を実行している Application 名
  • COPILOT_ENVIRONMENT_NAME - Service が実行されている Environment 名(例: test、prod)
  • COPILOT_SERVICE_NAME - 現在の Service 名
  • COPILOT_LB_DNS - (存在する場合)ロードバランサー名。例: kudos-Publi-MC2WNHAIOAVS-588300247.us-west-2.elb.amazonaws.com 注: カスタムドメイン名を利用している場合でも、この値はロードバランサーの DNS 名を保持します
  • COPILOT_SERVICE_DISCOVERY_ENDPOINT - サービスディスカバリを介して、Environment の中で他の Service と通信するために Service 名の後に追加されるエンドポイント。値は {env name}.{app name}.local となります。サービスディスカバリについてのより詳しい情報はサービスディスカバリのガイド を参照してください

環境変数を追加する方法

環境変数を追加するのは簡単です。Manifestvariables セクションに直接追加できます。 下記のスニペットでは、LOG_LEVEL という変数を debug という値で Service に渡しています。

# copilot/{service name}/manifest.yml の一部
variables:                    
  LOG_LEVEL: debug

Environment に応じて、特定の環境変数の値を渡すこともできます。上記と同じ例で、ログレベルを設定し、production の Environment の時だけ値を info に書き換えてみます。Manifest の変更は、それをデプロイした時に反映されるので、ローカルでの変更は安全です。

# copilot/{service name}/manifest.yml の一部
variables:                    
  LOG_LEVEL: debug

environments:
  production:
    variables:
      LOG_LEVEL: info

ここでは、Manifest を編集して、環境変数を Application に追加する方法の簡単なガイドを紹介しています。👇

Editing the manifest to add env vars

さらに、環境変数をまとめて追加したい場合、 env file に環境変数を追加します。そして、ファイルパス (Workspace の root からのファイルパス) を Manifestenv_file フィールドに記述します。

メインコンテナのワークスペースのルートや、任意のサイドカーコンテナ定義、logging フィールド下に、env_file を指定して、FireLens サイドカーコンテナに環境変数ファイルを設定できます。

# in copilot/{service name}/manifest.yml
env_file: log.env

log.env では、次の様に記述します。

#This is a comment and will be ignored
LOG_LEVEL=debug
LOG_INFO=all
サイドカー定義においては、次の様に記述します:
sidecars:
  nginx:
    image: nginx:latest
    env_file: ./nginx.env
    port: 8080

ロギングコンテナにおいては、次の様に記述します:

logging:
  retention: 1
  destination:
    Name: cloudwatch
    region: us-west-2
    log_group_name: /copilot/logs/
    log_stream_prefix: copilot/
  env_file: ./logging.env

DynamoDB テーブルやS3 バケット、RDS データベースなどの名前を確認する方法

Copilot CLI を使って、DynamoDB テーブルや S3 バケット、データベースなどの追加の AWS リソースをプロビジョニングする場合、出力の値は環境変数として、Application に渡されます。より詳しい情報は、AWS リソースを追加するを確認してください。