AWS CDK를 사용하여 서로 다른 AWS 계정을 기반으로 서로 다른 CloudFormation 스택 배포
9390 단어 devopscdkawsjavascript
infrastructure as code
를 작성할 수 있는 훌륭한 도구입니다. CDK가 제공하는 모든 멋진 기능 외에도 제가 개인적으로 좋아하는 것 중 하나는 CDK가 don't repeat ourselves
또는 DRY principal인지 확인하는 데 도움이 된다는 것입니다.대부분의 팀이 제품을 구축하기 위해 여러 환경을 사용하므로 모든 환경에 리소스를 배포해야 합니다. 항상 환경에 동일한 리소스나 구성이 있는 것은 아닙니다. 사실 대부분의 경우
dev
또는 prod
와 비교하여 staging
에 대해 다른 리소스 또는 설정이 있습니다. AWS에서는 보안, 액세스 분산 등 다양한 이유로 인해 환경마다 다른 계정을 갖게 됩니다.제 경우에는 이러한 환경에 최대한 효율적으로 배포하고 싶었습니다. 저는 이러한 환경과 각 환경에 특정한 일부 리소스 사이에 공통 리소스가 있습니다. 반면에 다른 환경에 대한 배포를 처리하는 CDK 앱은 하나만 갖고 싶습니다.
내가 생각한 솔루션은 사용 중이었습니다
assume role
배포할 계정을 파악할 수 있으며 해당 계정 번호와 환경과 계정 간의 간단한 매핑을 기반으로 배포하려는 환경이 무엇인지 파악합니다. 해당 환경에 원하는 스택을 배포하기만 하면 됩니다.보시다시피 인프라를 명령적으로 작성하고 있기 때문에 매우 쉽습니다.
/* eslint-disable no-new */
const AWS = require("aws-sdk");
const cdk = require("@aws-cdk/core");
const { CommonStack } = require("./stack");
const { DevStack } = require("./dev-stack");
const { ProdStack } = require("./prod-stack");
const sts = new AWS.STS({});
const TEST_REGION = "eu-west-1";
const DEV_REGION = "eu-west-1";
const AWS_ACCOUNT_IDS = {
development: "000000000",
quality: "00000000",
production: "000000000",
};
class App extends cdk.App {
deployCommonStacks() {
this.commonStack = new CommonStack(
this,
"commonStack",
{}
);
}
deployDevStacks() {
this.devStack = new DevStack(
this,
"devStack",
{}
);
}
deployProdStacks() {
this.prodStack = new ProdStack(
this,
"prodStack",
{}
);
}
async deployStacks() {
const assumed = await sts.getCallerIdentity({}).promise();
console.log("deployStacks() caller identity:", assumed);
this.deployCommonStacks();
if (assumed.Account === AWS_ACCOUNT_IDS.development) {
console.log("Deploying to development account:");
this.deployDevStacks();
}
if (assumed.Account === AWS_ACCOUNT_IDS.production) {
console.log("Deploying to production account:");
this.deployProdStacks();
}
return assumed.Account;
}
}
const app = new App();
app
.deployStacks()
.then(acc => {
console.log(`deployStacks() completed for account: ${acc}`);
})
.catch(e => {
console.log("error in deployStacks():", e);
});
Reference
이 문제에 관하여(AWS CDK를 사용하여 서로 다른 AWS 계정을 기반으로 서로 다른 CloudFormation 스택 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aws-builders/deploying-different-cloudformation-stacks-based-on-different-aws-accounts-with-aws-cdk-338g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)