t_hazawaの日記

株式投資とWebエンジニアリングのブログです。株式投資の目次は→です。 https://t-hazawa.hatenablog.com/entry/2021/02/12/220933

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 を公開する
    • (業務で使う) AWS CDKを修正して、実行できるようになる
    • TypeScriptを少しでも業務のプロダクトに組み込む
  • しかし、結婚式をしたので、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の本質は抽象化です。抽象化によってAWSの深い知識がなくてもクラウドインフラの構築が行えます。

  • 理想はこのようになることみたい

業務の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
  • SFTPStack AWS Transfer Familyを使用してS3バケットをバックエンドにしたSFTPサーバを立てるSTACK

  • s3を保存先にしたftpサーバを立ててくれるaws transfer familyというサービス

CDKのコマンドなど

いきなり業務の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わかりやすい
  • 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を呼び出してカスタムリソースを作成/更新/削除することができます。

  • 皆さんはカスタムリソースを作成することは多いですか? 私はそこまで多くないです。

  • 内部的にはaws sdkを実行するためのlambda関数が自動で作成される。

  • 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の構成管理を行えるサービスです。 awswindows用の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つのスタックをたててる
    • ACM
    • ACM APNE1
    • KeyPair
    • KMS
    • WAFV2
  • WAFv2 に IP Address tai書かれてる
  • common/ はよみきった

(業務のCDKの) utility/ 編

(業務の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
  • utcCoordinated Universal Time

ついに自分のAWSアカウントで実行してみるぞ

  • (結局、CDKを0から書くことはしなかった模様)
  • 一旦、 vpc を実行 & vpc を修正できたらよしにしようかな
    • ということで、業務のCDKの vpcのところを自分のAWSアカウントでやってみることに
  • 多分、aws-cli で操作するのだろう (←違う。cdkコマンドをnpmで入れて使う)
    • cdk は aws-cli のコマンド? 調べる 2022/10/08 21:18

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 deploy コマンドで AWS クラウド上に構築されることになります

  • 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買い読んで 実行してみようとして できなかったらさらに読もうかなあ
  • devio-stg-vpc 10.0.0.0/16

  • リソース名は弊社の命名規則 システム名-環境名-AWS リソース名

  • それでは cdk synth コマンドを使用すると cfn のテンプレートがつくられる  2022/10/11 1:28

  • 実践!AWS CDK #3 テスト | DevelopersIO

  • snapshot tests。。テスト実行時点で作成されるcfnテンプレート(スナップショット)と事前に保存されているベースラインテンプレートを比較してテスト

  • jest を使うのね (TSだからかな)
  • Ansible のときは「Ansibleに書いたのはそのように作られるのだから、ちゃんとできているかテストは不要よ」みたいなことをどこかで読んだ気がするけど、 でもやっぱり 1個アレができてるか とか書いておくと、意図通りになってるか確認できてよいね

  • 実践!AWS CDK #4 Context | DevelopersIO

  • 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 コマンドの コマンドを一通り知る

CDK バージョンのこと

本当に cdk のコマンドを知ってく

  • ls は Stack をリストするらしい
  • アプリケーションが単一のスタックだけで構成されている場合、スタック名を指定する必要はありません

  • cdk.json または ~/.cdk.json のいずれかが存在する場合、そこに指定されたオプションがデフォルトとして使用されます

  • コミットされてる cdk.jsonにも contextがあるね
    • main/vpc/cdk.json
    • IPAMPool とかもここにあるね
  • コマンドに node packageを指定する
    • --plugin , -pなんてオプションがあるのね
  • オプションはそこそこ多いけど、 コマンド自体は少なそう cdk
  • cdk.json に "app": "npx ts-node bin/eval-cdk.ts" があると --app指定は要らないとのこと
    • 業務のでも "app": "python app.py", 普通にあった (main/vpc/cdk.json)
    • main/vpc/app.py のことだね

tree コマンドのこと

もとに戻って cdk のコマンド(派生1)を読むぞ 2022/10/15 7:46

  • cdk bootstrap がなんかdeploy 前にいるらしい 2022/10/15 7:48
    • aws にアクセスして整えるらしい
    • 実際にこれをしたところ、 cdk bootstrap しただけで、 cdk 用 S3バケットや、 cloudformation の cdk 実行用 stack ができたりした
  • 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:21

  • まず皆さん、AWS アカウントの環境を整えてください。 次に IDE, AWS CLI, Node.js を用意

  • 言われてみれば、自分の 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
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 を自分の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:40
    • ロケールって ap-northeast-1 のこと? ←そうだった
    • 確かにわいのは locale none になってた2022/10/29 0:44
    • 最上位は none になって、リージョンプールをその下に作るっぽい
    • 10から発行されてるぽい 業務のは
  • 業務のは共有プールだから、いきなりリージョンプールだけがあるのね 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

一部修正して反映してみよう (CDK)

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

結局、どのくらい時間がかかったのか

  • (元々、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を修正&反映できるようになって良かった