エンジニア

2023.03.07

AWS 予約語ではまったが解決した小話

AWS 予約語ではまったが解決した小話

こんにちは。
開発するにあたってエラーが出て悩む瞬間が多々あるとは思います。
私は今回そのエラー内容で無駄に悩んでしまったため、備忘録としてブログに残しておきます。

■やろうとしたこと

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 が同様の理由で使用できなかったり、
他サービスにも予約語という概念は勿論存在しますので注意が必要です。

内部的に使用できない名前はその他にもあるので、
上記のようなエラー内容が出た場合は焦らず、予約語でエラーになったんだな。。。と思い出してください。
今回は以上です。

一覧に戻る