$30 off During Our Annual Pro Sale. View Details »

Cloudformation (SAM) で実装した EC2 の 運用自動化

Cloudformation (SAM) で実装した EC2 の 運用自動化

2022.4.29のJAWS-UG浜松 AWS勉強会 2022#4でLT予定の資料を登録します

nsaito9628

April 28, 2022
Tweet

More Decks by nsaito9628

Other Decks in Programming

Transcript

  1. Cloudformation(SAM)で実装したEC2の 運用自動化 @Saito5656 2022. 4. 29 JAWS-UG 浜松支部

  2. 自己紹介 @Saito 5656 情報技術者ではない?が JAWS-UG浜松に出没する 変なオヂサン なおネタはあまり需要がない アイコンは同居する🐈

  3. 今回のお題 user部門がEC2で検証してたアプリが本運用に CfnでdeployしたEC2を自動Backup自動更新 ⇒Lambdaで補助機能を作ってみた 検証用EC2を本運用向けに再構築

  4. userアプリ検証用環境 Public subnet VPC AWS Cloud ap-northeast-3a Ap-northeast-3 Internet gateway

    Amazon CloudFront S3 Lambda@Edge Amazon SNS AmazonIpSpaceChanged ip-ranges.json RDP User Developer AWS Lambda http https WAF Sg-pub
  5. 本運用に向けて 要件定義 要望整理 ・自作アプリをInternet経由で見たい ・もしかすると社内のVMで運用する ・速やかに環境が欲しい 要求 非機能 機能 ・NW/serverには社内からInternet接続

    ・データ保管場所も社内からInternet接続 ・当然ながら自動起動・自動停止 ・データは暗号化で、AD認証、社外からは接続不可 ・userがLatest版のアプリにアクセスできるように ・コスト重視だがBackupは欲しい
  6. ・自作アプリをInternet経由で見たい ・もしかすると社内のVMで運用する ・速やかに環境が欲しい 要求 非機能 機能 ・NW/serverには社内からInternet接続 ・データ保管場所も社内からInternet接続 ・当然ながら自動起動・自動停止 ・データは暗号化で、AD認証、社外からは接続不可

    ・userがLatest版のアプリにアクセスできるように ・コスト重視だがBackupは欲しい ザクっとこんな構成でヨシ! このままEC2でGo🚀 社内と切離したほうがスピード対応可 DNSはRoute53でVPCとS3は継続利用 スケジュール実行すればイイか ALBでoidc→AD IdP、sgでIp縛り 開発serverのBackupを本番起動imageに CrossRegionCopyとる? ⇒ us-east-1
  7. SAMで(buildと)deploy 項目多いしミスを避けたい deploy/destroyの手間も省きたい 非常時の立ち上げ操作は コマンド数行にして運用Grに任せたい CfnでIaC(合ってる?)化し目指すは完全放置

  8. CfnだけでAMI更新後のId自動登録はムリ Azure IdP Public Public AWS Cloud VPC us-east-1a us-east-1c

    Auto Scaling group 本番用 us-east-1 (ASGはmax3台設定) 開発用 RDP https User 本番用 RDP/http Daily Backup ap-northeast-3 10.2.0.0/16 10.2.0.0/24 10.2.1.0/24 Sg-pub Sg-pri Sg-pri Sg-ALB https http https Developer ap-southeast-1 Daily Backup Copy Latest Backup AMI ap-northeast-1 http LaunchTemplate ASGで起動テンプレートがLatest設定できない 登録が必要 Copyが必要 初回起動に登録が必要
  9. Id登録とversion設定をEvent実行で自動化 Public Public AWS Cloud VPC us-east-1a us-east-1c Auto Scaling

    group 本番用 us-east-1 (ASGはmax3台設定) 開発用 本番用 Update AMI Id Latest RDP/http CreateImage Daily Backup Set Version Latest CreateAutoScalingGroup ap-northeast-3 10.2.0.0/16 10.2.0.0/24 10.2.1.0/24 Sg-pub Sg-pri Sg-pri Sg-ALB https http ap-southeast-1 Daily Backup Copy Latest Backup AMI LaunchTemplate ap-northeast-1 AMI Id DevImage temporary AMI Id Copy Image Extract AMI Id http start stop LaunchTemplate ①ASGに起動テンプレートLatest設定 ②DLM起動後にAMI Id登録 ④AMI Id parameter出力 Azure IdP RDP https User https Developer ③AMI copy
  10. ①ASGの起動テンプレートのversion変更 Cfnでは数値でしか設定できない CreateASGで数値⇒Latestに書き換え BackupのLatestを登録したいので 数値で固定だと困る

  11. ①ASGの起動テンプレートのversion変更 ASGのCreateをtriggerにTemplate versionをupdate

  12. ②DLM実行後にAMI Id登録 DLM実行でcopyされたimageのAMI Idで 起動テンプレートをversion更新

  13. ②DLM起動後にAMI Id登録 CreateImageをtriggerに 新しいversionを作成

  14. ③AMIの手動copy (Backup立上げ時) 東京で障害が発生した場合 バージニアに同じtemplateをdeploy us-east-1 開発用 Copy Latest Backup AMI

    ap-northeast-1 AMI Id Dev Image Copy Image LaunchTemplate temporary AMI Id Extract AMI Id VPCとEC2をdeployする前に AMIのCrossRegionCopyから 起動用のImageを作成 templateのdeploy時に parameter storeからAMI Id読み込みアタッチ
  15. ③AMIの手動copy(Backup立上げ時) [‘image’][‘Name’]から日時最新版を抽出 CrossRegionCopyのtimestampは boto3.client.describe_imagesで直接拾えない

  16. ④AMI Idをparameter出力(Backup立上げ時) Backup先のtemplateに起動AMIのIdを渡す ためのparameter store出力 us-east-1 開発用 Copy Latest Backup

    AMI ap-northeast-1 AMI Id Dev Image Copy Image LaunchTemplate temporary AMI Id Extract AMI Id (時間切れで CreateImageのEventでLambda起動する 仕様になってない…後ほど変更予定)
  17. ④AMI Idをparameter出力(Backup立上げ時) 対象のAMI Idをparameter storeに出力 boto3.client.describe_imagesで [‘image’][‘Name’]に識別子を含むAMIを検出

  18. まとめ (10行で立ち上げ可能にできた) 起動イメージの作成とAMI Idのparameter出力 $ aws lambda invoke --function-name Copy-Latest-Image-Function

    --region us-east-1 responce.json $ aws lambda invoke --function-name Export-Latest-AMIId-Function --region us-east-1 responce.json VPC、NW、ec2のdeploy $ cd .. $ cd project_root/EC2_Deploy $ sam deploy AutoScalingGroupのdeploy $ cd .././EC2_ASG_Deploy $ sam deploy 開発用EC2をオリジンとするCloudfrontのdeploy $ cd .././CloudFront_Deploy $ sam deploy 開発用EC2の自動起動・自動停止をするLambda関数のdeploy $ cd .././DevEC2-START-STOP-FUNC $ sam deploy
  19. まとめ (関連記事) READMEが社内構築・復帰手順書がわり(Private)になったので お返しになりそうなところをまとめてQiitaに(初)投稿しました https://qiita.com/nsaito9628/items/62d82e534a34be2d5d37 https://qiita.com/nsaito9628/items/bcb17830d4f547816896 https://qiita.com/nsaito9628/items/1ed45fb2ac5ce4f6f54f

  20. 課題 かなり大きなtemplate.yamlになってしまった 今後は推奨に沿って入れ子で呼び出すような yaml作成を試したい

  21. おまけ (ネ申コマンド) $ sam delete これ一発で全て消せるようになってた

  22. ご清聴ありがとうございました