簡體   English   中英

將現有 AWS 資源合並到 CloudFormation 堆棧中

[英]Incorporate existing AWS resources into a CloudFormation stack

有沒有辦法將在 CloudFormation 之外創建的現有 AWS 資源合並到現有的 CloudFormation 堆棧中? 我想這樣做而不必在 CloudFormation 堆棧中添加新資源並將現有資源的數據遷移到該新資源。 我看到 AWS 現在對 CloudFormation 堆棧進行了漂移檢測。 我想知道是否可以利用這將現有資源合並到堆棧中。

將資源導入/采用到現有 CloudFormation 堆棧的能力是 CloudFormation 客戶的第一要求。 我們已經考慮了一段時間的方法,但還沒有找到既適合客戶需求又適合服務運營規模的機制。

由於我們不會在服務之外的任何地方公開堆棧狀態信息供您修改,因此在我們提供采用功能之前您可以采取的唯一方法是將有關資源的元數據存儲在參數存儲中,或者使用自定義資源作為包裝器來檢索有關底層資源的信息,然后通過 Fn::GetAtt 將其顯示到您的堆棧中。

您可以通過將現有資源信息通過Parameters傳遞到您的堆棧來做到這一點。 以下是如何將這些參數傳遞到堆棧的示例

查看 Eric Hammond 的這篇博客文章,其中描述了如何將這些參數合並到堆棧的其余部分中。 所描述的用例有點不同,因為如果沒有傳入它們,它們可以選擇創建新資源,但整體結構適用於您所描述的情況。

在這種情況下,我認為 Drift Detection 不會幫助您,因為它會顯示已部署資源與堆棧中描述的配置之間的差異。 不會檢查在堆棧外定義/創建的資源。

Amazons CDK (目前在撰寫本文時處於開發人員預覽階段)提供了一種方法:

如果您需要引用在 CDK 應用程序外部定義的資源,例如 Amazon S3 存儲桶或 VPC,您可以使用 AWS 構造中提供的 Xxxx.import(...) 靜態方法。 比如可以通過Bucket.import()方法獲取一個BucketRef對象,在大部分需要bucket的地方都可以使用。 此模式允許將在您的應用程序外部定義的資源視為您的應用程序的一部分。

來源: https : //docs.aws.amazon.com/CDK/latest/userguide/aws_construct_lib.html

它還允許導入現有的 CloudFormation 模板: https ://docs.aws.amazon.com/CDK/latest/userguide/use_cfn_template.html

CloudFormation 現在支持將現有資源導入堆棧:

AWS 公告: AWS CloudFormation 推出資源導入

說明通過一個例子: 這里

Cloudformer可能會幫助您從現有資源創建一個新堆棧,然后您可以向該堆棧添加更多資源。 但是不知道有什么方法可以將現有堆棧與堆棧外的現有資源“合並”。

在我的情況下,我需要從我賬戶中現有的 SAM 輸出中導入一個 ARN 值,以便我可以在我的新堆棧中添加正確的調用策略。

我正在尋找等效於 SAM 的Fn::ImportValue ,並發現核心模塊有一個靜態Fn.importValue方法,您可以這樣使用:

const cdk = require('@aws-cdk/core');
const lambda = require('@aws-cdk/aws-lambda')

class MyStack extends cdk.Stack {
    constructor(scope, id, props) {
        super(scope, id, props);

        // The below line did the trick
        const arn = cdk.Fn.importValue(`your-sam-function-export-name`)
        const myLambda = lambda.Function.fromFunctionArn(this, 'myLambda', arn)
        // ...
    }
}


參考: https : //docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_core.Fn.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM