- これはアドカレの記事です
- 経緯・背景
- (CDKに関して)やったこと
- CDKのことを学ぶ編
- 業務のCDKのコードを読んで理解
- CDKのことを十分には知ってなかったので更に知る編
- ついに自分のAWSアカウントで実行してみるぞ
- 本当に自分のAWSアカウントで実行してみるぞ
- 一部修正して反映してみよう (CDK)
- 結局、どのくらい時間がかかったのか
- 感想
これはアドカレの記事です
- これは ドワンゴのカレンダー | Advent Calendar 2022 - Qiita 14日目の記事です。
- なお、25日目にも記事を投稿予定です。(Qiitaで)
- こちらは、大トリにふさわしく、(インパクトのある)高クオリティな記事にしようと思っているので、期待していてください。
- (= つまり、今回の記事のクオリティは高くない…が、(クオリティが低くても)継続が大事 なのでありのままのやり方で、いつもどおり書いてます)
- この記事は 25000文字あります (文庫本50ページ分)
経緯・背景
- (2021/8/23 までに、CloudFormation をとりあえず書いて使えるようになっていた)
- 2022/8/2までに RubyGems (HTML文字列をいい感じにフォーマットする) を公開した
- 元々、2022/9/30までに以下の3つが目標だった
- しかし、結婚式をしたので、RubyGems以外は完遂できなかった (それぞれ半分くらい?)
- 結婚式の後も、新婚旅行と上期の評価資料作りで忙しかった
- 2022/8/23 に CDK に手を付けていたが9/3頃?に中断し、 2022/10/8 に再開した。
- 2022/11/2 までに、 CDK を修正して、実行(反映)できるところまで行った
- その後、社内のLTの準備をしていて、今日(2022/11/26) このCDKのブログを書き始めた。
- 2022/12/12 出来上がった。(19300字)
(CDKに関して)やったこと
- CDKのことを学ぶ
- 業務のCDKを読む
- 業務のCDKを自分のAWSアカウントで実行する (一部分のStackだけ)
- そのStackを一部CDKで変更してみる
CDKのことを学ぶ編
- 5分で理解するAWS CDK - Qiita
CDKはただリソースを定義するだけでなく、プログラム内でテストコードも書くこともできます。
CDKは以下、APP->Stack->Constructの各要素によって構成されています。
- ↓ということらしい
- App スタック依存関係管理
- Stack いつもの
- Consruct リソース
CDKはConstruct Libraryを使用してAWSリソースを定義
High Level Construct(L2) - > 直感的にリソースを定義することができ、デフォルト値や便利なメソッドが定義済み
- クラス名にCfnプレフィックスがついているL1 (L1の方が低レイヤー)
- cdk synth シンセサイザーというか、組み合わせるといういみ
なお、aws ssoを利用している環境の場合、そのまま実行すると、エラーになります。確認すると、本記事執筆時点ではAWS SSOについてサポートされてない様です。この様な場合、環境変数をexportすることで回避できます。
- 親切な情報
- 理想はこのようになることみたい
業務のCDKのコードを読んで理解
- それぞれにREADME.md があって親切
- 公式手順(ちょっと大変みたい…?)
iam identity centerは、コードを使用してiam identity centerセッションを現在のaws cliセッションに関連付けます
iam identity centerブラウザページでは、iam identity centerの認証情報を使用してサインインするように求められます
- そういうブラウザページがあるのね 2022/08/24 0:41
- この↑までは「自動設定」だったとのこと
- 手動設定でもできるとのこと
業務のCDKのコードを読む
- 反映コマンドなどがREADMEに(各スタックごとに)書いてあって分かりやすい!
- 業務のCDKは codefamily, db, elasticache, network, subnet, vpc, web スタックに分かれており、 共通みたいなのがcommon, utility に入っている
- SFTP = SSH File Transer Protocol 2022/08/25 0:04
- https://ja.wikipedia.org/wiki/SSH_File_Transfer_Protocol
- 2001 年までには作られ始めた。 scp より進化してるとのこと
SFTPStack AWS Transfer Familyを使用してS3バケットをバックエンドにしたSFTPサーバを立てるSTACK
CDKのコマンドなど
- cdk commands 2022/08/25 0:19
- https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/cli.html
- これ大事そう (多分全部読んだ)
- import aws_cdk.assertions as assertions
- https://docs.aws.amazon.com/cdk/api/v1/python/aws_cdk.assertions.html
- まぁ、コードの中で分かるかな 2022/08/26 1:26
- 前のqiita を読み直してみる
- まぁ、見様見真似でこの辺をコピペしてきて、カスタマイズするところからかな?
いきなり業務のCDKコードを(自分の個人AWSアカウントで)実行するのは難しかったので、0からCDKを書いて、実行してみた (ような気がしていたが、していなかった) (3ヶ月前にやったことなので忘れていた)
- ec2のなかに CfnVPC作るメソッドがあるおなじみのec2起源なつくり
- ipamもこのメソッドにあるのね
- class CfnVPC (construct) · AWS CDK
- ◎この(業務で使ってる)CDKのバージョンはなんなんだろうなあ
- 現行最新なら 2.38.1かな?
- aws-cdk-lib==2.XX.X と requirements.txt にあった
- $ cdk --version #2.XX.X (build xxxxxxx)
- 名前とかを渡すと vpc が作れる便利なメソッド
- 自分の aws で作ってみたいね
- vpc/vpc_stack.py は単なるクラス、汎用に流用できるものっぽい
- …と思ったけど、そうでもないかな◎
- .bat って rem がコメントアウトなの?
- そうらしい
- こうやって、 vpc, network をカワキリに、業務のCDKを読んでいったのだった
- ◎network ではなく、 vpc/ や subnet/ でつくってる、ってことかな? 2022/08/28 1:08
- やっぱり yml だけで作るのは無理感が高いよなあ(CloudFormationへの思い)
- 自分も別プロジェクトで cFn でsubnet とか作ったので見覚えある内容 というか構成
- でもやっぱり CDKとかにしてくと、サワれる人 どんどん少なくなって、採用がどんどん困難になっていきそう
CDKのことを十分には知ってなかったので更に知る編
cdk の construct とは
- cdk のconstruct ってなんだっけ?
- AWS CDK の3種類の Construct を使ってデプロイしてみた | DevelopersIO
- サンプルコードもあるので、熟練者のcdkがどんなものか見ようかな
- いろんなものが一緒に書かれていた あくまでこの記事の目的のためのサンプルっぽい
- (多分普通は vpc とか subnet とか web(アプリケーション構成単位)で分けそう)
- construct は デプロイするAWSリソース。 だね。 (解決) ココのリソース
- ec2.CfnSubnet(
- やっぱり ec2 以下にサブネット作るメソッドもあるのだった
- 基本的なものは何でもec2のものとするaws
- cdkわかりやすい
- pythonだからかも
- network周り長い 2022/08/28 1:46 要素が多い
- cFnのときより心なしか増えてる気がする
- NAT GW で使う eip
業務のcdkを引き続き読む (/common 編)
- まぁ、 common/ みる 2022/08/29 0:42
- aws kms = Key management service (かなり使いそう)
- kubernetes は eks (そっくり)
- XRegionParam はオリジナルclass だった ので後で読もう
- common_stack.py で 5つ stack class 定義シてる
- Acm とか、自分のawsで実行しても既に取られてるから実行できないかもなあ
- xregion 先に読もうか
- custom resource
- [AWS CDK] APIを呼び出すだけのカスタムリソースならLambda関数は不要な件 | DevelopersIO
AWS CDKの場合、Lambda関数を使わずにAPIを呼び出してカスタムリソースを作成/更新/削除することができます。
皆さんはカスタムリソースを作成することは多いですか? 私はそこまで多くないです。
codecommitの承認ルールテンプレート関連の操作はcloudformationで実装されていません。。。そこで、今回はcodecommitに関する以下の操作をカスタムリソースを介して行います。
- ◎なるほど、こういうやり方があるのね 共有したい
なお、actionで入力する文字列の先頭は大文字ではなく、小文字の場合で入力する必要がある場合がほとんどです。例えば、CreateApprovalRuleTemplate APIを呼び出したい場合は、createApprovalRuleTemplateとなります。
- ☆複雑なlambda 関数が自動で作られて便利 2022/08/29 1:11 (まとめ)
これで「わざわざLambda関数作るのめんどくさいな」からちょっと脱出することができます。
- サーバーレスからLambda関数レスヘ 2022/08/29 1:11
なお、APIを呼び出す前に処理を入れたり、複数のAPIを呼び出す場合はLambda関数を介してカスタムリソースを作成する必要があります。
- x_region_param は、 SSM とかの値を他のregion でも取ってこれるようにしてるようだ
SSM (AWS Systems Manager)とは
- AWS Systems Manager とは? - AWS Systems Manager
- AWSの新サービス SSM を知っていますか? | DevelopersIO (2015/3)
- simple なやつらしい
ssmはamazon ec2 simple systems managerの略で、windowsの構成管理を行えるサービスです。 awsがwindows用のchef serverやpuppet masterを提供してくれる様なものです
- なんか違う感
- AWS Systems Manager の方らしい
- Systems Manager で↓ができるらしい 2022/08/30 0:12
- アプリケーション管理
- 変更管理
- ノード管理
- オペレーション管理
- Quick Setup
- 共有リソース
- systems manager の aws ドキュメントよんだ2022/08/30 0:17
- ASM と SECRETSMANAGER にも対応している、作ってもらった x_region_param (便利メソッド)
- CDKでもお手製便利メソッドが出てくる
ASM (Amazon Secrets Manager) とは
- AWS Secrets Managerを使おう! - Qiita
aws secretsmanager get-secret-value --region ${REGION} --secret-id ${SECRETS_ID}
- みたことあるコマンド
- x_region_param 読み切った 2022/08/30 0:29
- 引き続き行むのCDK読んでく common/
- common_stack.py がある
- 井かの5つのスタックをたててる
- WAFv2 に IP Address tai書かれてる
- common/ はよみきった
(業務のCDKの) utility/ 編
- sftp_stack.py 2022/08/30 23:20
- s3バケットと接続したりする
- class CfnServer (construct) · AWS CDK
(業務のCDKの) web/ 編
- webサーバ周り
- EC2 だけでなく、 ALBとか CloudFront とかも一緒に入ってるメインのスタック
- アプリケーション上の役割別に 7つStackがある
- Backend ヨウのStack は 1つの Class から 複数Stack を作ってる
- config に色々と設定値がかかれてるっぽい auto scaling group のmax capacity とか
- asg.add_user_data( にコマンドで、最初にやることを列挙できて便利
- backend_stack.py と front_stack.py に分かれてる
- class Duration · AWS CDK
- 期間を表すらしい 2022/09/01 0:21
- ec2も少ないパラメータでできるね
- ☆wafもきになるなあ 2022/09/01 0:34
- utc は Coordinated Universal Time
ついに自分のAWSアカウントで実行してみるぞ
- (結局、CDKを0から書くことはしなかった模様)
- 一旦、 vpc を実行 & vpc を修正できたらよしにしようかな
- 多分、aws-cli で操作するのだろう (←違う。cdkコマンドをnpmで入れて使う)
cdkを動かすための勉強
クラメソさんの連載1回めを読む
- まぁせっかくだから ↓の連載を 4までは読んでみようか
- 実践!AWS CDK #1 導入 | DevelopersIO
- summit-online-japan-cdk をやって、環境を整えるのが第一らしい 2022/10/08 21:34
- 実践!AWS CDK #1 導入 | DevelopersIO にkaiteannように、cdk は npm で入れる aws-cdk パッケージで入るコマンドだった 2022/10/08 21:40
- $ npm install @aws-cdk/aws-ec2
今後もこのように利用するクラスによって必要なパッケージをインストールしていきます。
- なるほどなあ
- cdk bootstrap コマンドとか いろいろある ←cfnのためのs3作る
いよいよデプロイです。cdk deploy コマンドを実行します。
- vpc をつくったらデフォルトでは たくさん色々作られるらしい
Construct という単位の基本ビルディングブロック - 作られる各リソースのことだったね
L3: Patterns
- これハツみみ
cdkでは各リソースを表すクラスにcfnというプレフィックスが付いたl1のものが用意されています このクラスを利用することでcfnと同等の制御が可能となります。
NAT ゲートウェイは比較的料金がかかるサービス 。スタックを削除するには cdk destroy コマンドを実行します。
README にも記載していますが node_modules/ は git 管理外としていますので、プロジェクトを実行する際は npm install コマンドを実行して必要なモジュールをインストールしてください。
クラメソさんの連載2-4回めを読む
- 実践!AWS CDK #2 VPC | DevelopersIO
- 普通の構成を作るのに 20買いくらいかかるとのこと
- 20 回くらいかかるかもね。
- まぁ 4買い読んで 実行してみようとして できなかったらさらに読もうかなあ
それでは cdk synth コマンドを使用すると cfn のテンプレートがつくられる 2022/10/11 1:28
snapshot tests。。テスト実行時点で作成されるcfnテンプレート(スナップショット)と事前に保存されているベースラインテンプレートを比較してテスト
- jest を使うのね (TSだからかな)
Ansible のときは「Ansibleに書いたのはそのように作られるのだから、ちゃんとできているかテストは不要よ」みたいなことをどこかで読んだ気がするけど、 でもやっぱり 1個アレができてるか とか書いておくと、意図通りになってるか確認できてよいね
- context は cfnのパラメータ
元やってたことに戻る
- まぁ、何してたのか思い出そう
- cdk が何のコマンドか調べていたのだった
- (業務のCDKのコードの) vpc の readme を読んでてたのだった
業務のCDKのReadme に書いてあるコマンドを理解する
- cdk context --clear とは?
- Concepts - Context|AWS CDK ドキュメント(和訳メモ) を読んでみる
- 少しずつ実際の実行に近づいていってる
cdkは、アカウント内のavailability zoneやインスタンスの起動に使用されるamazon machine image(ami)idなど、awsアカウントからの情報をキャッシュするためにコンテキストを使用します - パラメータトイウだけでなく、キャッシュでもあるのね - だから clear が必要と
このプラクティスは、例えば、新しいamazon linux amiがリリースされ、auto scalingグループが変更されたときに、デプロイメントへの予期しない変更を回避します。 - 途中で変わってしまわないようにという意味もキャッシュにあるのね
cdk.context.jsonは、gitにコミットすることをお勧めします
コンテキスト値は、それを作成したコンストラクトにスコープされ、子コンストラクトからは見えますが、兄弟コンストラクトからは見えません。 - どこかで出てきそう
Python の None の勉強
- python には none というものがあるのね
- 【Python入門】nullオブジェクト「None」とは | 侍エンジニアブログ
Pythonでは他のプログラミング言語とは少し違い、nullというキーワードではなく「None」を使用します。 - > ※ この記事のコードはPython 3.7で動作確認しました。
オブジェクトとnoneを比較する場合は、is演算子を使用することが推奨されています。。。理由は、処理が早く済むことや、noneがシングルトンオブジェクト(そのクラスのオブジェクトは1つのみ、複数のインスタンスの作成が不可能であること)である、などということが挙げられます
- None を print すると None と表示するのが律儀な感じ2022/10/12 23:24
- 他の言語だったら空文字列になりそう
元のzen (cdk context --clear) に戻る
- AWS CDK アプリと呼ぶのね CDKで書いたものを
cdk.context.json ファイル内の情報を表示、管理するには、cdk context コマンドを使用します - ◎そのうち cdk context コマンド使ってみよう 2022/10/12 23:29
保存されているアプリのコンテキスト値をすべてクリアするには、次のようにcdk context --clearを実行します。 - こういうことね (理解できたので目的達成) - > cdk.context.jsonに格納されているコンテキスト値のみ、リセットまたはクリアすることができます。
必要であれば、コンテキスト値の前にスタック名を付けることで、各スタックに異なる値を指定することができます。 - > cdk synth --context Stack1:key=value --context Stack2:key=value Stack1 Stack2
- zen を 読み切った 2022/10/14 0:19 3min
元の 業務のcdk vpc readme に戻る
- cdk diff --profile project_name
- cdk の --profile か…
- 自分で作っておくようだが
- これも知っておこうか
- [AWS CDK(Cloud Development Kit)] 複数アカウント・複数リージョンへのデプロイを管理する | DevelopersIO
複数アカウント・複数リージョンへのデプロイを管理する - むふう
今回はpythonを利用。 - 助かる
- aws-cli のprofile と同じなのね(多分)
- $ cdk init --language python で初期化とのこと
- $ cdk ls
- とは
派生して cdk コマンドの コマンドを一通り知る
CDK バージョンのこと
- cdk コマンドの機能を 実際に叩いて理解する 【 AWS CDK Command Line Interface 】 | DevelopersIO
- (dockerって、変更が入ると、linuxサーバとは別にdocker imageの更新がいるので、手間を感じる)2022/10/14 0:31
cdk 1.12.1 (この記事のcdkコマンドのバージョン)
- いまいくらくらいなんだろう
- 業務の は
- めちゃ進んでるなあ
- ちなみに最新は
- https://github.com/aws/aws-cdk/releases
- 2.45.0 っぽい
- 1.12.1 · Releases · aws/aws-cdk · GitHub
- 2021/5/13 に2.0.0
- 2019.10.17 で 1.12.1 は納得
本当に cdk のコマンドを知ってく
- ls は Stack をリストするらしい
アプリケーションが単一のスタックだけで構成されている場合、スタック名を指定する必要はありません
cdk.json または ~/.cdk.json のいずれかが存在する場合、そこに指定されたオプションがデフォルトとして使用されます
- コミットされてる cdk.jsonにも contextがあるね
- コマンドに node packageを指定する
- --plugin , -pなんてオプションがあるのね
- オプションはそこそこ多いけど、 コマンド自体は少なそう cdk
- cdk.json に "app": "npx ts-node bin/eval-cdk.ts" があると --app指定は要らないとのこと
tree コマンドのこと
tree -L 2 lib/
- せっかくなので、さらに派生して tree コマンドも調べよう
- Layer だろうなあ Limit かも
- 【 tree 】コマンド――ディレクトリをツリー状に表示する:Linux基本コマンドTips(179) - @IT
- やっぱり西村めぐみさんだった(Linuxコマンド解説でおなじみ)
centosやubuntuには、デフォルトでtreeコマンドがインストールされていません。「yum install tree」や「apt install tree」でインストール可能です。インストールの実行にはroot権限が必要です - なるほど 使ってないわけだ
- tree -i で中をたどりながらファイルリストを作れるのね 2022/10/15 7:39
- tree -H で a href リンク集めを作るのに便利なのだ
もとに戻って cdk のコマンド(派生1)を読むぞ 2022/10/15 7:46
- cdk bootstrap がなんかdeploy 前にいるらしい 2022/10/15 7:48
- cdk コマンドの機能を 実際に叩いて理解する 【 AWS CDK Command Line Interface 】 | DevelopersIO を読んでいるところだった
- cdk diff もあって便利 2022/10/15 22:24
lib:constructsの集まりをnpmなどで公開可能なように開発できます
3つのリソースから構成される AWS Construct Library - そういうのを配布できるらしい 2022/10/15 22:41
Apps と AWS Construct Library をうまく組み合わせる
- cdk.context.json がデプロイときに自動で書き込まれるやつ、 cdk.json が開発者が書くやつ
- .cdk.json かも??? つかない気がするけど
context 直下の値が Key として認識されていて、それより下層はすべて Value として扱われるようです。
- cdk diff, cdk deployだけでコードにかいたcontext のセットが優先される context では そこまでみない
cdk doctor 便利そう 2022/10/15 22:53
- バグレポート用のものかも
--profile を説明したクラメソさんを読むぞ
- [AWS CDK(Cloud Development Kit)] 複数アカウント・複数リージョンへのデプロイを管理する | DevelopersIO を読んで、 --profile のことを知るぞ
- まぁ、 --profile については、いい感じに接続するプロファイルを用意して使う という意味だろうけどね
$ cdk deploy Stack-prd-tokyo --profile prd
- こういう書き方のところもあるのね (prd/prod)
- こうして、 --profile ことも理解した僕は、 業務のCDK(vpcの) readme を完全に理解したのだった
- ので、実際に自分のawsアカウントで実行していこう
- 実行して、一箇所変えられるようになったらマスター、おわり
本当に自分のAWSアカウントで実行してみるぞ
結局、自分のawsアカウントで実行するには何が要るのか
- ここまでに読んだものにいいやつがあったから発掘しよう
- [読んだもの] 2022/10/16 16:15
- 業務の cdk の vpc のコード
- 実践!AWS CDK #1 導入 | DevelopersIO (多分これが自分のAWSアカウントでのCDK実行に役立ちそう?)
- summit-online-japan-cdk
- 大変そう(詳細すぎそう)公式だけに
- Concepts - Context|AWS CDK ドキュメント(和訳メモ)
- 【Python入門】nullオブジェクト「None」とは | 侍エンジニアブログ
- [AWS CDK(Cloud Development Kit)] 複数アカウント・複数リージョンへのデプロイを管理する | DevelopersIO
- cdk コマンドの機能を 実際に叩いて理解する 【 AWS CDK Command Line Interface 】 | DevelopersIO
- Releases · aws/aws-cdk · GitHub
- 【 tree 】コマンド――ディレクトリをツリー状に表示する:Linux基本コマンドTips(179) - @IT
- 10記事読んだらしい
- で、どうすればいいか
- 最初のクラメソさんの連載をやっていってみよう
- ◎これを自分のawsアカウントでやっていけばいいのだろう
- この記事をやってみる
- 業務のcdkをcloneして実行してみる
- 業務のcdkを変更して実行してみる
このクラメソの実践記事をやってみる 2022/10/16 16:21
- 言われてみれば、自分の awsアカウントわからないかも
- $ aws-cli がないのでいれる
- node は入ってた
- なぜか cdk も元からはいってた
- $ cdk --version
- ~/devio$ cdk init app --language python
- 実践記事で devio/ というディレクトリでやってみよう、となってる
- 実践!AWS CDK #1 導入 | DevelopersIO をやっていってる
- クラス名にCfnがついてるのがL1だっけ?
- そうです(低レベル)
- ~/devio$ cdk synth
- devio/app.py", line 4, in
import aws_cdk as cdk ModuleNotFoundError: No module named 'aws_cdk' - python -m pip install -r requirements.txt
- 60MBとかある
#vpc=ec2.CfnVPC(self) vpc=ec2.Vpc(self, 'Vpc')
- なんで L1の方は VPCが全部大文字何だろう…
- ~/devio$ cdk bootstrap
- これをやったら S3バケットとかできた
Trusted accounts for deployment: (none) Trusted accounts for lookup: (none) Using default execution policy of 'arn:aws:iam::aws:policy/AdministratorAccess'. Pass '--cloudformation-execution-policies' to customize. CDKToolkit: creating CloudFormation changeset... [??????????・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・] (2/12) 7:48:17 AM | CREATE_IN_PROGRESS | AWS::CloudFormation::Stack | CDKToolkit 7:48:23 AM | CREATE_IN_PROGRESS | AWS::IAM::Role | ImagePublishingRole 7:48:23 AM | CREATE_IN_PROGRESS | AWS::IAM::Role | FilePublishingRole 7:48:24 AM | CREATE_IN_PROGRESS | AWS::IAM::Role | LookupRole 7:48:24 AM | CREATE_IN_PROGRESS | AWS::IAM::Role | CloudFormationExecutionRole 7:48:24 AM | CREATE_IN_PROGRESS | AWS::S3::Bucket | StagingBucket
- ~/devio$ cat ~/.aws/credentials で、 aws_access_key_id や aws_secret_access_key がつなげる先に S3バケットや CloudFormation Stack が作られるので、接続先が間違ってないか気をつけよう!
- 間違って作ったときは cdk destroy して、 s3バケットとかをc消せばいいらしい
- でも、結局は消えなくて、management console からけした気がする
:~/devio$ cdk destroy Are you sure you want to delete: DevioStack (y/n)? y DevioStack: destroying... ? DevioStack: destroyed
- 権限が足りないらしい
~/devio$ cdk bootstrap ? Bootstrapping environment aws /ap-northeast-1 failed bootstrapping: AccessDenied: User: arn:aws:iam: :user/superuser is not authorized to perform: cloudformation:DescribeStacks on resource: arn:aws:cloudformation:ap-northeast-1: stack/CDKToolkit/* because no identity-based policy allows the cloudformation:DescribeStacks action at Request.extractError (/home/linuxbrew/.linuxbrew/lib/node_modules/aws-sdk/lib/protocol/query.js:50:29)
- iam user 全権限 AdministratorAccess
- CloudFormation::Stack 多分なまえが CDKToolKit や IAM Policy, Role や S3何かを保存する の三種類を作ってるみたいだね cdk bootstrap すると (全部で12個)
~/devio$ cdk bootstrap ? Bootstrapping environment aws:// /ap-northeast-1... Trusted accounts for deployment: (none) Trusted accounts for lookup: (none) Using default execution policy of 'arn:aws:iam::aws:policy/AdministratorAccess'. Pass '--cloudformation-execution-policies' to customize. CDKToolkit: creating CloudFormation changeset... ? Environment aws:// /ap-northeast-1 bootstrapped.
- cdk destroyしたときに s3は消えなかったけど、 policy role はきえてそう???
- 消えてない気が まぁあってもいいか
- cloud formation の stack ものこってるので消す
- というか、このcfn が他の全てを作ってるのか 2022/10/22 3:45
- cfn のstack の削除の様子ってログでないのかな(ぱっと見つからない)
- 消えたっぽいのでよし 2022/10/22 3:47
改めて cdk synth からやってく
- synthesize に 20秒くらいかかる
- もろもろ(vpc subnet routetable igw eip natgw) 作るのに … 結構かかりそうだなあ
- 20/25 までi wLj i1分20秒くらい
- 20/25 でなかなかとまってる 1分くらい
- なにが思いのかは見れなかった
- =jJ )eつくるのに 3分くらい
- 確かに vpc や eip ができてた
- cdk destroy 8:30 開始 2022/10/22 23:13
- 2分15秒くらいかかった
- nat gateway とか deletedになってた
- cdk destroy で消えるリソースもあるらしい
- 1時間で消えるらしい (deleted になった nat gateway)
- 引き続き 実践!AWS CDK #1 導入 | DevelopersIO を参考に、業務のcdkを実行していっている.(vpc)
- cdk list 10秒くらいかかる
業務のCDKのコードを clone してやってくぞ
- $ git clone @
organization has enabled or enforced SAML SSO. To access this repository, you must use the HTTPS remote with a personal access token or SSH with an SSH key and passphrase that has been authorized for this organization. Visit https://docs.github.com/articles/authenticating-to-a-github-organization-with-saml-single-sign-on/ for more information. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
- https://github.com/settings/keys で Configure SSO で Authorize すればいいんだっけ?
- まさにそうだった
- git clone 成功
- cdk.json がある階層が実行する階層のようだ (実行時にカレントディレクトリにするディレクトリ)
- cdk synth -> cdk bootstrap -> cdk deploy の順
- なんか ipam-pool がないということで失敗した
- Synthesis time: 14.26s
$ cdk deploy VPCStack: creating CloudFormation changeset... [・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・] (0/3) 11:35:28 PM | CREATE_FAILED | AWS::EC2::VPC Resource handler returned message: "The ipam-pool ID 'ipam-pool- does not exist (Service: Ec2, Status Code: 400, Request ID: Hand lerErrorCode: GeneralServiceException) 11:35:29 PM | ROLLBACK_IN_PROGRESS | AWS::CloudFormation::Stack | VPCStack The following resource(s) failed to create:
- 多分、IPAMPool について知っていくのが次のステップになるだろう 2022/10/23 23:38
IPAMPool を設定するぞ
- どこに設定するのか ipamを 2022/10/23 23:38
- VPC内のIPアドレスを効率的に管理するVPC IP Address Managerが発表されました #reinvent | DevelopersIO
- 手でポチポチと設定して、 そのIDを書いてるだけっぽい 2022/10/24 1:52
- [やること]
- その設定を aws console でみる
- 自分ので設定してやる
- 名前タグがあるようだけど、まぁ、そっちでは指定できなさそうだね 2022/10/24 1:55
- プールの中に小さいプールがあるのね 役割別に 2022/10/24 1:56
- 勉強になる
- vpc に pool を指定できるのね
- ☆このpool を 業務 cdk でどう使ってるのか 2022/10/24 1:57
- → 調べる
- ☆ipam pool は手入力なのかな
- https://ap-northeast-1.console.aws.amazon.com/ipam/home?region=ap-northeast-1#PoolDetails:PoolId=ipam-pool- に pool id があるね
ipam を自分のAWSアカウントに作って、cdk deploy 完遂を目指す
- とりあえず pool 自分のaws アカウントで作ろうか 手作業で
組織の IPAM の委任管理者ではないことを検出しました。IPAM を作成すると、アカウント内のリソースのみが監視されます。IPAM で組織全体のリソースを監視する場合は、委任管理者のアカウントに IPAM を作成する必要があります。委任管理者を設定するには、組織の管理アカウントとしてサインインし、[設定] ページに移動します。 - って出てきて親切なaws
- つくってみた
- プロビジョンとかしなくていいのかな?
- まぁcdkに書いてみよう
- 前回うまくいかなかったコマンドは $ cdk deploy
- vpc/cdk.json に書いた (そこの pool id を読む cdkアプリ が業務の cdk にかかれてる)
- ipam アカンといわれた
- does not exist といわれた
- あるとおもうんだけどなあ
- スコープタイププライベートがダメなのかな
- ipam id と pool id は違うのね
- ipamしかつくってなかった(多分)
プール使用率 このプールにはプロビジョンされた CIDR がありません。
IPAM の Locale とは
- Localが必要と言われた 2022/10/29 0:18
- ipamのlocal を調べないと池なさそうだなあ
- [やること]
- 一般的な ipam local しらべる locale か
- 業務でどうなってるか見る
- チュートリアル: AWS CLI を使用して IPAM とプールを作成する - Amazon Virtual Private Cloud
- 業務のは共有プールだから、いきなりリージョンプールだけがあるのね 2022/10/29 0:47
- じゃあ、自分のでは、トップレベルプールの下に 10. とかのをつくってみようね
- でかすぎるから /24 とかでいいかも
- 割り振りはやはり /24 が基本でやってるぽい
- /17 から /24 が32コとれるのかな いや 128 か
- 2 4 8 16 32 64 128
- やはり 2の7上増えてるね
- 自分ので 10.32.1.0/24 みたいなのをpoolきる
- トップレベルの下にリージョナルで
- cdk deploy うったが synth に 34秒かかった
- 海鮮思いから?
- 最初にcdk deploy コマンド打ってから通るまで何分かかったか書くといいかもね
- The allocation size is too big for the pool といわれた
- allocation size がどこかにあるのね よもう
- ipv4_netmask_length=24, という記載が業務のCDKにあった
- ので、 /23でpool を切ろうと思った
- CIDR をプールに手動で割り当てて IP アドレス空間を予約する - Amazon Virtual Private Cloud
- 10.0.0.0/24 とか /24 で指定するらしい とおった
- https://ap-northeast-1.console.aws.amazon.com/ipam/home?region=ap-northeast-1#PoolDetails:PoolId=
- 保留中のプロビジョンというのは、どこにも割り当てられてない、ってことかな?
- 失敗したプロビジョン (The CIDR does not exist in the parent pool.) になってた
- 親で 10.0.0.0/21 する コは /22 でプロビジョニングしたら、ついに cdk deploy が通った
/vpc$ cdk deploy ? Synthesis time: 14.48s VPCStack: deploying... [0%] start: Publishing [100%] success: Published VPCStack: creating CloudFormation changeset... ? VPCStack ? Deployment time: 42.31s Stack ARN: arn:aws:cloudformation:ap-northeast-1: ? Total time: 56.79s
- https://ap-northeast-1.console.aws.amazon.com/vpc/home?region=ap-northeast-1#vpcs: にできてた
- nat gw がないので料金高くはないのでは 2022/10/30 21:13
一部修正して反映してみよう (CDK)
- [どこを修正できそうか]
- まぁ、pool 変えてみようか
- まえの22でつくられてるな…
- ネットワーク計算ツール・CIDR計算ツール | Softel labs
- 10.0.4.0/22 か にしてみよう(1つ後の帯域)
- ipam-pool- を別にクリックで作った(management console)
- cdk.json のpool ID をかえて、
vpc$ cdk diff Stack VPCStack There were no differences
- むふう
- 何かを変えたら↓になった
vpc$ cdk diff Stack VPCStack Resources [~] AWS::EC2::VPC (Stack名) replace └─ [~] Ipv4IpamPoolId (requires replacement) ├─ [-] ipam-pool-111111 └─ [+] ipam-pool-222222
- いい感じ 日字2022/11/01 22:57
- vpc$ cdk synth
- いざデプロイ
vpc$ cdk deploy VPCStack ? Synthesis time: 13.7s VPCStack: deploying... [0%] start: Publishing [100%] success: Published VPCStack: creating CloudFormation changeset... ? VPCStack ? Deployment time: 54.22s Stack ARN: arn:aws:cloudformation:ap-northeast-1: ? Total time: 67.92s
- 普通におわった
- https://ap-northeast-1.console.aws.amazon.com/vpc/home?region=ap-northeast-1#vpcs:
- vpc id もかわった
- 10.0.4.0/24
- ちゃんとできたのでおわり
結局、どのくらい時間がかかったのか
- (元々、CloudFormation は一通りできる状態だった)
- 時間の計測結果
- CDKの勉強+業務のCDKコード読むのに (大部分はCDK自体の勉強) 317分 (5時間強)
- CDKを自分のAWSアカウントで実行&修正実行してみるのに: 228分 (4時間弱)
- このブログを書くのに: 162分 (2時間半強) (19300字) (URLやスペースも数えると25000字)
- 1分120字、1時間7250字
- 足し合わせると、CDKの修正実行ができるようになるまでに 9時間かかり、 ブログまで入れて全部でも 11時間半強 (707分)
- つまり、丸々一日使えれば半日(一日)で終わる時間なので、普通だった
- (半日でこれくらいできるようになるのが普通な感覚)
- 1日20分なら 35日なので、やはり普通
- 1日20分なら、1ヶ月でこれくらい1技術習得するのが普通
- つまり、丸々一日使えれば半日(一日)で終わる時間なので、普通だった
感想
- コツコツやって、CDKを修正&反映できるようになって良かった