大田区から発信するゆるゆる日記

主にITエンジニアに関する備忘録日記。たまに趣味も。何か不備があればコメント頂けると幸いです。Twitterアカウント https://twitter.com/ryuzan03

【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


そしてターミナルを立ち上げ直し、再度デプロイしたらエラーが発生することなくデプロイできました。


今後に向けて

解決するのに時間がかかりすぎてしまいました。。。 これからも精進していきます。