Open reibomaru opened 1 year ago
Makefile
で.envを自動生成できそう現状使ってる環境変数一覧: https://github.com/team-azb/knowtfolio/blob/34e4217316012aa471079c610df3e86f9654f6b2/blockchain/.env.example#L1-L3 https://github.com/team-azb/knowtfolio/blob/34e4217316012aa471079c610df3e86f9654f6b2/client/.env.example#L1-L7 https://github.com/team-azb/knowtfolio/blob/34e4217316012aa471079c610df3e86f9654f6b2/server/.env.example#L1-L13
✅はそのディレクトリの.env
で使われているかどうか
命名規則:AWS_{サービス名}_{中身の名前} |
key | blockchain | client | server |
---|---|---|---|---|
AWS_IAM_ADMIN_ACCESS_KEY_ID |
✅ | |||
AWS_IAM_ADMIN_SECRET_ACCESS_KEY |
✅ | |||
AWS_COGNITO_USER_POOL_ID |
✅ | |||
AWS_COGNITO_CLIENT_ID |
✅ | |||
AWS_COGNITO_IDENTITY_POOL_ID |
✅ | |||
AWS_S3_CLIENT_BUCKET_NAME |
✅ | |||
AWS_S3_ARTICLE_RESOURCES_BUCKET_NAME |
✅ | |||
AWS_S3_NFTS_BUCKET_NAME |
✅ | |||
AWS_CLOUD_FRONT_DISTRIBUTION_ID |
✅ | |||
AWS_REGION |
✅ |
これらはすべてterraform output
を使って生成すれば良さそう
このためには、terraform_user
の.aws
のクレデンシャルたちがあらかじめ必要
命名規則:
{サービス名}_{中身の名前}
ETH_{中身の名前}
key | blockchain | client | server |
---|---|---|---|
ETHERSCAN_API_KEY |
✅ | ||
ETH_ADMIN_PRIVATE_KEY |
✅ | ✅ | |
TINY_MCE_API_KEY |
✅ | ||
DB_URI |
✅ | ||
ETH_MUMBAI_NETWORK_URI |
✅ | ✅ | |
ETH_POLYGON_NETWORK_URI |
✅ | ✅ |
DB_URI
については、gorm形式のものとなってしまっているので、DB_USER_NAME
やDB_PASSWORD
などに細かく分割した方が良さそう( #210 に関連)
ETH_*_NETWORK_URI
は、alchemyのapikeyを含むので、公開できない
現時点では、MUMBAI
とPOLYGON
の代わりにdevとprodとしてもよいが、今後複数ネットワークをサポートする場合を見据えてネットワーク名ごとに分ける方式をとってみる
これらはユーザ入力に頼るか、aws secrets managerに保存するかになりそう github actions上ではsecretsに登録する必要あり
key | blockchain | client | server |
---|---|---|---|
ETH_CHAIN_ID |
✅ | ||
ETH_CONTRACT_ADDRESS |
✅ |
ETH_CONTRACT_ADDRESS
については、contractのデプロイ時に確定するので、blockchain/scripts/deploy.ts
でアドレスをなんらかの形で保存しておくのが良さそう(このファイルはignoreしないでgit管理した方がいいと思われる)
参考:https://ethereum.stackexchange.com/questions/119967/how-to-get-the-address-of-an-already-deployed-contract-in-hardhats-network
プロジェクトルートにenvironments
ディレクトリを用意し、ここに.aws
のcredentialと、↑で生成される各種.env
ファイルたちをまとめる
knowtfolio/
├─ blockchain/
├─ client/
├─ infrastructure/
├─ server/
├─ environment/
│ ├─ .aws/
│ ├─ .gitignore
│ ├─ aws.env [AWS_*]
│ ├─ eth.env [ETH_*, ETHERSCAN_API_KEY (, MUMBAI_URL)]
│ ├─ db.env [DB_*]
│ ├─ misc_apis.env [TINY_MCE_API_KEY]
各種.env
ファイルについては、Makefile
で生成するようにする
docker-compose.ymlでは、これらの中から必要なものだけを選択すれば良い
services:
client:
env_file:
- ./environment/aws.env
- ./environment/misc_apis.env # for tiny-mce
.aws
はinfrastructure
から移動するが、これはconfig.tf
を書き換えるだけで対応可能
表を見ると、envの内容はサービス(blockchain, client, server)間でほとんど重複していないので、データソースごとのjson?か何かを生成後に、サービスごとの.env
にまとめるのはありかもしれない
公開できない変数の格納にaws secrets managerの使用を検討していたが、調べた結果、これとは別のaws system manager パラメータストアが内容ほぼ変わらず無料(secrets managerは無料枠なし)なので、こっちでええやんとなっている 参考:https://qiita.com/tomoya_oka/items/a3dd44879eea0d1e3ef5
各
.env
が肥大化してきて、共通の項目も増えたので統合しよう