まず、こんな感じでGraphQLスキーマを作成してしまった。

type Product
@model
@searchable
@key(fields: ["status", "createdAt"])
@auth(
  rules: [
    {allow: groups, groups: ["admin"]},
    {allow: groups, groups: ["customer"], operations: [read]},
  ])
{
  id: ID!
  name: String!
  status: Status!
  createdAt: AWSDateTime!
  updatedAt: AWSDateTime!
}

enum Status {
  PUBLISH
  DELETED
  DRAFT
}

idをハッシュキーにするべきだよね...。
ミスった。

では変更してamplify pushしてみる。

type Product
@model
@searchable
@key(fields: ["id", "status", "createdAt"]) # idを追加
@auth(
  rules: [
    {allow: groups, groups: ["admin"]},
    {allow: groups, groups: ["customer"], operations: [read]},
  ])
{
  id: ID!
  name: String!
  status: Status!
  createdAt: AWSDateTime!
  updatedAt: AWSDateTime!
}

エラー。

$ amplify push
...
Attempting to edit the key schema of the ProductTable table in the Client stack. 
An error occured during the push operation: Attempting to edit the key schema of the ProductTable table in the Client stack. 

後からキー情報は変更できないと。
まぁ当たり前か。

まだ開発段階なので、いくらでもデータベースは変更できる、ということで下記を実施。

#type Product
#@model
#@searchable
#@key(fields: ["status", "createdAt"])
#@auth(
#  rules: [
#    {allow: groups, groups: ["admin"]},
#    {allow: groups, groups: ["customer"], operations: [read]},
#  ])
#{
#  id: ID!
#  status: Status!
#  createdAt: AWSDateTime!
#  updatedAt: AWSDateTime!
#}
$ amplify push
... 
success!

すると、DynamoのProductテーブルが消えています。
その後、再度スキーマを定義しamplify pushします。

type Product
@model
@searchable
@key(fields: ["id" ,"status", "createdAt"]) # idを追加
@auth(
  rules: [
    {allow: groups, groups: ["admin"]},
    {allow: groups, groups: ["customer"], operations: [read]},
  ])
{
  id: ID!
  name: String!
  status: UserStatus!
  createdAt: AWSDateTime!
  updatedAt: AWSDateTime!
}
$ amplify push
...
success!

本番環境で同様の状況が起こった場合はどうしようかな・・。
個人的には、新しくスキーマを作成して、そこへデータ移管するしかないかなと感じます。
ElasticSearchへインデックス貼り直しも必要なので、もっと効率的な方法あるかもしれないですね。

コメントお待ちしております。