amplify-category-api icon indicating copy to clipboard operation
amplify-category-api copied to clipboard

Deployment failed: MissingRequiredParameter: Missing required key 'functionId' in params

Open cabcookie opened this issue 1 year ago • 40 comments

Environment information

System:
  OS: macOS 14.3.1
  CPU: (10) arm64 Apple M1 Pro
  Memory: 112.33 MB / 32.00 GB
  Shell: /bin/zsh
Binaries:
  Node: 18.19.0 - ~/.nvm/versions/node/v18.19.0/bin/node
  Yarn: undefined - undefined
  npm: 10.2.3 - ~/.nvm/versions/node/v18.19.0/bin/npm
  pnpm: undefined - undefined
NPM Packages:
  @aws-amplify/backend: 0.12.1
  @aws-amplify/backend-cli: 0.11.1
  aws-amplify: 6.0.16
  aws-cdk: 2.126.0
  aws-cdk-lib: 2.126.0
  typescript: 5.3.3
AWS environment variables:
  AWS_STS_REGIONAL_ENDPOINTS = regional
  AWS_NODEJS_CONNECTION_REUSE_ENABLED = 1
  AWS_SDK_LOAD_CONFIG = 1
No CDK environment variables

Description

Hello, I run into an issue with my sandbox environment. It happened twice to me in the last 2 weeks and I had to delete and recreate my sandbox which has been quite cumbersome (including recreation of demo data). I login to my account using SSO and the profile org-data-amplify. My session is valid for a couple of hours and then I need to sign in again. Yesterday, I launched my sandbox environment with npx amplify sandbox --profile org-data-amplify and forgot to stop it. So, today I got back to VS Code (I didn't restart it) and stopped the sandbox and ran the command again. Now, I tried to make a change to my data model. I changed my Activity schema from

const schema = a.schema({
  Context: a.enum(["family", "hobby", "work"]),
  Activity: a
    .model({
      owner: a.string().authorization([a.allow.owner().to(["read", "delete"])]),
      notes: a.string(),
      finishedOn: a.datetime(),
    })
    .authorization([a.allow.owner()]),
});

to

const schema = a.schema({
  Context: a.enum(["family", "hobby", "work"]),
  Activity: a
    .model({
      owner: a.string().authorization([a.allow.owner().to(["read", "delete"])]),
      notes: a.string(),
      slateNotes: a.string(),
      finishedOn: a.datetime(),
    })
    .authorization([a.allow.owner()]),
});

Amplify identified correctly a file update, synthesized the template and tried to deploy the update but then failed with the mentioned error message. Here is the output in my console: [Sandbox] Triggered due to a file update event: /Users/carskoch/Development/personal-crm/amplify/data/resource.ts

✨ Synthesis time: 3.86s

⚠️ The --hotswap and --hotswap-fallback flags deliberately introduce CloudFormation drift to speed up deployments ⚠️ They should only be used for development - never use them for your production Stacks!

amplify-personalcrm-carskoch-sandbox-63e4bb09d0: deploying... [1/1]

✨ hotswapping resources: ✨ AWS::AppSync::FunctionConfiguration 'MutationcreateActivityauth0Function' ✨ AWS::AppSync::FunctionConfiguration 'MutationupdateActivityauth0Function' ✨ AWS::AppSync::GraphQLSchema 'uevvie4lgje2pegsontu5uvbwaGraphQLSchema' ✨ Contents of S3 Bucket 'amplify-personalcrm-carsk-amplifydataamplifycodege-8slq063fvosf'

✨ Contents of S3 Bucket 'amplify-personalcrm-carsk-amplifydataamplifycodege-8slq063fvosf' hotswapped! ✨ AWS::AppSync::GraphQLSchema 'uevvie4lgje2pegsontu5uvbwaGraphQLSchema' hotswapped! The CloudFormation deployment has failed. Find more information in the CloudFormation AWS Console for this stack. Caused By: ❌ Deployment failed: MissingRequiredParameter: Missing required key 'functionId' in params

It mentions I should verify CloudFormation. However, CloudFormation is not showing any events. How can I fix this issue?

cabcookie avatar Feb 27 '24 08:02 cabcookie

I ran npx amplify sandbox with the --debug option and received more details:

[DEBUG] 2024-02-27T13:05:14.681Z: 
 ❌  amplify-personalcrm-carskoch-sandbox-63e4bb09d0 failed: MissingRequiredParameter: Missing required key 'functionId' in params
    at ParamValidator.fail (/Users/carskoch/Development/personal-crm/node_modules/aws-cdk/lib/index.js:373:224807)
    at ParamValidator.validateStructure (/Users/carskoch/Development/personal-crm/node_modules/aws-cdk/lib/index.js:373:225157)
    at ParamValidator.validateMember (/Users/carskoch/Development/personal-crm/node_modules/aws-cdk/lib/index.js:373:225789)
    at ParamValidator.validate2 [as validate] (/Users/carskoch/Development/personal-crm/node_modules/aws-cdk/lib/index.js:373:224402)
    at Request.VALIDATE_PARAMETERS (/Users/carskoch/Development/personal-crm/node_modules/aws-cdk/lib/index.js:373:143072)
    at Request.callListeners (/Users/carskoch/Development/personal-crm/node_modules/aws-cdk/lib/index.js:373:91385)
    at callNextListener (/Users/carskoch/Development/personal-crm/node_modules/aws-cdk/lib/index.js:373:91177)
    at /Users/carskoch/Development/personal-crm/node_modules/aws-cdk/lib/index.js:373:141847
    at finish (/Users/carskoch/Development/personal-crm/node_modules/aws-cdk/lib/index.js:373:125042)
    at /Users/carskoch/Development/personal-crm/node_modules/aws-cdk/lib/index.js:373:125392 {
  code: 'MissingRequiredParameter',
  time: 2024-02-27T13:05:14.680Z
}

[DEBUG] 2024-02-27T13:05:14.681Z: 
 ❌ Deployment failed: MissingRequiredParameter: Missing required key 'functionId' in params
    at ParamValidator.fail (/Users/carskoch/Development/personal-crm/node_modules/aws-cdk/lib/index.js:373:224807)
    at ParamValidator.validateStructure (/Users/carskoch/Development/personal-crm/node_modules/aws-cdk/lib/index.js:373:225157)
    at ParamValidator.validateMember (/Users/carskoch/Development/personal-crm/node_modules/aws-cdk/lib/index.js:373:225789)
    at ParamValidator.validate2 [as validate] (/Users/carskoch/Development/personal-crm/node_modules/aws-cdk/lib/index.js:373:224402)
    at Request.VALIDATE_PARAMETERS (/Users/carskoch/Development/personal-crm/node_modules/aws-cdk/lib/index.js:373:143072)
    at Request.callListeners (/Users/carskoch/Development/personal-crm/node_modules/aws-cdk/lib/index.js:373:91385)
    at callNextListener (/Users/carskoch/Development/personal-crm/node_modules/aws-cdk/lib/index.js:373:91177)
    at /Users/carskoch/Development/personal-crm/node_modules/aws-cdk/lib/index.js:373:141847
    at finish (/Users/carskoch/Development/personal-crm/node_modules/aws-cdk/lib/index.js:373:125042)
    at /Users/carskoch/Development/personal-crm/node_modules/aws-cdk/lib/index.js:373:125392 {
  code: 'MissingRequiredParameter',
  time: 2024-02-27T13:05:14.680Z
}

cabcookie avatar Feb 27 '24 13:02 cabcookie

Hey @cabcookie, could you try bumping the package version to beta which should contain the latest changes and re-run the sandbox.

"@aws-amplify/backend": "0.13.0-beta.3",
"@aws-amplify/backend-cli": "0.12.0-beta.3",

ykethan avatar Feb 27 '24 18:02 ykethan

I created a separate sandbox to ensure I can reproduce the error if you come up with a recommendation. I just shifted back to the sandbox with the issue and tried to reproduce the error and yes I succeeded.

My simplified schema looks like this:

import { type ClientSchema, a, defineData } from "@aws-amplify/backend";

const schema = a.schema({
  Activity: a
    .model({
      owner: a.string().authorization([a.allow.owner().to(["read", "delete"])]),
      notionId: a.integer(),
      notes: a.string(),
      forProjects: a.manyToMany("Projects", {
        relationName: "ProjectActivity",
      }),
      forMeeting: a.belongsTo("Meeting"),
      finishedOn: a.datetime(),
    })
    .authorization([a.allow.owner()]),
});

export type Schema = ClientSchema<typeof schema>;

export const data = defineData({
  schema,
  authorizationModes: {
    defaultAuthorizationMode: "userPool",
  },
});

Now, when I add a property to my model (e.g., noteVersion: a.integer()), I run into this issue. I update my package.json with the following lines:

"@aws-amplify/backend": "0.13.0-beta.3",
"@aws-amplify/backend-cli": "0.12.0-beta.3",

and ran npm i in my terminal. When I do the same schema change again it starts running the CloudFormation changes and succeeds.

I tried to understand what changed between the versions and can't spot what change could impact the sandbox to successfully making the changes now.

cabcookie avatar Feb 29 '24 10:02 cabcookie

I removed the new property. The sandbox recognized the change on the schema and tried to implement the changes again and failed with the same error message:

The CloudFormation deployment has failed. Find more information in the CloudFormation AWS Console for this stack.
Caused By: ❌ Deployment failed: MissingRequiredParameter: Missing required key 'functionId' in params

cabcookie avatar Feb 29 '24 10:02 cabcookie

As I seem to have a working sandbox I compared the 2 amplifyconfiguration.json files and the main differences between the 2 were how the enums were treated.

When comparing the 2 configuration files, these are the differences (comparing the failing configuration to the working configuration):

Deleted:

  • modelIntrospection.models.Activity.fields.noteVersion // obviously as I added it for this test
  • modelIntrospection.enums.SixWeekBatchStatus
  • modelIntrospection.enums.SixWeekBatchAppetite

Updated:

  • aws_user_pools_id: // obvious
  • aws_user_pools_web_client_id: // obvious
  • aws_appsync_graphqlEndpoint: // obvious
  • modelIntrospection.models.SixWeekBatch.fields.status.type.enum: "SixWeekBatchStatus" to "Status"
  • modelIntrospection.models.SixWeekBatch.fields.appetite.type.enum: "SixWeekBatchAppetite" to "Appetite"

Added:

  • modelIntrospection.enums.Status
  • modelIntrospection.enums.Appetite

I guess this is because of the "failing" configuration has been created with a previous version, and the new sandbox has been created using these versions:

@aws-amplify/backend: 0.12.1
@aws-amplify/backend-cli: 0.11.1

I have no idea if this impacts the behaviour and causing the problem though

cabcookie avatar Feb 29 '24 11:02 cabcookie

Hey @cabcookie, thank you for providing this detailed information. I'm going to transfer this over to our API repository for better assistance 🙂.

ykethan avatar Feb 29 '24 14:02 ykethan

Hey @cabcookie, We aim to explore this issue further. Could you possibly join a call with us to delve deeper into the issue?

AnilMaktala avatar Mar 04 '24 13:03 AnilMaktala

Hey @cabcookie, Are you still facing this issue in the latest version?

AnilMaktala avatar May 17 '24 15:05 AnilMaktala

@AnilMaktala See this issue with
"@aws-amplify/backend": "^1.0.2", "@aws-amplify/backend-cli": "^1.0.3",

pkubat avatar May 21 '24 16:05 pkubat

I saw this issue again today in my sandbox environment. Had to delete and recreate it. I am using the versions mentioned by @pkubat

cabcookie avatar May 21 '24 18:05 cabcookie

image

... this?

asanobm avatar May 22 '24 10:05 asanobm

Yes exactly @asanobm

cabcookie avatar May 22 '24 21:05 cabcookie

@cabcookie

Yes, I've had that same experience multiple times. In the end, the only solutions were either to recreate the sandbox or reset the data structure to its original state and try again.

I apologize for not being of much help. It seems like there might be a bug. It would be a good idea to create a bug report.

npx ampx info
System:
  OS: macOS 14.4.1
  CPU: (10) arm64 Apple M1 Max
  Memory: 22.71 GB / 64.00 GB
  Shell: /bin/zsh
Binaries:
  Node: 18.20.2 - ~/.nodebrew/current/bin/node
  Yarn: undefined - undefined
  npm: 10.8.0 - ~/workspace/fleeklounge/amplify-next-template/node_modules/.bin/npm
  pnpm: undefined - undefined
NPM Packages:
  @aws-amplify/backend: 1.0.2
  @aws-amplify/backend-cli: 1.0.3
  aws-amplify: 6.3.2
  aws-cdk: 2.142.0
  aws-cdk-lib: 2.142.0
  typescript: 5.4.5
AWS environment variables:
  AWS_STS_REGIONAL_ENDPOINTS = regional
  AWS_NODEJS_CONNECTION_REUSE_ENABLED = 1
  AWS_SDK_LOAD_CONFIG = 1
No CDK environment variables

asanobm avatar May 22 '24 22:05 asanobm

@cabcookie

Hello. The same error occurred today as well. After trying various methods, I updated the amplify CLI and it seems to have resolved the issue.

image

asanobm avatar May 24 '24 04:05 asanobm

@asanobm I seem to have gotten the same error today as well. Updating didn't seem to help.

LukaASoban avatar May 30 '24 23:05 LukaASoban

I'm also bumping into this issue on: "@aws-amplify/backend": "^1.0.2", "@aws-amplify/backend-cli": "^1.0.3",

JDMathew avatar Jun 12 '24 22:06 JDMathew

Also running into this issue

kekami avatar Jun 13 '24 20:06 kekami

image I got the same error. I reverted back to where there was no error, ran the sandbox command, and then I changed again. It worked for me. It was a weird behavior, but just give it a try.

jewells07 avatar Jun 19 '24 16:06 jewells07

The same error occurred as well. I commented out the model defined in resource.ts that I recently changed. After the error disappeared, I uncommented it, and it worked.

suekou avatar Jul 03 '24 06:07 suekou

also seeing this issue with: "@aws-amplify/backend": "1.0.4", "@aws-amplify/backend-cli": "1.1.0",

Update 8/7: I found an underlying issue by running npx amplify sandbox with --debug and I have not encountered this again since resolving my user error.

treewhopper avatar Jul 03 '24 09:07 treewhopper

Encountering this after schema modifications occasionally. I have to delete and re-seed my sandbox

wavegate avatar Jul 04 '24 16:07 wavegate

Over the past 2 weeks. I ran into the issue multiple times. I couldn't find another solution than destroying my sandbox environment and creating a new one. I am running these versions right now:

System:
  OS: macOS 14.5
  CPU: (10) arm64 Apple M1 Pro
  Memory: 148.27 MB / 32.00 GB
  Shell: /bin/zsh
Binaries:
  Node: 18.19.0 - ~/.nvm/versions/node/v18.19.0/bin/node
  Yarn: undefined - undefined
  npm: 10.2.3 - ~/.nvm/versions/node/v18.19.0/bin/npm
  pnpm: undefined - undefined
NPM Packages:
  @aws-amplify/backend: 1.0.3
  @aws-amplify/backend-cli: 1.0.4
  aws-amplify: 6.3.4
  aws-cdk: 2.144.0
  aws-cdk-lib: 2.144.0
  typescript: 5.4.5
AWS environment variables:
  AWS_STS_REGIONAL_ENDPOINTS = regional
  AWS_NODEJS_CONNECTION_REUSE_ENABLED = 1
  AWS_SDK_LOAD_CONFIG = 1
No CDK environment variables

Will update packages and try again.

cabcookie avatar Jul 05 '24 15:07 cabcookie

I ran into this issue as well. In my case, I renamed an existing table field, and this error happened. Had to delete the sandbox and regenerate.

amalhub avatar Jul 19 '24 15:07 amalhub

+1

As a result of a development process I've simply added an extra attribute to an already deployed model definition which resulted in above error. Even tho it's relatively easy to solve this in your sandbox as you remove then re-create your table but what would be a workaround in production type environment without losing data? Is this ever going to be fixed ?

flowstatedivers avatar Jul 25 '24 18:07 flowstatedivers

Same here, added an attribute to my model, now the sandbox does not deploy anymore. Second time today. Hope this will get a fix soon.

nhilbert avatar Aug 07 '24 18:08 nhilbert

Same here, added an attribute to my model, now the sandbox does not deploy anymore. Second time today. Hope this will get a fix soon.

Have you tried running your npx amplify sandbox with --debug? I've learned that this function error is very generic, and in my case I was able to get the details I needed to find the underlying issue by adding --debug. Good luck!

treewhopper avatar Aug 07 '24 22:08 treewhopper

I was able to reproduce the issue after restarting the sandbox and making changes to the model. image

AnilMaktala avatar Aug 08 '24 15:08 AnilMaktala

Run into this as well

I've removed "read" permission in auth rule and it started to fail with this functionId error

.authorization((allow) => [allow.owner().to("read")])

I'm not using amplify cli for deployments. I couldn't make it work for more standard "environments", rather than ephemeral sandboxes. It was conflicting with some environment-specific CDK resources.

So the deployment still works with a full deployment cycle, when CDK CLI has no hotswap and direct options. After a full update it can do hotswap again

If anybody wants to try it, this is the cdk command I'm using

cdk deploy --ci --all --output .amplify/artifacts/cdk.out --context amplify-backend-namespace=yourAmplifyAppId --context amplify-backend-name=master --require-approval never --context amplify-backend-type=branch --profile YourAwsSSOProfile-dev --hotswap-fallback --method=direct --watch --context secretLastUpdated=1718888347200 --debug

OperationalFallacy avatar Aug 10 '24 21:08 OperationalFallacy

Calling the sandbox with npx ampx sandbox --debug was a helpful hint. I even added a JSON.stringify(...) [1] to the ./node_modules/aws-cdk/lib/index.js as the error message Missing required key "functionId" in params wasn't so helpful. The error comes up very randomly when I add a property in my table. I can't figure out what type of changes is causing the issue as the error messages are not providing enough details even in --debug mode. With the JSON.stringify(...) I added to the cdk code, I saw that one of the mutation functions of the model I changed was causing the error. This issue happens to me at least once a week. Now, at least I realized I can fix the issue without destroying the whole sandbox by just dropping this particular table and adding it to the schema again afterwards. Still I have to reproduce the data of that table and maybe the tables it has relations with but not the entire sandbox which is less time-consuming.

@treewhopper can you explain a bit how you identified the issue using the debug function? It might be super helpful to reproduce the error and fix it in my environment when it comes up or for the Amplify team to fix it entirely.

[1] In the aws-cdk/lib/index.js I searched for this code this.fail("MissingRequiredParameter","Missing required key '"+paramName+"' in "+context) and changed it to this this.fail("MissingRequiredParameter","Missing required key '"+paramName+"' in "+context+": "+JSON.stringify({shape,params,context})) to get more details on the error.

cabcookie avatar Aug 14 '24 06:08 cabcookie

I haven't been able to repro this either. Can folks who have been able to repro confirm that they have completely wiped node_modules, updated to latest versions of all amplify + aws + construct libs, and are still seeing the issue?

svidgen avatar Aug 19 '24 20:08 svidgen