1

新しいAWSアプリケーションインフラストラクチャの一部にServerlessを使用するかどうかを評価しています。我々は、Cloudformationを(Ansibleによって配備された)大量に使用するので、既存のCloudformスタックの出力をきれいに参照できるようにする必要があります - 既存のAWSネットワークインフラストラクチャのサブネットIDをラムダ関数。参照先サーバーのフレームワークでの既存の雲のスタック出力

多くのブラウジングの後、私はこれを行うためのすぐに使える方法を見たことがありません。私たちの既存のCloudformationスタックの名前は、スタックの名前と目的の出力変数をキー入力すれば、さまざまな環境で確実に目的の出力を得ることができます。私が見る1つの可能な解決策は、aws cliを使って変数を引き出し、それらを環境変数としてサーバーレスに渡すことですが、可能ならばよりクリーンな方法を望みます。

+0

ご質問がAWS [サーバーレスアプリケーションモデル](https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md)(SAM )、[Serverless Framework](https://serverless.com/)などがあります。 – wjordan

答えて

2

Serverless FrameworkはあなたのCloudFormationテンプレート内Intrinsic Functionsを使用することができます場合は、あなたが(OutputsセクションでExportsプロパティを使用して)1つのスタックからexporting stack output valuesによってCloudFormationテンプレート内create cross-stack referencesをすることができ、およびに別のスタック内のFn::ImportValue組み込み関数を使用してエクスポートされた値を参照してください。

+0

これは間違いなく最高の答えです。私たちは、クロススタック参照を避けました.1)最近になるまで存在したb/c。2)あるスタックの出力を別のスタックにパラメータとして明示的に渡すことによる緩やかな結合が気に入っています。私たちは「sls」が私たちのニーズに少し制限されていると判断したと思うが、これを使うなら絶対に行く方法だろう。 – rumdrums

0

あなたのサンプルケースを処理するために最も簡単な方法は、ラムダboto3を使用してboto3.client('cloudformation', region_name=*specified region*).describe_stacks(StackName=*specified stack*)['Stacks']を呼び出すことです。このリストには、StackNameと一致するすべてのスタックが含まれています。すべてのネットワークインフラストラクチャが名前のサブセットを共有している場合は、そのサブ文字列にStackNameを指定してすべてをリストできます。各Stackオブジェクトには'Outputs'ブロックが含まれています。 hereを参照してください。

どこからでも簡単に使用できるようにする場合は、ラムダにAPI Gateway GETメソッドを添付してHTMLフォームに公開することができます。

+0

返事をありがとう。私がこのアプローチで見る問題は、理想的には、ラムダ関数を配備する前でも変数の値を知っていることです。展開する機能はRDSインスタンスに接続する必要があるため、弾力性のあるネットワークインターフェイスを作成し、ネットワークにアクセスするにはサブネットIDが必要です。 – rumdrums

+0

@rumdrums RDSに接続する前に値を検索できない理由はありますか? – asdf

+0

ラムダ関数を作成するときには、ここに記述されているVpcConfigパラメータ(http://docs.aws.amazon.com/AWSCloudFormation)のように、接続するサブネットIDを与える必要があります。 /latest/UserGuide/aws-properties-lambda-function-vpcconfig.html)。私はラムダ関数が既に配備された後にサブネットIDを取得することが可能であるとは思わなかった。 – rumdrums

関連する問題