AWS上に構築し数年経過したシステムの見直しポイント Developers.IO 2019 in SAPPORO #cmdevio

AWSは数年経つと日々アップデートしているため、色々変わってしまいます。 数年経過したシステムへ追加・変更しておくポイントについて大きく4つに分けてお話ししました。
2019.10.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちはコカコーラ大好き、カジです。

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のマネージドサービスを最大限に利用
  • 見直し実施するための定期的なシステムロードマップ作成と予算確保

資料