簡體   English   中英

解決了|| 使用 AWS-CDK Typescript 更新單個堆棧時出現 RDS 堆棧問題

[英]SOLVED || Issue with RDS stack when updating a single stack using AWS-CDK Typescript

由於使用 aws-cdk 創建和銷毀 vpc 和 rds 實例需要時間,我們將它們分成單獨的堆棧。

Vpc Rds ( 取決於 vpc ) 應用程序 ( 取決於 Rds )

起初,數據庫實例命名存在問題。 一旦這個問題得到解決,我就開始為應用程序堆棧處理管道。

當我嘗試部署我的應用程序堆棧時,它將運行依賴項並檢查。 Vpc 沒有任何更改,因此運行速度非常快,無需更新。 Rds 堆棧也應該這樣說,但它會嘗試在每次部署時更新堆棧。 如果沒有任何變化,那么它肯定應該像 Vpc 堆棧一樣運行並且理解沒有任何變化,因此跳到下一個堆棧。

使用 CloudFormation,我們可以通過向堆棧應用策略來跳過或阻止任何不需要的更新。 從我所見,這仍在發展中。

https://github.com/aws/aws-cdk/issues/3414 https://github.com/aws/aws-cdk-rfcs/issues/72

有一個使用 setPolicy 的示例,但它正在創建一個新的 cloudformation,我不太確定我將如何實現它。

    const app = new cdk.App();

const vpc = new VpcStack(app, "vpc", { env, appEnvironment: "staging" });
const rds = new RdsStack(app, "rds", {
  env,
  vpc: vpc.vpc,
  appEnvironment: "staging",
  masterPassword: dbPassword,
});
rds.addDependency(vpc);

const appStack = new AppStack(app, "app", {
  env,
  // configure the environments you want to setup.  The default is production &
  // staging, but for testing we'll just do staging.
  appEnvironments: ["staging"],
  environmentProps: {
    // per environment options go here
    staging: {
      vpc: vpc.vpc,
      db: {
        instance: rds.dbInstance,
        securityGroup: rds.securityGroup,
        username: rds.username,
        password: dbPassword,
      },
      ebOptions: {
        ec2KeyName: "App",
      },
    },
  },
});
appStack.addDependency(rds);
const pipeStack = new PipelineStack(app, "pipeline", {
  appEnvironment: "staging"
});
pipeStack.addDependency(appStack);

app.synth();

編輯

cdk diff output

  cdk diff
Stack vpcStaging
There were no differences
Stack rdsStaging
Resources
[~] AWS::RDS::DBInstance instance instanceB**** replace
 ├─ [~] DBName (requires replacement)
 │   ├─ [-] rds_staging
 │   └─ [+] DBRds
 ├─ [~] DeletionPolicy
 │   ├─ [-] Delete
 │   └─ [+] Retain
 └─ [~] UpdateReplacePolicy
     ├─ [-] Delete
     └─ [+] Retain

Stack application
Template
[-] Description Description: Elasticbeanstalk setup for application

Security Group Changes
┌───┬─────────────────────────────────────────────┬─────┬─────────────────────────────────────────────┬─────────────────────────────────────────────┐
│   │ Group                                       │ Dir │ Protocol                                    │ Peer                                        │
├───┼─────────────────────────────────────────────┼─────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┤
│ - │ {"Fn::ImportValue":"rdsStaging:ExportsOutput │ In  │ TCP {"Fn::ImportValue":"rdsStaging:ExportsOu │ ${prodsecurityGroupD*****.GroupId}        │
│   │ FnGetAttsecurityGroup88888GroupId***** │     │ tputFnGetAttinstance*****EndpointPort***** │                                             │
│   │ 1"}                                         │     │ *****"}                                     │                                             │
├───┼─────────────────────────────────────────────┼─────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┤
│ + │ ${staging/securityGroup.GroupId}         │ Out │ Everything                                  │ Everyone (IPv4)                             │
├───┼─────────────────────────────────────────────┼─────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┤
│ + │ {"Fn::ImportValue":"rdsStaging:ExportsOutput │ In  │ TCP {"Fn::ImportValue":"rdsStaging:ExportsOu │ ${staging/securityGroup.GroupId}         │
│   │ FnGetAttsecurityGroup*****GroupId***** │     │ tputFnGetAttinstance*****EndpointPort***** │                                             │
│   │ 1"}                                         │     │ *****"}                                     │                                             │
└───┴─────────────────────────────────────────────┴─────┴─────────────────────────────────────────────┴─────────────────────────────────────────────┘
(NOTE: There may be security-related changes not in this list. See https://github.com/aws/aws-cdk/issues/1299)

Resources
[-] AWS::EC2::SecurityGroup stagingsecurityGroup****** destroy
[-] AWS::EC2::SecurityGroupIngress stagingsecurityGrouprdsStagingsecurityGroup*****IndirectPortto***** destroy
[-] AWS::ElasticBeanstalk::Environment staging***** destroy
[+] AWS::EC2::SecurityGroup staging/securityGroup stagingsecurityGroup***** 
[+] AWS::EC2::SecurityGroupIngress staging/securityGroup/rdsStagingsecurityGroup*****:{IndirectPort} to stagingsecurityGrouprdsStagingsecurityGroup*****IndirectPortto***** 
[+] AWS::ElasticBeanstalk::Environment staging/staging staging***** 

這取決於您如何創建 RDS 堆棧? 差異顯示 DBName 已更改,這就是需要更換的地方。

暫無
暫無

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

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