cdk-remote-stackでslashを含まないSSMパラメータを使おうとしてハマった

cdk-remote-stackとは

cdk-remote-stack を使うと、cdkで、あるstackから別のregionにあるSSM parameter等を参照することをラクにできる

cdk-remote-stackの基本的な使い方は以下

import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import { RemoteParameters } from 'cdk-remote-stack';

export class CdkStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const parameterPath = '/some/parameter'
    const parameters = new RemoteParameters(this, 'RemoteParameters', {
      path: parameterPath,
      region: 'us-east-1',
    });

    const paramA = parameters.get(`${parameterPath}/aaa`);
    const paramB = parameters.get(`${parameterPath}/bbb`);

    new cdk.CfnOutput(this, 'ParameterAOutput', {
      value: paramA,
    });
  }
}

上記の /some/parameter/aaa といったSSM parameter storeのベストプラクティスっぽい、/ スラッシュを使って階層化されたパラメータをいい感じに扱える

cdk-remote-stackではスラッシュを含まない、階層化されていないパラメータを扱えない

一方で、/ で階層化されていないパラメータを参照しようとしたところハマった
例えば some-parameter といった名前のパラメータ (/ を含まない)
この場合、以下のようにcdk deploy時にカスタムリソースの実行失敗としてデプロイ失敗する

Received response status [FAILED] from custom resource. Message returned: Error: An error occurred (ValidationException) when calling the GetParametersByPath operation: The parameter doesn't meet the parameter name requirements. The parameter name must begin with a forward slash "/". It can't be prefixed with \"aws\" or \"ssm\" (case-insensitive). It must use only letters, numbers, or the following symbols: . (period), - (hyphen), _ (underscore). Special characters are not allowed. All sub-paths, if specified, must use the forward slash symbol "/". Valid example: /get/parameters2-/by1./path0_.

cdk-remote-stackではパラメータの参照に get_parameters_by_path APIが使われている

これは cdk-remote-stack が別regionのパラメータを参照するために作成するカスタムリソースにおいて、SSM get_parameters_by_path API が使われていることによるもの
https://github.com/pahud/cdk-remote-stack/blob/main/custom-resource-handler/remote-parameters.py

get_parameters_by_path APIは / で階層化されたパラメータを扱うAPIであり、/ を含まないような形のパラメータを扱おうとすると ValidationErrorとなる
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ssm/client/get_parameters_by_path.html

現状 cdk-remote-stack でパラメータ参照したい場合は / で階層化されたパラメータを使う必要がある

階層化されていないパラメータも使えるようにPR出した

ただ、やんごとなき事情で / で階層化されていないパラメータを参照したい場合もあるかなとかで
PR出した
https://github.com/pahud/cdk-remote-stack/pull/605