AWS上に構築し数年経過したシステムの見直しポイント Developers.IO 2019 in SAPPORO #cmdevio
こんにちはコカコーラ大好き、カジです。
10/19に行われたDevelopers.IO 2019 Sapporo で、「AWS上に構築し数年経過したシステムの見直しポイント」というタイトルで、お話しさせていただきました。
聞きに来ていただいたみなさま、ありがとうございました!資料は最後にあります。
目次
AWSは数年経つと日々アップデートしているため、色々変わってしまいます。数年経過したシステムへ追加・変更しておくポイントについて大きく4つに分けてお話ししました。
- EC2関連
- RDS関連
- 運用関連
- セキュリティ関連
EC2関連
Amazon Linuxを使っていませんか?
Amazon Linux 2 への移行
公式ページに記載がある通り、2020年6月30日に Amazon Linux のセキュリティ更新提供が終了します。 Amazon Linux をお使い方は Amazon Linux 2 へのアップグレードをお勧めします。
よくある質問 - Amazon Linux AMI | AWS
メリット
- PVインスタンスからHVMインスタンスへ移行
- HDD(standard) -> SSD(gp2)
- 新世代インスタンス(m5/c5)利用可能
合わせて以下を使うと便利に・・・ - SSM(AWS Systems Manager)のAgentインストール済み - Cloudwatch Agent更新(メモリ、ディスク使用率取得)
AWS Systems Managerに慣れる学習コストが必要ですが、SSMを利用することで踏み台サーバが不要になりました。
AWS Systems Manager セッションマネージャーでSSH・SCPできるようになりました | DevelopersIO
AWS System Managerセッションマネージャーでポートフォワードする | DevelopersIO
移行するために実施すること
- 対象サーバの洗い出し
- リザーブドインスタンス(RI)の確認
- 影響範囲確認
- アプリケーション・ミドルウェア
- JDK
- 構成管理ツール
- インスタンス世代(m3,c3などから新世代m5など)
- 検証
- スケジュール
Amazon Linux から Amazon Linux 2 へのアップグレードを計画しよう | DevelopersIO
ALB
Classic Load Balancer(CLB)を使っていませんか?
Application Load Balancerへの移行メリット
- 利用料金の計算式の違いによるコストメリット
- 有事の際にAWS WAFを追加可能
- パフォーマンスの改善(HTTP2)
- HTTP/HTTPS以外の場合は、NLB検討
詳細
- CLBの場合は、1時間あたりの料金 + データ転送量に応じて課金
- ALBの場合は、1時間あたりの料金 + キャパシティーユニット(LCU)による料金で課金
- CLBでデータ転送量が多い場合は、ALBに変更するだけでコストメリットの可能性
- キャパシティーユニット(LCU)については、Cloudwatchで見れるので、見積
Amazon Data Lifecycle Manager (Amazon DLM)とAWS Backup
EC2インスタンスをどのようにバックアップしていますか?
以前なら・・・
Backupバッチ処理用のEC2からバックアップ実行、またはCloudwatch EventからLambdaを実行して、バックアップするよう設定していたと思いますが、AWS BackupやAmazon Data Lifecycle Manager (Amazon DLM)を利用することで対応できます。
ライフサイクル管理
- Amazon DLM はスナップショットを何個残すか(retain)指定
- AWS Backupは各スナップショットをどれだけの期間残すか(expire)指定
Amazon DLM
対象サービス - Amazon EBS
【新サービス】EBSスナップショットのライフサイクルを自動化するAmazon DLMが登場! | DevelopersIO
Amazon DLMが東京に上陸してEBSのライフサイクル管理が簡単になりました | DevelopersIO
AWS Backup
対象サービス
- Amazon EBS
- Amazon RDS(Aurora以外)
- Amazon DynamoDB
- Amazon EFS
- Amazon Storage Gateway
AWS再入門ブログリレー AWS Backup編 | DevelopersIO
opswitch
上記のサービスではできないバックアップが可能な弊社サービス
AWS運用かんたん自動化ツール opswitch(オプスウィッチ) by クラスメソッド
NAT Gateway
EC2のNATインスタンスを利用していますか?
本番環境でNATインスタンス(EC2 NATインスタンス)を利用し、冗長化やインスタンスのメンテナンスを心配される場合は、置き換え推奨。 AZ障害に備える場合は、NAT GatewayはAZに1つ配置する必要がありますので、2つ必要となり、ちょっと高めになる。 そのため、検証環境などでは、EC2 NATインスタンスをそのまま利用しても良いです。
EC2 on XXからマネージドサービスへの移行
移行することでマネージドサービスのため、サービスレベルをあげることが可能
- EC2 on SFTP → AWS Transfer for SFTP
- EC2 on NFS → Amazon Elastic File System (Amazon EFS)
- EC2 on リモートアクセスVPNアプライアンス → Client VPN
RDS関連
RDS CloudWatch logsログ出力
RDSのログ取得していますか?
RDSではバージョンアップが必要になる可能性が高いですが、以下の主要のログをCloudWatch Logsへのログファイル出力できる 出力するためには、それぞれバージョン指定があります
MySQL/MariaDB
- Audit Log
- Error Log
- General Log
- Slow Query Log
PostgreSQL
- Postgresql ログ
- アップグレードログ
Oracle
- アラートログ
- 監査ログ
- リスナーログ
- トレースログ
RDSのMySQL/MariaDBでログをCloudWatch Logsへ出力可能になりました | DevelopersIO
[新機能] RDS for Oracle が CloudWatch Logs へのログ出力をサポートしました | DevelopersIO
[アップデート]RDS for PostgreSQLのログをCloudWatch Logsに出力できるようになりました | DevelopersIO
[小ネタ]RDS for PostgreSQLのログをCloudWatch Logsで出力できなかった話 | DevelopersIO
RDS Performance Insight
RDSパフォーマンス遅い時、どのように調査していますか?
RDSにてPerformance Insightsを有効化するとPerformance Insightsのダッシュボードを確認すると、DBで時間がかかっているクエリ等が分かります。 (バージョンアップが必要な場合があります。)
パフォーマンスインサイトを利用してWordPressのDB負荷を分析してみた | DevelopersIO
運用関連
CloudWatch Dashboard
よくチェックする項目を一覧でグラフ参照できる(別途、監視システムを利用している方は対象外)
- ELBリクエスト数、エラー数など
- EC2 CPU Utilization、NetworkIn/NetworkOutなど
- RDS CPU Utilization、Database Connections、Latency、DBLoadなど
CloudWatchのAutomatic Dashboardsにより、主要なAWSリソースの稼働状況を一覧確認できるようになりました | DevelopersIO
CloudWatchダッシュボードを利用してオートスケール環境の稼働状態を可視化してみた | DevelopersIO
CloudFormationを利用してCloudWatchダッシュボードを設置してみた | DevelopersIO
S3 Intelligent-Tiering
S3 Intelligent-Tiering はコストの異なる低頻度アクセス/高頻度アクセスの2つのTierありオブジェクト別にアクセス頻度に応じて自動でTierを移動します。
30日間アクセスがないオブジェクトは低頻度アクセスに移動し、アクセスがあると自動的に高頻度アクセスに移動します。
低頻度アクセスTierに移動すると、利用料金が安くなります。
【アップデート】S3に新しいストレージクラス”Intelligent-Tiering”が登場しました #reinvent | DevelopersIO
セキュリティ関連
IAMとSecurity Groupの棚卸してますか?
IAMと、Security Groupの棚卸し
利用していないSecurity Groupの洗い出し
【Tips】使用していないセキュリティグループを洗い出したい!!! | DevelopersIO
普段はセキュリティグループを使わないけど、たまに使う可能性があるサービスもあるので注意
- Auto Scaling
- Data Pipline
- AWS Batch
- Lambdaなど
Trusted Advisor
AWS Trusted Advisorは、以下の5つの観点から、利用者のAWS環境をAWSが自動で精査し、推奨設定のお知らせをしてくれる機能
- コスト最適化
- パフォーマンス
- セキュリティ
- フォールトトレーランス
- サービス制限
各監査項目チェックは3段階のステータスで状態を表示
ダッシュボード上で一目で判別がしやすいように色分け
- No problems detected【緑】 : 問題が検出されなかった
- Investigation recommended【黄】 : 調査が推奨される
- Action recommended【赤】 : 即時対応が推奨される
- Not Available【-】 : 非表示
20180711 AWS Black Belt Online Seminar AWS Trusted Advisor
AWS WAF + Maneged Rule
WAF(Web Application Firewall)は、Webサイトのアプリケーションが、攻撃されたり、データが流出しないよう低減する対策
CloudFrontまたはALBの利用が前提になりますが、AWS WAFを追加できます。
AWS WAF マネージドルールを併用で、セキュリティ企業の厳選されたルールを比較的安価に利用可能
F5 Bot Detection Signatures For AWS WAFを利用してWebサーバーストレスツールのアクセスをブロック | DevelopersIO
国産WAFベンダーCSCから新しいAWS WAFマネージドルールがリリースされたので使ってみた | DevelopersIO
GuardDuty
GuardDutyを有効化するだけで、EC2やALBなどの運用しているサービスへの攻撃やAWSアカウント自体への攻撃を検知 手間いらず!(EC2へインストール不要)
検知内容
- コインマイニング
- ssh/RDPブルートフォースアタック
- IAM Userの不正ログイン
- C&Cサーバへの通信
- ポートスキャン
- 漏洩したクレデンシャルの利用
【全員必須】GuardDutyがコスパ最強の脅威検知サービスであることを証明してみた | DevelopersIO
Systems Manager Parameter Store/Secrets Manager
アプリケーションにデータベース接続情報をハードコートしている方?
- 機密情報を保持するのではなく、アプリケーションで都度取得
- 多様な機密情報を格納可能
- ローテーション機能の実装(Secrets Managerのみ)
-
設定値やパスワードを集中的に管理する階層型ストレージ
- アクセス制御/暗号化が可能
- 他のサービスからの参照が容易
利用先
-
Amazon EC2
- 権限はIAM Role(インスタンスプロファイル)経由で付与
- 様々なタイミングでパラメーターを取得
- インスタンスの起動時(ユーザーデータ)
- プロセスの起動時(AMI作り込み/デプロイ時に設定)
- その他(アプリケーションで任意のタイミングに)
- Amazon Elastic Container Service(ECS)
- 権限はIAM Role(タスクロール)経由で付与
- 環境変数としてパラメーターストアを指定可能
- AWS Lambda
- 権限はIAM Role経由で付与
- 任意のタイミングで取得
- 今はLambda関数に環境変数がある 集中管理したい場合はパラメーターストアを引き続き利用 (Lambda関数が多い場合など)
- その他
- AWS CodeBuild → BuildSpec.yml内で取得
- AWS CodeDeploy → AppSpec.yml内で取得
Secrets Managerとの違いは?
- ローテーションできランダム文字列の生成ができる
- パラメーターストアはSecrets Managerのパススルーサービスとして機能する
- “/aws/reference/secretsmanager”を名前の先頭に付与すると、 Secrets Managerを参照する
- パラメータストアを利用するようにアプリを作り込んでいる場合 でも、名前を修正すれば移行は比較的容易
社内勉強会でパラメーターストアについて発表しました | DevelopersIO
まとめ
- 新サービス・新機能の取り込み継続的な改善
- AWSのマネージドサービスを最大限に利用
- 見直し実施するための定期的なシステムロードマップ作成と予算確保