CDKでSSM valueForStringParameter
メソッドを使用すると問題が発生します。スタックを初めてデプロイするときに機能しますが、CloudFormationテンプレートは変更されていないため、SSMパラメーターが変更されていてもCloudFormationは更新がないと判断するため、スタックを再デプロイするときにパラメーター値の更新を取得しません。
コンテキストとして、CodePipelineを介してスタックをデプロイしています。最初にcdk synth
を実行し、次にCloudFormationCreateUpdateStackAction
アクションを使用してテンプレートをデプロイします。
誰かがそれを回避する方法を知っていますか?私が機能することがわかっている他の唯一のオプションは、SSMを呼び出してaws-sdkを使用して値を返すカスタムリソースラムダに切り替えることですが、それは過度に複雑なオプションのように感じられます。
pdate 1使用できないValueFromLookup
because値は実行時に別のスタックによるcloudformationデプロイメントの一部としてのみ更新されるため(両方のスタックを2つの異なるリージョンのCodePipelineにデプロイする)、合成時間のルックアップ古くなった値になります。
ルックアップ関数を使用できず、configをcdkに渡す最も一般的な方法は コンテキスト変数 を使用するため、ダーティーな回避策しか提案できません。
たとえば、デプロイがあるたびにバンプするダミーパラメータをスタックに作成できます。
var deploymentId = new CfnParameter(this, "deploymentId", new CfnParameterProps() { Type = "String", Description = "Deployment Id" });
SetParameterValue(deploymentId, this.Node.GetContext("deploymentId").ToString());
cFを合成するときに、IDを生成できます。
cdk synth -c deploymentId=$(uuidgen)
「環境にとらわれない」syth
を回避でき、複数の環境にデプロイする不変のアーティファクトが本当に必要な場合は、cdkからビルドされたパッケージ、たとえばcdkを含むnpmパッケージを使用できます。したがって、ssmパラメータストアを使用する代わりに、コンテキストパラメータを上書きすることで、各環境にデプロイできます。
https://docs.aws.Amazon.com/cdk/latest/guide/get_ssm_value.html を参照してください。値が異なる場合は、合成時にパラメーターストアvalueFromLookup
を取得するメソッドvalue
を使用できます前のバージョンでは、これによりCFスタックの更新がトリガーされます。
しかし、valueForStringParameter
は https://aws.Amazon.com/blogs/mt/integrating-aws-cloudformation-with-aws-systems-に基づいて、更新されたssmパラメーター値でも機能するはずであるという印象を受けました。 manager-parameter-store / 例2:
すべてのvalueOf*
およびfrom*
メソッドは、CloudFormationパラメーターを追加することで機能します。すでに理解したように、パラメーター値を変更してもテンプレートは変更されず、変更はトリガーされません。
代わりにおそらく使用したいのは、メソッドvalueFromLookup
です。ルックアップはシンセ中に実行され、結果は生成されたCFNテンプレートに入れられます。
ssm.StringParameter.valueFromLookup(this, 'param-name');
ただし、ルックアップはcdk.context.json
に格納されることに注意してください。そのファイルをリポジトリにコミットした場合、synth/diff/deployの前にcdk context -e ...
を介してそのキーを消去する必要があります。