0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

問題

AWS公式ブログに記載されている以下の実装例では、 amplify.yml にて $secrets で保存したシークレットが取得できる、とされています。

amplify.yml
version: 1

frontend:
  phases:
    preBuild:
      commands:
        - yum -y install jq
        - jq --version
        - npm ci
    build:
      commands:
        - echo $secrets | jq -r 'to_entries|map("\(.key)=\(.value)")|.[]' >> .env
        - npm run build
  artifacts:
    baseDirectory: .next
    files:
      - "**/*"
  cache:
    paths:
      - node_modules/**/*

しかし、実際に echo $secretsenv で確認しても、中身は空です(secrets 変数自体は存在するようです)。

GitHubのissueでも同様の問題が提起されており、サービスロールの権限の問題と指摘されていますが、自分はすべての権限を付与しても解決しませんでした。

なお、試した際の aws-amplify のバージョンは 6.11.0 です。

解決策

実装

以下のように直接 aws ssm コマンドを叩くと、シークレット値を取得できます。

amplify.yml
version: 1
backend:
  # 省略
frontend:
  phases:
    build:
      commands:
        - SOME_SECRET_1=$(aws ssm get-parameter --name "/amplify/shared/${AWS_APP_ID}/SOME_SECRET_1" --with-decryption --query "Parameter.Value" --output text 2>/dev/null || aws ssm get-parameter --name "/amplify/${AWS_APP_ID}/${AWS_BRANCH}/SOME_SECRET_1" --with-decryption --query "Parameter.Value" --output text)
        - echo "SOME_SECRET_1=$SOME_SECRET_1" >> .env.production
        - SOME_SECRET_2=$(aws ssm get-parameter --name "/amplify/shared/${AWS_APP_ID}/SOME_SECRET_2" --with-decryption --query "Parameter.Value" --output text 2>/dev/null || aws ssm get-parameter --name "/amplify/${AWS_APP_ID}/${AWS_BRANCH}/SOME_SECRET_2" --with-decryption --query "Parameter.Value" --output text)
        - echo "SOME_SECRET_2=$SOME_SECRET_2" >> .env.production
        - npm run build
  # 以下省略

解説

Amplifyドキュメントにあるように、全ブランチ共通のシークレットは /amplify/shared/<app-id>/<secret-key> に保存され、ブランチ固有のシークレットは /amplify/<app-id>/<branchname>/<secret-key> に保存されます。

上記の実装では、最初に全ブランチ共通のシークレットから取得し、なければブランチ固有のシークレットから取得するようにしています。

ここでは build フェーズで取得しましたが、 prebuild で取得したほうがいいかもしれません。

おわりに

AWS公式ブログ通りに実装しても取得できないのは不思議です。
自分が何か勘違いしているだけかもしれないので、他に解決策があればぜひコメントで情報を共有してください。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?