Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWSソリューションのCFnで学ぶNaC

 AWSソリューションのCFnで学ぶNaC

JAWS-UG朝会#26(2021年10月28日)の資料です。

yamamototis1105

October 28, 2021
Tweet

More Decks by yamamototis1105

Other Decks in Technology

Transcript

  1. © 2021 NTT DATA Corporation 2 1. 自己紹介 2. はじめに

    3. TransitVPCとは? 4. TransitVPCのCloudFormation 5. カスタムリソースとは? 6. TransitVPCのカスタムリソース 7. コード理解の不足による失敗談 8. まとめ
  2. © 2021 NTT DATA Corporation 3 1. 自己紹介 2. はじめに

    3. TransitVPCとは? 4. TransitVPCのCloudFormation 5. カスタムリソースとは? 6. TransitVPCのカスタムリソース 7. コード理解の不足による失敗談 8. まとめ
  3. © 2021 NTT DATA Corporation 4 1. 自己紹介 NTTデータ ネットワークソリューション事業部

    やまもと たいし 山本 泰士 金融・法人系のネットワーク提案~構築(ネットワークエンジニア一筋) 2018年10月~ DirectConnect + TransitVPC 構築 2019年 9月~ インターン生向けに API Gateway + Lambda 課題作成 2020年10月~ DirectConnect + TransitGateway 構築 2021年 9月~ DirectConnect + TransitVPC + TransitGateway 構築予定 AWS CloudFormation、AWS Lambda、TransitVPC 経歴 主なAWS歴 好きなAWSサービス
  4. © 2021 NTT DATA Corporation 5 1. 自己紹介 2. はじめに

    3. TransitVPCとは? 4. TransitVPCのCloudFormation 5. カスタムリソースとは? 6. TransitVPCのカスタムリソース 7. コード理解の不足による失敗談 8. まとめ
  5. © 2021 NTT DATA Corporation 6 2. はじめに 昨今、ネットワークエンジニアもInfrastructure as

    Code (Network as Code)への対応が迫られる中どんなことができるだろう? AWSはガイドやサンプルが充実してて、誰でも簡単にインフラを構築できてしまう。 より面白いことをできるようにするにはどうすればいいだろう? AWSソリューションなら、AWSサービスを組み合わせて面白い機能を 提供しているので、それを参考にしよう! 本枠では、ネットワーク系のAWSソリューション 「TransitVPC」 を題材にし、 どのようなことが出来るのか、ネットワークの観点でご紹介します。
  6. © 2021 NTT DATA Corporation 7 1. 自己紹介 2. はじめに

    3. TransitVPCとは? 4. TransitVPCのCloudFormation 5. カスタムリソースとは? 6. TransitVPCのカスタムリソース 7. コード理解の不足による失敗談 8. まとめ
  7. © 2021 NTT DATA Corporation 8 Ompremise 中継デバイスを経由し、VPCやオンプレミス間を中継するHubネットワークです。 (昨今はTGW等のサービスでカバーできますが、オンプレミス向けのQoS要件等次第で利用されたりしてます。) 3.

    TransitVPC とは?(1) AWS Spoke VPC1 Spoke VPC2 Transit VPC CSR1000v CSR1000v VGW Poller Cisco Configurator Cloud Watch S3 S2S VPN S2S VPN DirectConnect DirectConnect 通信フロー 凡例
  8. © 2021 NTT DATA Corporation 9 Ompremise 3. TransitVPC とは?(2)

    AWS Spoke VPC1 Spoke VPC2 Transit VPC 最大の特徴としては、SpokeVPCのVGWにタグを追加するだけで、自動的にTransitVPC~ SpokeVPC間のIPsecトンネルを確立・接続する点です。 CSR1000v CSR1000v VGW Poller Cisco Configurator Cloud Watch S3 S2S VPN DirectConnect DirectConnect VGW ⑥ Transit~SpokeVPC の間でトンネル確立 ③ 特定タグ付きVGWを検索し、 VPN設定をS3に保存 VGW Poller ② CloudWatchEventで 定期的にVGW Pollerを実行 Cloud Watch ④ S3イベント通知で Cisco Configuratorを実行 S3 ① VGWに 特定のタグを付与 VGW CSR1000v CSR1000v ⑤ S3バケットの設定を取得し、 CSR1000vの設定変更 Cisco Configurator 凡例 手動実行 自動実行 VGW
  9. © 2021 NTT DATA Corporation 10 3. TransitVPC とは?(3) CSR1000v

    CSR1000v CSR1000v CSR1000v TGW S2S VPN Catalyst8000v TGW GRE over TGW Connect Attachment 構成としては、TransitGatewayやAutoScalingなどのサービスを組み合わせたパターンや、 Juniper社のvSRXやFortinet社のFortiGate VMなどのCISCO以外の機器を利用するパターンもあります。 S2S VPN Auto Scaling TGW SpokeVPC追加時に CSR~TGW間のVPN追加が不要。 トラフィックに応じ、CSR自動増減。 スケーラビリティを向上。 Site to Site VPNを利用しないため、 インターネット経由しなくて済む。 Catalyst8000v TransitVPC with TransitGateway TransitVPC / Autoscaling SDWAN TransitVPC
  10. © 2021 NTT DATA Corporation 11 1. 自己紹介 2. はじめに

    3. TransitVPCとは? 4. TransitVPCのCloudFormation 5. カスタムリソースとは? 6. TransitVPCのカスタムリソース 7. コード理解の不足による失敗談 8. まとめ
  11. © 2021 NTT DATA Corporation 12 4. TransitVPC の CloudFormation(1)

    Templateファイル(.json) Parameters セクション Metadata セクション Conditions セクション Mappings セクション Resource セクション Output セクション TransitVPCのCloudFormationで定義されているセクションは以下の通りです。 スタック作成時にユーザ指定させる可変パラメータを定義します。 パラメータを表示する順序やカテゴリを定義します。 他セクションから参照する条件(TrueもしくはFalseを返す)を定義します。 他セクションから参照するマップ(キーを指定してバリューを取得する)を定義します。 スタックを構成するコンポーネントやその設定などを定義します。 CloudFormation上で最終的に出力されるパラメータを定義します。 本枠では主要なParametersセクションおよびResouceセクションをご紹介します。 本枠で紹介する セクション
  12. © 2021 NTT DATA Corporation 13 Spoke VPC1 Spoke VPC2

    VGW Cisco Configurator VGW Poller Cloud Watch 4. TransitVPC の CloudFormation(2) Templateファイル(.json) Parameters セクション Metadata セクション Conditions セクション Mappings セクション Resource セクション Output セクション パラメータでは、スタック作成時にユーザが自由にパラメータを設定できます(デフォルト値付き)。 VGW Transit VPC CSR1000v CSR1000v S3 Transit VPC CSR1000v CSR1000v ① VPC CIDR ② AZ番号 ③ サブネット Transit VPC VGW ⑧ 検索タグ名 ⑨ 検索タグ値 ⑩ 優先パスタグ名 VGW ④ スループット (インスタンスタイプ用) ⑤ キーペア ⑥ 削除保護 ⑦ BGP AS番号 CSR1000v S3 ⑪ S3プレフィクス ⑫ 別アカウントID (クロスアカウント用) S3 既存スタック・リソースのパラメータとの重複等は十分なケアが必要。
  13. © 2021 NTT DATA Corporation 14 Spoke VPC1 Spoke VPC2

    VGW Cisco Configurator VGW Poller Cloud Watch 4. TransitVPC の CloudFormation(3) Templateファイル(.json) Parameters セクション Metadata セクション Conditions セクション Mappings セクション Resource セクション Output セクション リソースでは、中継機能やSpokeVPC接続自動化機能を具備するコンポーネントが定義されています。 VGW Transit VPC CSR1000v CSR1000v S3 Transit VPC CSR1000v CSR1000v ① VPC ② サブネット ③ ルートテーブル ④ ルートエントリ ⑤ サブネット関連付け ⑥ IGW ⑦ IGWアタッチメント ⑧ VPCエンドポイント Transit VPC ⑨ CSR1000v ⑩ セキュリティグループ ⑪ CloudWatchアラーム (Auto Recovery) ⑫ Elastic IP CSR1000v ㉑ Poller関数 ㉓ Pollerポリシー ㉒ Pollerロール VGW Poller VGW Poller S3 ⑰ S3バケット ⑲ KMSキー ⑱ S3バケットポリシー ⑳ KMSキーエイリアス S3 & KMS Cisco Configurator ⑬ Configurator関数 ⑭ Configuratorロール ⑮ Configuratorポリシー ⑯ セキュリティグループ Cisco Configurator Cloud Watch ㉔ CloudWatchイベント (Poller関数定期実行) Cloud Watch
  14. © 2021 NTT DATA Corporation 15 4. TransitVPC の CloudFormation(4)

    Templateファイル(.json) Parameters セクション Metadata セクション Conditions セクション Mappings セクション Resource セクション Output セクション その他、コンポーネントの一部設定や事前処理はカスタムリソースとして定義されています。 Spoke VPC1 Spoke VPC2 VGW Cisco Configurator VGW Poller Cloud Watch VGW Transit VPC CSR1000v CSR1000v S3 ⑦ SolutionHelper関数 ⑧ SolutionHelperロール ⑨ SolutionHelperポリシー Lambda関数 ① RSAキー作成 ② パスワード作成 ③ S3イベント作成 ④ S3コンフィグ出力 ⑤ UUID作成 ⑥ AWS送信 カスタムリソース リクエスト レスポンス カスタムリソース+Lambda関数により、標準リソースでは実現できない様々な処理が可能となる。
  15. © 2021 NTT DATA Corporation 16 1. 自己紹介 2. はじめに

    3. TransitVPCとは? 4. TransitVPCのCloudFormation 5. カスタムリソースとは? 6. TransitVPCのカスタムリソース 7. コード理解の不足による失敗談 8. まとめ
  16. © 2021 NTT DATA Corporation 17 所定の書式でリソースを定義することで、関連付けられたLambda等を呼び出し、自由度の高いロジックを 実装することが可能です(呼び出し先はLambdaのほか、SNSも可)。 5. カスタムリソースとは?

    Lamda関数(.py) Resources : { (任意のリソース名) : { Type : Custom::(任意のリソースタイプ名) Properties : { ServiceToken : (Lambda関数のARN) (任意のキー) : (任意のパラメータ), (任意のキー) : (任意のパラメータ), (任意のキー) : (任意のパラメータ) } } } Templateファイル(.json) 1 import cfnresponse 2 def lambda_handler(event, context): 3 # (リクエストに応じた処理) 4 cfnresponse.send( 5 event, 6 context, 7 cfnresponse.SUCCESS, 8 {‘(任意のキー)’:‘(任意のパラメータ)’, 9 ‘(任意のキー)’:‘(任意のパラメータ)’, 10 ‘(任意のキー)’:‘(任意のパラメータ)’} 11 ) リクエスト レスポンス
  17. © 2021 NTT DATA Corporation 18 1. 自己紹介 2. はじめに

    3. TransitVPCとは? 4. TransitVPCのCloudFormation 5. カスタムリソースとは? 6. TransitVPCのカスタムリソース 7. コード理解の不足による失敗談 8. まとめ
  18. © 2021 NTT DATA Corporation 19 6. TransitVPC のカスタムリソース(1) CloudFormationでタイプ指定できない一例として、S3イベント作成の流れを以下に示します。

    S3バケットにパラメータが格納されたことをトリガーとしてLambda送信するように、S3にイベント通知を設定。 リソース名: CiscoConfigS3Event(S3イベント作成) SolutionHelper関数 S3 パラメータ格納 Configurator関数 CSR1000v リソースベースポリシー設定 (S3→Lambda許可) ログイン設定 VGW Poller関数 Lambda送信 イベント通知設定 (Lambda送信) 凡例 カスタムリソース スコープ
  19. © 2021 NTT DATA Corporation 20 秘密鍵・公開鍵・フィンガープリントを生成・格納・設定し、Configurator関数がCSR1000vにアクセスできるよう設定 6. TransitVPC のカスタムリソース(2)

    CloudFormationテンプレートだけで実装できない一例として、RSAキー作成の流れを以下に示します。 リソース名: CreateSshKey(RSAキー作成) SolutionHelper関数 Paramikoモジュール S3 KMS private key finger print public key 生成 公開鍵・秘密鍵 格納 秘密鍵 取得 Configurator関数 CSR1000v 設定 ログイン 設定 暗号化キー 取得 複合化キー 取得 凡例 カスタムリソース スコープ
  20. © 2021 NTT DATA Corporation 21 1. 自己紹介 2. はじめに

    3. TransitVPCとは? 4. TransitVPCのCloudFormation 5. カスタムリソースとは? 6. TransitVPCのカスタムリソース 7. コード理解の不足による失敗談 8. まとめ
  21. © 2021 NTT DATA Corporation 22 7. コード理解の不足に関わる失敗談(1) 別のTransitVPCと同じタグを設定し、別のTransitVPC~SpokeVPC間で接続した。 AWS

    Spoke VPC1 Spoke VPC2 Transit VPC(既存) Spoke VPC Transit VPC(新規) VGW Poller VGW VGW Tag Value transitvpc:spoke true CSR1000v CSR1000v CSR1000v CSR1000v VGW VGW Poller Tag Value transitvpc:spoke true ① 既存TransitVPCの VGW Pollerが先に検知 意図しないTransitVPC~SpokeVPC間の接続 ② 既存TransitVPCの CSR1000v接続
  22. © 2021 NTT DATA Corporation 23 AWS 7. コード理解の不足に関わる失敗談(2) ステージング環境ではプロビジョニング成功したものの、本番環境でプロビジョニング失敗した。

    Transit VPC (ステージング) CSR1000v CSR1000v AMI ID差異によるプロビジョニング失敗 ① ステージング環境は プロビジョニング成功 Transit VPC (本番) CSR1000v CSR1000v ③ 本番環境は プロビジョニング失敗 AWS Marketplace CroudFormation Template AMI更新 AMI未更新 ② MarketPlace内のAMIは 更新されていたが、 CloudFormationテンプレートが 更新されておらず
  23. © 2021 NTT DATA Corporation 24 1. 自己紹介 2. はじめに

    3. TransitVPCとは? 4. TransitVPCのCloudFormation 5. カスタムリソースとは? 6. TransitVPCのカスタムリソース 7. コード理解の不足による失敗談 8. まとめ
  24. © 2021 NTT DATA Corporation 25 • CloudFormationとLambdaの組み合わせによって、 単なるリソースの作成だけでなく、詳細な設定も可能となる。 •

    なんでもかんでもLambdaに書くと可読性と保守性の良さが無くなるので、 CloudFormationテンプレートに書くか、もしくはLambdaに書くかのバランスが重要。 • CloudFormationとLambdaの内容を理解しておくことで、 有事の際に何が起きているかを切り分けるうえでも有効である。 8. まとめ