6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Amplifyのoverride.tsで環境名を取得する

Last updated at Posted at 2022-02-28

課題

Amplify CLIではAuthなどのCFnテンプレートを上書きするためのファイルとして、override.tsが提供されています。このoverride.tsはaws-cdk内の一部のメソッドのみを利用できるようになっています。
本来、getProjectInfo()でAmplifyのプロジェクトの詳細を取得することができるのですが、2022/2/28現在このメソッドはアクセス権限に関する以下のエラーが発生するため利用できません。

⠇ Building resource storage/MyStorage🛑 Error: Skipping override due to VMError: Access denied to require 'os'

override.ts内で環境名を取得する必要がある場合、上記メソッドを使わずに取得する方法をご紹介します。

解決策

※注意
本記事で紹介する解決策は邪道です。issue(https://github.com/aws-amplify/amplify-cli/issues/9063 )が対応され次第修正した方が良いです。

Amplify CLIではプロジェクトの環境等のメタ情報をamplify/backend/amplify-meta.jsonにて保持しています。このファイルはamplify env checkout ...などのコマンドで環境が変更された際、amplify/team-provider-info.jsonamplify/backend/backend-config.jsonの情報を元に構築されるものです。今回はここから環境名を取得します。

手順1:amplify-meta.jsonのモジュール化

amplify-meta.jsonをモジュールとしてシンボリックリンクを貼ります。ファイルを直接読みにいくことも可能のようですが、私の環境ではエラーが発生し読み込めなかったためこの手順を踏んでいます

cd amplify/backend
yarn add link:./amplify-meta.json

手順2:override内でStackNameの取得

amplify-meta.jsonのStackNameを取得します。StackNameはamplify-[プロジェクト名]-[環境名]-[プロジェクト番号]で構成されているため、文字列を分解すれば環境名を取得することができます。

override.ts
export function override(resources: AmplifyAuthCognitoStackTemplate) {
  const amplify_meta_json = require('amplify-meta.json')
  const env_name = amplify_meta_json.providers.awscloudformation.StackName.split("-").slice(-2, -1).pop()
//省略
}

まとめ

override.ts内で環境名を取得する機会は多いと思われるので、誰かの参考になれば幸いです。
また、この対応はissue内のcespin氏を参考にしております。この場を借りてお礼申し上げます。

参考

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?