web-dev-qa-db-ja.com

cloudformationでは、再利用可能な文字列を作成することは可能ですか?

私は、タグやホスト名などの多くの異なるものに使用するいくつかの変数から形成される文字列を持っています。

テンプレートを参照するだけで再利用できる文字列を作成する方法はありますか?

これに関するどんな考えでも大歓迎です。編集:例として、ProjectNameとEnvironmentを結合する2つのパラメーターを渡します。

"Fn::Join" : [ "-", [ {"Ref":"ProjectName"}, {"Ref":"Environment"} ] ]

結果をさまざまな場所で使用する

14
Graeme

残念ながら、私の実験はあなたの結論であるGraemeに同意することです。私はしばらくこれに苦労しましたが、Fn :: Joinを介して文字列を計算し、後でテンプレートで使用するために保持する方法が見つかりませんでした。

典型的な例を教えてください。

2014-09-18と同様に、リソースセクションで再利用するために文字列値を格納する最も洗練された方法は、(第2レベルの)マッピングを使用することです。さらに良いことに、条件を事前に計算して、文字列を使用するかどうかを決定できます。しかし、残念ながら文字列の保存は機能しません。

以下は、そのようなマッピングのスタンザの例です…

    "LoadBalancerBucketMap": {
        "BucketName": {
            "string": {
                "Fn::Join": [
                    "-",
                    [
                        "mylb",
                        {
                            "Ref": "Environment"
                        },
                        "logs"
                    ]
                ]
            }
        }
    },

そして、リソースへのアクセス式は次のとおりです

                "S3BucketName": {
                    "Fn::FindInMap": [
                        "LoadBalancerBucketMap",
                        "BucketName",
                        "string"
                    }

この例では、Environmentは便利なデフォルトのリテラル文字列パラメーターです。これは、文字列の作成と再利用の非常に明確な例です。しかし、これがCloudFormationプロセッサが言うことです…

テンプレート検証エラー:テンプレート形式エラー:すべてのマッピング属性は文字列またはリストである必要があります。

テンプレートに一時的な文字列変数の効果を提供する方法がないように思われるという不満を共有します。

…私が見る限りでは。しかし、あなたが最初に受け取った答えはこれの反対を言いました(例はありませんが)。

ですから、誰かが回避策の例を持っている場合は、共有してもらえますか?

7
johnz

パラメータまたはマッピングを使用して、テンプレートで使用できる文字列を格納できます。

2
Drew Khoury

残念ながら、私が達成しようとしていたことを実行することは不可能であることがわかりました。それは助けにはなりませんが、それはあります。

0
Graeme

実際には、{ProjectName}-{Environment}の実行中にCloudFormationスタック名を正確にaws cloudformation deployにします。スタック名にこの命名規則を検討しましたか?

その後は、{ "Fn:Sub": "${AWS::StackName}" }として参照できます。

0
Ryan McGeary