Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AWSソリューションのCFnで学ぶNaC
Search
yamamototis1105
October 28, 2021
Technology
0
240
AWSソリューションのCFnで学ぶNaC
JAWS-UG朝会#26(2021年10月28日)の資料です。
yamamototis1105
October 28, 2021
Tweet
Share
More Decks by yamamototis1105
See All by yamamototis1105
AWS Cloud WAN 最新のアップデートと今後のグローバルネットワーク
yamamototis1105
0
280
ハイブリッドクラウド接続検証環境をフル仮想化してみた
yamamototis1105
0
79
NetworkMonitorによるDirectConnect異常検知および対処
yamamototis1105
0
380
AWS DirectConnectパートナー選定時のチェックポイント
yamamototis1105
0
450
Site-to-Site VPNトンネルエンドポイントのライフサイクル制御機能の使いどころ
yamamototis1105
0
570
DirectConnect上でSite to Site VPNでのプライベート接続に乗り換えてみた
yamamototis1105
1
880
Other Decks in Technology
See All in Technology
サービスでLLMを採用したばっかりに振り回され続けたこの一年のあれやこれや
segavvy
2
570
DUSt3R, MASt3R, MASt3R-SfM にみる3D基盤モデル
spatial_ai_network
2
300
ゼロから創る横断SREチーム 挑戦と進化の軌跡
rvirus0817
3
390
UI State設計とテスト方針
rmakiyama
3
840
プロダクト開発を加速させるためのQA文化の築き方 / How to build QA culture to accelerate product development
mii3king
1
290
OCI技術資料 : ファイル・ストレージ 概要
ocise
3
11k
成果を出しながら成長する、アウトプット駆動のキャッチアップ術 / Output-driven catch-up techniques to grow while producing results
aiandrox
0
400
効率的な技術組織が作れる!書籍『チームトポロジー』要点まとめ
iwamot
2
140
[トレノケ雲の会 mod.13] 3回目のre:Inventで気づいたこと -CloudOperationsを添えて-
shintaro_fukatsu
0
110
生成AIをより賢く エンジニアのための RAG入門 - Oracle AI Jam Session #20
kutsushitaneko
4
300
AWS環境におけるランサムウェア攻撃対策の設計
nrinetcom
PRO
0
190
社内イベント管理システムを1週間でAKSからACAに移行した話し
shingo_kawahara
0
210
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Practical Orchestrator
shlominoach
186
10k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
YesSQL, Process and Tooling at Scale
rocio
170
14k
Producing Creativity
orderedlist
PRO
342
39k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
Speed Design
sergeychernyshev
25
680
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
Mobile First: as difficult as doing things right
swwweet
222
9k
Typedesign – Prime Four
hannesfritz
40
2.4k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
KATA
mclloyd
29
14k
Transcript
© 2021 NTT DATA Corporation JAWS-UG朝会 #26 「AWSソリューションのCFnで学ぶNaC」 2021年10月28日 NTTデータ
山本 泰士
© 2021 NTT DATA Corporation 2 1. 自己紹介 2. はじめに
3. TransitVPCとは? 4. TransitVPCのCloudFormation 5. カスタムリソースとは? 6. TransitVPCのカスタムリソース 7. コード理解の不足による失敗談 8. まとめ
© 2021 NTT DATA Corporation 3 1. 自己紹介 2. はじめに
3. TransitVPCとは? 4. TransitVPCのCloudFormation 5. カスタムリソースとは? 6. TransitVPCのカスタムリソース 7. コード理解の不足による失敗談 8. まとめ
© 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サービス
© 2021 NTT DATA Corporation 5 1. 自己紹介 2. はじめに
3. TransitVPCとは? 4. TransitVPCのCloudFormation 5. カスタムリソースとは? 6. TransitVPCのカスタムリソース 7. コード理解の不足による失敗談 8. まとめ
© 2021 NTT DATA Corporation 6 2. はじめに 昨今、ネットワークエンジニアもInfrastructure as
Code (Network as Code)への対応が迫られる中どんなことができるだろう? AWSはガイドやサンプルが充実してて、誰でも簡単にインフラを構築できてしまう。 より面白いことをできるようにするにはどうすればいいだろう? AWSソリューションなら、AWSサービスを組み合わせて面白い機能を 提供しているので、それを参考にしよう! 本枠では、ネットワーク系のAWSソリューション 「TransitVPC」 を題材にし、 どのようなことが出来るのか、ネットワークの観点でご紹介します。
© 2021 NTT DATA Corporation 7 1. 自己紹介 2. はじめに
3. TransitVPCとは? 4. TransitVPCのCloudFormation 5. カスタムリソースとは? 6. TransitVPCのカスタムリソース 7. コード理解の不足による失敗談 8. まとめ
© 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 通信フロー 凡例
© 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
© 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
© 2021 NTT DATA Corporation 11 1. 自己紹介 2. はじめに
3. TransitVPCとは? 4. TransitVPCのCloudFormation 5. カスタムリソースとは? 6. TransitVPCのカスタムリソース 7. コード理解の不足による失敗談 8. まとめ
© 2021 NTT DATA Corporation 12 4. TransitVPC の CloudFormation(1)
Templateファイル(.json) Parameters セクション Metadata セクション Conditions セクション Mappings セクション Resource セクション Output セクション TransitVPCのCloudFormationで定義されているセクションは以下の通りです。 スタック作成時にユーザ指定させる可変パラメータを定義します。 パラメータを表示する順序やカテゴリを定義します。 他セクションから参照する条件(TrueもしくはFalseを返す)を定義します。 他セクションから参照するマップ(キーを指定してバリューを取得する)を定義します。 スタックを構成するコンポーネントやその設定などを定義します。 CloudFormation上で最終的に出力されるパラメータを定義します。 本枠では主要なParametersセクションおよびResouceセクションをご紹介します。 本枠で紹介する セクション
© 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 既存スタック・リソースのパラメータとの重複等は十分なケアが必要。
© 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
© 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関数により、標準リソースでは実現できない様々な処理が可能となる。
© 2021 NTT DATA Corporation 16 1. 自己紹介 2. はじめに
3. TransitVPCとは? 4. TransitVPCのCloudFormation 5. カスタムリソースとは? 6. TransitVPCのカスタムリソース 7. コード理解の不足による失敗談 8. まとめ
© 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 ) リクエスト レスポンス
© 2021 NTT DATA Corporation 18 1. 自己紹介 2. はじめに
3. TransitVPCとは? 4. TransitVPCのCloudFormation 5. カスタムリソースとは? 6. TransitVPCのカスタムリソース 7. コード理解の不足による失敗談 8. まとめ
© 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送信) 凡例 カスタムリソース スコープ
© 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 設定 ログイン 設定 暗号化キー 取得 複合化キー 取得 凡例 カスタムリソース スコープ
© 2021 NTT DATA Corporation 21 1. 自己紹介 2. はじめに
3. TransitVPCとは? 4. TransitVPCのCloudFormation 5. カスタムリソースとは? 6. TransitVPCのカスタムリソース 7. コード理解の不足による失敗談 8. まとめ
© 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接続
© 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テンプレートが 更新されておらず
© 2021 NTT DATA Corporation 24 1. 自己紹介 2. はじめに
3. TransitVPCとは? 4. TransitVPCのCloudFormation 5. カスタムリソースとは? 6. TransitVPCのカスタムリソース 7. コード理解の不足による失敗談 8. まとめ
© 2021 NTT DATA Corporation 25 • CloudFormationとLambdaの組み合わせによって、 単なるリソースの作成だけでなく、詳細な設定も可能となる。 •
なんでもかんでもLambdaに書くと可読性と保守性の良さが無くなるので、 CloudFormationテンプレートに書くか、もしくはLambdaに書くかのバランスが重要。 • CloudFormationとLambdaの内容を理解しておくことで、 有事の際に何が起きているかを切り分けるうえでも有効である。 8. まとめ
© 2021 NTT DATA Corporation