Из-за времени, необходимого для создания и уничтожения экземпляра vp c и rds с aws -cdk, мы разделили их на отдельные стеки.
Vpc Rds (зависит от vp c) Приложение (зависит от Rds)
Сначала возникла проблема с именованием экземпляра БД. Как только это было исправлено, я начал работать над конвейером для стека приложений.
Когда я пытаюсь развернуть свой стек приложений, он пройдет через зависимости и проверит. Vp c не имеет изменений, поэтому он проходит довольно быстро и не требует никаких обновлений. То же самое следует сказать для стека Rds, но он пытается обновить стек при каждом развертывании. который, если ничего не изменилось, безусловно, он должен вести себя как стек Vp c и не понимать никаких изменений, поэтому переходите к следующему стеку.
С CloudFormation мы можем пропускать или блокировать любые нежелательные обновления, применяя политику к стек. Это все еще в разработке, что я вижу.
https://github.com/aws/aws-cdk/issues/3414 https://github.com/aws/aws-cdk-rfcs/issues/72
Есть пример использования setPolicy, но это создает новую облачную информацию, и я не слишком уверен, как я бы это реализовал.
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*****