Open9
AWS EKS Blueprint for CDK で EKS on Fargate なクラスタをつくる
〜 ここまでのあらすじ 〜
CDK 書いて頑張ろうとしたけどスタックが無限に終了せず詰んだと思っていたところ Bluepring に辿り着き、これをもちいたところ EKS on Fargate を秒(誇張表現)で立ち上げることができたのでアール
立ちあがったのは立ちあがったんだけど、書き方が 通常の CDK のそれと結構ことなっており、Blueprint がつくってくれた VPC 情報が CDK 内で 他のスタックに渡せないという課題が発生している。
コードはこんな感じ
import "source-map-support/register";
import * as eks from "aws-cdk-lib/aws-eks";
import * as blueprints from "@aws-quickstart/eks-blueprints";
import { Construct } from "constructs";
import { StackProps } from "aws-cdk-lib";
const account = 'xxxxxxxx';
const region = 'us-east-1';
export class EKSBlueprintConstruct {
build(scope: Construct, id: string, props?: StackProps) {
const addOns: Array<blueprints.ClusterAddOn> = [
new blueprints.addons.SecretsStoreAddOn(),
new blueprints.addons.ArgoCDAddOn(),
new blueprints.addons.MetricsServerAddOn(),
new blueprints.addons.AwsLoadBalancerControllerAddOn(),
new blueprints.addons.VpcCniAddOn(),
new blueprints.addons.CoreDnsAddOn(),
new blueprints.addons.KubeProxyAddOn(),
];
const fargateProfiles: Map<string, eks.FargateProfileOptions> = new Map([
[
"eks-blueprint2",
{
selectors: [{ namespace: "argocd" }, { namespace: "eks-blueprint2" }, { namespace: "game-2048" }],
},
],
]);
const clusterProvider = new blueprints.FargateClusterProvider({
version: eks.KubernetesVersion.V1_21,
clusterName: "eks-blueprint2",
outputClusterName: true,
fargateProfiles: fargateProfiles,
});
blueprints.EksBlueprint.builder()
.clusterProvider(clusterProvider)
.account(account)
.region(region)
.addOns(...addOns)
.build(scope, "eks-blueprint2");
}
}
解決したいこと
- blueprint が作成した VPC 情報の取得の方法がわからない
- そもそも検索方法とかをちゃんと理解したほうがいいのかもしれない、命名規則は自明なのでそれで探す?
- 同じ理由で subnet の情報の取得方法がわからない
- 先に subnet つくっておいて subnet 情報を blueprint に渡すということはできそう、ただ blueprint のよしなに力がかなり高いので委ねたい気持ちもある
- セキュリティグループとかはパラメータとしても渡せないのでひとまず作成をお任せする感じっぽい? つくられた SG の情報も取得をしたい。
const vpc = ec2.Vpc.fromLookup(this, 'Vpc', {
vpcName: 'eks-blueprint2/eks-blueprint2-vpc',
isDefault: true ,
});
コレで取れる??
VPC のほうは全然問題なくとれました。
const vpcSubnets = vpc.selectSubnets({ subnetType: ec2.SubnetType.PRIVATE_WITH_NAT })
サブネットはこれでとれる??
VPC と Subnets はまったく問題なかった。あとは EKS の クラスターに割り当てられるセキュリティーグループを取得したいが、ID が確定できないので lookup できない感じがする。
リージョン跨ぎでクロススタックできない所為で実に多くの問題がおきている件...