こんにちは。
開発するにあたってエラーが出て悩む瞬間が多々あるとは思います。
私は今回そのエラー内容で無駄に悩んでしまったため、備忘録としてブログに残しておきます。
■やろうとしたこと
CloudFormation でSSMパラメータを定義する
■エラーとなったymlファイル
AWSTemplateFormatVersion: '2010-09-09'
Resources:
TestHogeHoge:
Type: AWS::SSM::Parameter
Properties:
Type: String
Description: "TestHogeHoge"
Value: "sasaki-test"
Name: "aws"
Outputs:
TestHogeHoge:
Value: !Ref TestHogeHoge
■エラー文言
Parameter name: can't be prefixed with "aws" or "ssm" (case-insensitive). (Service: AmazonSSM; Status Code: 400; Error Code: ValidationException; Request ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; Proxy: null)
エラー内容をググっても納得のいく解答が見つからなかったため
今回ブログを書こうと思った次第です。
冷静に考えればエラー内容をじっくり見ていればなんとなくエラー原因がわかりそうな気もしますが、、、
開発時はそんな冷静にいられないというのも”あるある”で、解決まで時間がかかってしまいました。
■エラー内容
タイトルでネタバレしていますが今回は予約語でエラーになっていました。
そもそも予約語とは、、、??
開発者が付ける識別名として利用できない文字列のこと。予約語に挙げられた単語やフレーズは変数名や関数名などに使用することはできない。
ということで、今回はSSMパラメータの名前”aws”っていう名前はつけられないよー!
と怒られていました。
Name: “aws” の名前を変更して無事エラー回避することができました。
ちなみに私は勉強不足で全く知らなかったのですが、
SSMパラメータ以外にもDynamoDBでの属性名にDAYや/DATA が同様の理由で使用できなかったり、
他サービスにも予約語という概念は勿論存在しますので注意が必要です。
内部的に使用できない名前はその他にもあるので、
上記のようなエラー内容が出た場合は焦らず、予約語でエラーになったんだな。。。と思い出してください。
今回は以上です。