2
2

More than 1 year has passed since last update.

【AWS Amplify】functionの環境変数 "API_XXXX_GRAPHQLAPIENDPOINTOUTPUT" がデフォ値 "apixxxxGraphQLAPIEndpointOutput"になってしまう問題を無理矢理にでも解決する方法

Posted at

この記事の対象となる方

  • AWS Amplifyを使用して、Lambda(function)を作成しデプロイしている
  • Lambda(function)にAppSync(api)を叩く権限を与えたい
  • さらにLambda(function)にDynamoDB参照・更新などの権限を与えたい
  • しかし巧く行かない
    • 作成される環境変数API_XXXX_GRAPHQLAPIENDPOINTOUTPUTがヘンなのでAppSyncのエンドポイント取得に使えない…。

問題の中身

基本的に、amplify add functionamplify update functionコマンドから? Do you want to configure advanced settings?yesを選択し、

 ◉ auth
 ◉ storage
 ◯ function
❯◉ api
 ◯ custom

こんな感じで選択すれば、それぞれのリソースへの権限が解決されるはずです。

自動でIAMロールが付与されるので、Lambdaのコード内でAppSyncを使用する際に殆ど意識する必要がないのはホントに素晴らしい( 環境変数のAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKENAPI_XXXX_GRAPHQLAPIENDPOINTOUTPUTを使えば万事OK。あ、api側にIAMによるアクセスを許可する必要はありますよ )・・・ですが・・・。

デプロイすると、Lambda内で使いたい環境変数API_XXXX_GRAPHQLAPIENDPOINTOUTPUTが、何故かデフォ値のapixxxxGraphQLAPIEndpointOutputになってしまうのです。デプロイ後のコンソールを見ると、https://xxxxxxxx/graphqlではなく、エンドポイントに使えない文字列が入っています。
スクリーンショット 2022-11-30 10.57.34.png
ちなみに、amplify-cliのバージョンは10.5.1です。
image.png

結論から

解決方法は以下のとおりです。

  1. とりあえずamplify add functionamplify update functionコマンドで一通り権限を付ける。
  2. 辛いけど{project}/amplify/backend/backend-config.jsonを編集。GraphQLAPIEndpointOutputを追加する。
    "funcXXXX": {
      "build": true,
      "providerPlugin": "awscloudformation",
      "service": "Lambda",
      "dependsOn": [
        :
        :
        {
          "category": "api",
          "resourceName": "{your-api-name}",
          "attributes": [
            "GraphQLAPIIdOutput",
    +       "GraphQLAPIEndpointOutput" ←← これを追加!!!
          ]
        },
        :
        :
      ]
    },
    
  3. さらに辛いけどamplify env checkout {your-env-name}を実行する。
    • この手順がないと{project}/amplify/backend/backend-config.jsonの編集内容が{project}/amplify/backend/amplify-meta.jsonに反映されない。
  4. amplify pushでデプロイする。

すると、ちゃんとエンドポイントらしい文字列が入ります👏👏

スクリーンショット 2022-11-30 11.24.34.png

漁ったIssue

  • 巧く行かない vs ちゃんとできたけど → amplify-meta.jsonを手で直せ
    • ※ 言うまでもないですが、amplify-meta.jsonはバージョン管理外にすべきですし、手で修正してはならないと公式で謳われています。

  • backend-config.jsonamplify env checkout {your-env-name}の実行でamplify-meta.jsonに反映されるよ😡

この不具合(?)を再現するポイント

普通にamplify add functionamplify update functionでapiへの権限のみを付与すると、GraphQLAPIEndpointOutputにちゃんとエンドポイントの文字列が設定されます。

Issueのコメントに出ていた「巧く行った」パターンは恐らくこれです。

ところが、storageのうち、DynamoDBのTableに対する権限を付与すると、突然backend-config.jsonからdependsOnGraphQLAPIEndpointOutputが消失してしまうのです。恐らくamplify-cliのバグなのですが、特に修正されないまま放置されているようです。

今のところ、API_XXXX_GRAPHQLAPIENDPOINTOUTPUTの環境変数を、AppSyncのエンドポイントとして使おうと思うと、この方法でしか解決できそうにないです…。

それでは皆様、良いAmplifyライフを。

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