amplify pushする顔も三度まで

POLアドベントカレンダー16日目担当、3度目のゲバラです。　
15日目担当[まーさん@takahashik0422](https://qiita.com/takahashik0422)の[記事](https://qiita.com/takahashik0422/items/559ef9ff1859afac745d)もぜひお読みください！

#ある日の出来事

私「よし！開発環境にamplify pushしよ！」

Amplify CLI「Parameters: [unauthRoleName] do not exist in the template」

私「CLIのバージョン上げるか」

Amplify CLI「一緒のエラーやで」

私「ファッ！？」


#amplify pushができなくなる
amplify pushはAmplifyバックエンド環境の設定をAmplify CLIでローカルからプッシュするコマンドです。
これができないとバックエンド環境を変更することができません。マジで困るやつです。
gihub pushできないとの同じくらい困ります。いやそれ以上です。
CLIは結構バグっていることが多いのでバージョンアップするとよくなることがありますがダメだった。

amplify pushすると以下のようなエラーが。。。

```
Parameters: [unauthRoleName] do not exist in the template
```

issueを見てみると
https://github.com/aws-amplify/amplify-cli/issues/2519

以下の手順を実施すると解決するそう

1. amplify/backend/api/（アプリ名）/buildフォルダを削除
2. `amplify api gql-compile`コマンドを実行

`amplify api gql-compile`はapiのスキーマをコンパイルするためのコマンドです。このコマンドは`amplify push`でも動いているはずなので1.のあとにpush実行しても問題ないはずです。
無事`amplify push`できました。

#ある日の出来事２

私「よし！開発環境にamplify pushしよ」

Amplify CLI「`Parameters: [hostedUIProviderCreds] must have values`」

私「おいおい困ったやつだな、CLIのバージョン上げるか」

Amplify CLI「一緒のエラーやで」

私「ヒョッ！？」

#amplify pushができなくなる２回目
２回目です。泣きそう。
CLIは結構バグっていることが多いのでバージョンアップするとよくなることがありますがダメだった(2回目）。

```
Parameters: [hostedUIProviderCreds] must have values
```

これまたissueを見てみると
https://github.com/aws-amplify/amplify-cli/issues/6021

- `amplify pull`をしてクラウドとリモードを同期してください

とのこと。
なんか間違ったことしてしまったのかも。
無事amplify pushできました。

#ある日の出来事３

私「よし！開発環境にamplify pushしよ！」

Amplify CLI「`Unexpected token u in JSON at position 0`」

私「おいおいおいおいおいおい困ったやつだな、CLIのバージョン上げるか。。。。。。」

Amplify CLI「`jsonString' argument missing or empty`」

私「。。。。。。」

#amplify pushができなくなる３回目
泣いた。


CLIは結構バグっていることが多いのでバージョンアップするとよくなることがありますがダメだった（３回目）。

```
An error occurred when pushing the resources to the cloud
Unexpected token u in JSON at position 0
An error occurred during the push operation: Unexpected token u in JSON at position 0
```

CLIのバージョンを上げてみると

```
'jsonString' argument missing or empty An error occurred during the push operation: 'jsonString' argument missing or empty
```

issueをみると同じように困っている人がいました。

https://github.com/aws-amplify/amplify-cli/issues/6097

今はclosedされてますが、見たときはopenになっていて調査中でした。
ただCLIが修正されてもそれでは解決せず、手動で操作が必要なところが出てきました。


>やるべきことは、S3バケットから#current-cloud-backend.zipファイルをダウンロードします。このフォルダに#current-cloud-backend/api/<api名>/buildにあるcloudformation-template.jsonファイルを追加します。それを再度ZipしてS3バケットにアップロードします。

>その後、pushが動作するようになります。お役に立てたかどうか教えてください。
https://github.com/aws-amplify/amplify-cli/issues/6097#issuecomment-741896687

ダウンロードしてファイル追加して再アップロードか。。。。仕方ない。。。。
これでなんとかamplify push成功するかに見えましたがまたエラー。。。。

```
Parameters: [unauthRoleName] do not exist in the template
```

１回目と一緒のエラーですが同じ対応でも直りませんでした。
１回目のissueを追ってみると、どうやらamplify/backend/api/（アプリ名）/paramters.jsonに以下を追加しないといけない模様。

```
{
    "authRoleName": {
        "Ref": "AuthRoleName"
    },
    "unauthRoleName": {
        "Ref": "UnauthRoleName"
    }
}
```

無事`amplify push`できました。
一件落着ならぬ三件落着



ただ、３回目に関しては、毎回手動でファイルをアップロードするとか無理です。しんどいです。助けてください。この対応さらっと書いてますが、三つとも１２月中に発生して切り分けやら調査でめっちゃ時間持ってかれました。issueにこれはまれなコンステレーションで発生しますとか書いてあるのがツラい。でもAmplify使えねーってなるのも嫌なのでどうにかしたい。CLIのソースを覗くときがやってきそうです。
皆さんもどうかお気をつけください。

17日目はデザイナー[おださん@odagiri_24](https://qiita.com/odagiri_24)です！ご期待ください！