web-dev-qa-db-ja.com

AWS CDKでパラメーターストア値を使用する最良の方法は何ですか

CDKでSSM valueForStringParameterメソッドを使用すると問題が発生します。スタックを初めてデプロイするときに機能しますが、CloudFormationテンプレートは変更されていないため、SSMパラメーターが変更されていてもCloudFormationは更新がないと判断するため、スタックを再デプロイするときにパラメーター値の更新を取得しません。

コンテキストとして、CodePipelineを介してスタックをデプロイしています。最初にcdk synthを実行し、次にCloudFormationCreateUpdateStackActionアクションを使用してテンプレートをデプロイします。

誰かがそれを回避する方法を知っていますか?私が機能することがわかっている他の唯一のオプションは、SSMを呼び出してaws-sdkを使用して値を返すカスタムリソースラムダに切り替えることですが、それは過度に複雑なオプションのように感じられます。

pdate 1使用できないValueFromLookupbecause値は実行時に別のスタックによるcloudformationデプロイメントの一部としてのみ更新されるため(両方のスタックを2つの異なるリージョンのCodePipelineにデプロイする)、合成時間のルックアップ古くなった値になります。

2
Tofig Hasanov

ルックアップ関数を使用できず、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パラメータストアを使用する代わりに、コンテキストパラメータを上書きすることで、各環境にデプロイできます。

2
Pedreiro

https://docs.aws.Amazon.com/cdk/latest/guide/get_ssm_value.html を参照してください。値が異なる場合は、合成時にパラメーターストアvalueFromLookupを取得するメソッドvalueを使用できます前のバージョンでは、これによりCFスタックの更新がトリガーされます。

しかし、valueForStringParameterhttps://aws.Amazon.com/blogs/mt/integrating-aws-cloudformation-with-aws-systems-に基づいて、更新されたssmパラメーター値でも機能するはずであるという印象を受けました。 manager-parameter-store / 例2:

0
MilanG

すべてのvalueOf*およびfrom*メソッドは、CloudFormationパラメーターを追加することで機能します。すでに理解したように、パラメーター値を変更してもテンプレートは変更されず、変更はトリガーされません。

代わりにおそらく使用したいのは、メソッドvalueFromLookupです。ルックアップはシンセ中に実行され、結果は生成されたCFNテンプレートに入れられます。

ssm.StringParameter.valueFromLookup(this, 'param-name');

ただし、ルックアップはcdk.context.jsonに格納されることに注意してください。そのファイルをリポジトリにコミットした場合、synth/diff/deployの前にcdk context -e ...を介してそのキーを消去する必要があります。

0
udondan