【AWS】Error: The AWS Access Key Id needs a subscription for the service【AWS CLI アカウント認証エラー】
※下記の内容に不備がありましたら、コメント頂けると幸いです。また、下記の内容をご使用頂ける場合は自己責任でお願いします。
※2020年11月21日 追記
今回のAWS CLIの認証エラーに関するベストプラクティスを見つけました!
もっと早くこの記事を見つけていれば...そしてAWSさすがだ...
EC2 インスタンスがロールの認証情報ではなく IAM ユーザーの認証情報を使用する理由
概要
SAMでAWSクラウドにデプロイした時に以下のエラーが発生しました。
$ sam deploy -g ---------------------省略--------------------- Looking for resources needed for deployment: Not found. Creating the required resources... Error: Failed to create managed resources: An error occurred (OptInRequired) when calling the CreateChangeSet operation: The AWS Access Key Id needs a subscription for the service $
AWS公式の解決策では解決できなかったので(単なる凡ミスだが)、ブログにまとめておきます。
結論
ローカルの環境変数にアクセスキーとシークレットキーを設定していたため、aws configureの設定が読み込まれていなかった。
解決への道順
まずはエラーをググってみた
ググったら早速それっぽいAWSの記事を発見。
AWS のサービスへのアクセスエラーの解決
AWSアカウントの認証かリソースへのアクセス権限がないかもとのこと。
親切にそれを確認してくれるURLが貼ってあったのでクリックしてみるが、特に問題はなさそう。
AWS認証設定がおかしいのかな?
次にAWS Access Key Idが間違っているのかなと思い、AWSコンソールからIAMのアクセスキーを作り直し、AWS CLIで設定を変更してみる。
設定ファイルと認証情報ファイルの設定 - AWS Command Line Interface
$ aws configure AWS Access Key ID [None]: 作り直したアクセスキー AWS Secret Access Key [None]: 作り直したシークレットキー Default region name [None]: ap-northeast-1. Default output format [None]: json
念のために、設定ファイルも確認してみる。
$ cd ~/.aws $ cat credentials [default] aws_access_key_id = 作り直したアクセスキー aws_secret_access_key = 作り直したシークレットキー
こちらも特に問題なさそう。 しかし、再度デプロイし直しても同じエラーがでる。
AWSに問い合わせてみた
運営側のAWSアカウントの認証がおかしいのかなと思い問い合わせてみた。 察しが良い方は既にお気付きかと思いますが、開発に関する問い合わせは有料プランで問い合わせてくださいと返事が来ました。 ルール無視してすみませんでした。さすがはしっかりしている。
設定データを表示したら気付いた謎のenvの文字
どうしようもなく困ったなーと思って設定データを見ていたら、アクセスキーの末尾が違うことに気付きました。
$ aws configure list Name Value Type Location ---- ----- ---- -------- profile <not set> None None access_key ****************ABCD env secret_key ****************ABCE env region ap-northeast-1 config-file ~/.aws/config
そしてさらに気付く謎のenvの文字。 ...環境変数イジってんな!!! 本来であれば下記のような表記になるはずでした。
$ aws configure list Name Value Type Location ---- ----- ---- -------- profile <not set> None None access_key ****************EFGH shared-credentials-file secret_key ****************EFGI shared-credentials-file region ap-northeast-1 config-file ~/.aws/config
どうやら私は過去にローカルの環境変数にAWSのアクセスキーやシークレットキーを設定していたみたいで、それが邪魔をしていました。
なので、bash_profileからAWSの設定を削除しました。
$ vim ~/.bash_profile
そしてターミナルを立ち上げ直し、再度デプロイしたらエラーが発生することなくデプロイできました。
今後に向けて
解決するのに時間がかかりすぎてしまいました。。。 これからも精進していきます。