Slide 1

Slide 1 text

© 2021 NTT DATA Corporation JAWS-UG朝会 #26 「AWSソリューションのCFnで学ぶNaC」 2021年10月28日 NTTデータ 山本 泰士

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

© 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サービス

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

© 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 通信フロー 凡例

Slide 9

Slide 9 text

© 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

Slide 10

Slide 10 text

© 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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

© 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 既存スタック・リソースのパラメータとの重複等は十分なケアが必要。

Slide 14

Slide 14 text

© 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

Slide 15

Slide 15 text

© 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関数により、標準リソースでは実現できない様々な処理が可能となる。

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

© 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 ) リクエスト レスポンス

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

© 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送信) 凡例 カスタムリソース スコープ

Slide 20

Slide 20 text

© 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 設定 ログイン 設定 暗号化キー 取得 複合化キー 取得 凡例 カスタムリソース スコープ

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

© 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接続

Slide 23

Slide 23 text

© 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テンプレートが 更新されておらず

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

© 2021 NTT DATA Corporation 25 • CloudFormationとLambdaの組み合わせによって、 単なるリソースの作成だけでなく、詳細な設定も可能となる。 • なんでもかんでもLambdaに書くと可読性と保守性の良さが無くなるので、 CloudFormationテンプレートに書くか、もしくはLambdaに書くかのバランスが重要。 • CloudFormationとLambdaの内容を理解しておくことで、 有事の際に何が起きているかを切り分けるうえでも有効である。 8. まとめ

Slide 26

Slide 26 text

© 2021 NTT DATA Corporation