【参加レポート】4/10開催のAWSセミナーに参加しました!

こんにちは。22年度入社の中島です。

今回は、4月10日に行われたAWSのオンラインセミナー(AWSome Day Online Conference)に参加しました。AWSの資格取得を考えていた私にとって、AWS の基礎やクラウドの全体像を学べる非常に貴重な機会となりました。今回は、セミナーがどのような内容だったか紹介したいと思います。

AWSの概要

セミナーの冒頭では、AWSとは何かという基礎的な部分から始まりました。
AWSは、Amazonが提供するクラウドサービスで、世界中で数百万以上のユーザーに利用されているとのこと。サービスの種類は200以上あり、Webアプリケーションのホスティングから機械学習、ビッグデータ分析まで、あらゆるニーズに対応しています。

クラウドの大きなメリットは、従来のように物理サーバーを購入・構築する必要がなく、必要なときに必要なリソースをすぐに使い始められるという「オンデマンド性」と「スケーラビリティ」です。導入コストや運用コストを抑えつつ、ビジネスのスピード感にも対応できる点が、クラウドが選ばれる理由だと感じました。

セミナーでは、続いて各サービスについての説明がありました。

ストレージ

AWSには多様なストレージサービスがありますが、主なものは、以下の3つ。

  • Amazon S3(Simple Storage Service)
    オブジェクトストレージの代表格で、耐久性99.999999999%(イレブンナイン )を誇ります。ログの保存、画像・動画の保存、バックアップ用途など、多様な使い方が可能です。
  • Amazon EBS(Elastic Block Store)
    EC2のインスタンスに接続して使うブロックストレージ。高性能なI/Oが必要なワークロードに最適です。
  • Amazon EFS(Elastic File System)
    複数のインスタンスで共有できるネットワークファイルシステム。Linuxベースのアプリケーションでよく使われます。

データベース

マネージドサービスとして提供されるAmazon RDSでは、MySQL、PostgreSQL、Oracle、SQL Serverなど複数のDBエンジンがサポートされています。バックアップやパッチ適用などの運用作業を自動化することができ、便利な機能がたくさんありました。

また、NoSQL型のAmazon DynamoDBも紹介され、レスポンスタイムが非常に高速で、柔軟なスケーリングが可能な点が魅力だと感じました。リアルタイムに大量なデータを扱わないといけない場合に活用したいと思いました。

ネットワークとセキュリティ

AWS上のネットワーク設計には、VPC(Virtual Private Cloud)という概念があります。これは自分専用の仮想ネットワークを構築するようなもので、プライベート/パブリックサブネットの設計や、ルーティング、NATゲートウェイなど、細かなネットワーク設計が可能です。

セキュリティ面では、IAM(Identity and Access Management)が重要な役割を担っており、ユーザーやロールごとに細かな権限設定が行えますまた、ファイアウォールのような役割を持つセキュリティグループや、アクセスを制限するネットワークACLの存在も紹介されました。

特に印象に残ったのが、「セキュリティはAWSとユーザーで責任を分担する」という責任共有モデルです。AWSはインフラのセキュリティを提供し、ユーザーはOS・ミドルウェア・アプリケーションレベルでのセキュリティ対策を行う必要がある、という考え方は、今後のクラウド設計において必須の知識だと感じました。

AWSのAIサービスについて

セミナーでは、AWSが提供するAIサービス群についても紹介されましたが、ここではその中でも特に注目したいサービスをいくつか掘り下げてご紹介します。

Amazon Rekognition(画像・動画解析)

Amazon Rekognition は、画像や動画の中に含まれる情報を高精度で分析できるサービスです。使い方はとてもシンプルで、画像や動画をアップロードし、API経由で解析を依頼するだけで行うことができます。セミナーでは、以下のような機能の紹介がありました。

  • オブジェクトとシーンの検出
    画像内に写っている「人」「自動車」「建物」「屋内」「屋外」など、さまざまなオブジェクトやシーンを自動で検出できます。
    例えば、防犯カメラの映像から不審な動きを検知したり、メディア業界でタグ付けを自動化したりといった使い方が可能です。
  • 顔分析と顔認識
    顔の位置、表情(喜び・怒り・驚きなど)、年齢の推定、性別などの顔の特徴を詳細に分析できます。また、顔認証のように同一人物かどうかの比較も可能です。
    これにより、出入管理システムや顧客体験のパーソナライズにも活用が期待できます。

Amazon Comprehend(自然言語処理)

Amazon Comprehendは、自然言語処理(NLP)に特化したサービスで、テキストデータから感情分析やキーフレーズの抽出、言語の判定などを行うことができます。

  • 例:カスタマーサポートのチャットログから、顧客が「満足している」「怒っている」といった感情を分析することができ、対応の改善につながります。

Amazon Polly(テキスト読み上げ)

Amazon Pollyは、テキストを自然な音声で読み上げるTTS(Text-to-Speech)サービスです。

  • 文章を入力すると、40以上の言語・70以上の音声で発音してくれるため、ナレーションの自動生成や、読み上げ機能のあるアプリに最適です。

Amazon SageMaker(機械学習モデルの構築・運用)

Amazon SageMakerは、より本格的に機械学習モデルを開発したい人向けのフルマネージドサービスです。

  • データの準備からトレーニング、デプロイまでを一括で行うことができ、Jupyter Notebookも統合されており、手軽に始められます。

これらのAIサービスの強みは、高度な技術をAPI一つで使える手軽さにあります。機械学習や画像処理といった分野に敷居の高さを感じていた人でも、AWSを使えばすぐに試せる環境が整っているのはとても心強いと感じました。

AWSの無料利用枠について

そして、何よりAWSには、初心者が気軽に始められるよう「無料利用枠(Free Tier)」が用意されています。これはAWSの多くのサービスを一定期間・一定の条件下で無料で試すことができる仕組みです。

【無料利用枠の種類】

  1. 12か月間無料
    アカウント作成から12か月間、以下のような代表的なサービスを無料で使えます。
  • Amazon EC2:Linux/Windowsインスタンスを月750時間(t2.microまたはt3.micro)まで無料
  • Amazon S3:月5GBまでのストレージ使用が無料
  • Amazon RDS:MySQL、PostgreSQLなどのデータベースが月750時間無料
  1. 常時無料(Always Free)
    一部のサービスは期間に関係なく無料枠が継続して利用できます。
  • AWS Lambda:月100万リクエスト、40万GB-秒まで無料
  • Amazon DynamoDB:25GBのストレージ、毎月25ユニットの読み書きキャパシティが無料
  • Amazon CloudWatch:基本的なモニタリング機能を無料で使用可能
  1. トライアルベースの無料枠
    特定のサービスに限り、試用期間中に無料で利用できる枠が提供される場合があります。

【活用時の注意点】

・AWS公式の「コストエクスプローラー」や「料金アラート」を使えば、使いすぎを事前に防ぐことができます。

・料金発生を防ぐためにも、利用量のモニタリング無料枠超過のアラート設定は忘れずに行うことが大切です。

これまでのインフラとこれからのインフラ

セミナーを通して一番印象に残ったのは、「インフラ基盤の在り方が根本から変わっている」ということ。

  • これまでのインフラ
     物理サーバーを自社で購入・設置・運用。時間もコストもかかる。拡張も大変。
  • これからのインフラ
     クラウド上で数クリックで構築。必要な分だけ使って、すぐスケール。グローバル展開も簡単。

例えるなら「家を建てる」のと「ホテルを借りる」くらいの違いがあります。自分のやりたいことにフォーカスし、インフラはAWSに任せるという発想が、これからのエンジニアには欠かせないと感じました。

おわりに

今回のAWSセミナーは、自分にとってまさに「クラウドの扉を開く」きっかけとなりました。難しそうに見えたクラウドも、しっかりと学べば確実に理解でき、資格取得や実践的なスキルアップにもつながります。

今後は無料利用枠を活用して実際に手を動かしながら、AWS認定資格(特にクラウドプラクティショナー)にもチャレンジしたいと思います。そして、ローカル環境だけでなく、クラウドでもインフラを設計・運用できるようになることで、エンジニアとしてのスキルの幅をもっと広げていきたいと思います。

今回はここまで
最後までご覧いただきありがとうございました!

AWS Lambdaを使った外形監視

福岡拠点の野田です。
AWSを使ったサーバー構築が最近増えてきました。今回は、AWS Lambdaを使った外形監視の方法を紹介しようと思います。

AWS Lambdaは、軽量なアプリケーションを動作するときに活躍するサービスです。5分おきのバッチサービス、管理画面でのSSRサービスなど、 常に常駐しておく必要がないプログラムを動かすのに適しています。 今回紹介する監視系のバッチもLambdaと相性のよいアプリケーションの1つとして考えています。

AWS Lambdaを使った外形監視の作成を以下の手順ですすめていきます。

  1. 関数の作成
  2. 関数コードの作成
  3. トリガーの追加

関数の作成

「1から作成」を選択します。関数名は「check_http」のような名前を付けます。ランタイムは、javascriptサーバーの「node.js12.x」を選択して関数を作成します。

アクセス権限については、「基本的な Lambda アクセス権限で新しいロールを作成」を選ぶとAmazon CloudWatch Logsの権限が付与されるので、これを選びます。

関数コードの作成

index.jsに以下をコピペします。

[/crayon]

ページ末尾の環境変数に以下のような監視対象URLを指定します。

ENV_URL https://(監視対象URL)

トリガーの 追加

EventBridge(CloudWatchEvents)を追加します。
ルールは、新規ルールでルール名を「every5min」を指定します。ルールタイプはスケジュール式で以下を設定します。

説明: 5分毎
イベントバス: default
スケジュール式: cron(0/5 * * * ? *)

あとは、CloudWatch側で以下のようなアラートルールを設定することで監視完了です。

Lambdaはいろいろな使い方ができると思うので、引き続き使っていこうと思います。

S3+CloudFront+Route 53を使った静的コンテンツ配信

福岡拠点の野田です。

WordPressで運用していた個人サイトをメンテしなくなったので、S3とCloudFrontとRoute 53を使って静的コンテンツ配信方式に切り替えてみました。手順の大きな流れは以下のようになります。

  1. S3にコンテンツを配置
  2. CloudFrontを設定
  3. Route53でCloudFrontへ振り分け

S3 にコンテンツを配置

まずは、wget で既存サイトを取得します。

[/crayon]

日本向けに配信することを考え、 S3 の東京リージョンにて新規バケットを作成して、上記取得したファイルを配置します。

S3における設定ですが、アクセス権限の設定を行います。静的コンテンツとして公開するため、以下のバケットポリシーのブロックをオフにすることで外部からのアクセスを行えるようにします。

  • 新規のパブリックバケットポリシーまたはアクセスポイントポリシーを介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックするオフ
  • 任意のパブリックバケットポリシーまたはアクセスポイントポリシーを介したバケットとオブジェクトへのパブリックアクセスとクロスアカウントアクセスをブロックするオフ

バケットポリシーは、以下のようなCloudFrontからの接続を許可する設定を行いますが、CloudFront側から設定ができるため、ひとまずスキップで大丈夫です。

[/crayon]

CloudFrontを設定

Create DistributionでCDNを新規作成します。

  1. Web/RTMPの選択でWebを選択
  2. Origin Domain NameにS3のバケットを選択
  3. Origin Pathは空欄でOK
  4. Origin IDは任意のIDを設定(S3-バケット名みたいな感じで設定しました)
  5. Restrict Bucket Accessは、YES
  6. Origin Access Identityは、 Create a New Identity。
  7. Grant Read Permissions on Bucketは Yes, Update Bucket Policy (これが先ほどのS3バケットポリシーに反映されますので、一応S3側でも設定されているか確認)
  8. Viewer Protocol Policyは、Redirect HTTP to HTTPS (httpからhttpsリダイレクト)
  9. Allowed HTTP Methodsは、GET/HEADのみで対応(CORSを考えるとOPTIONSまでやってもいいかもしれません)
  10. Compress Objects Automaticallyは、true(圧縮化。転送量削減)
  11. Price Classはベストパフォーマンス
  12. AWS WAF Web ACLは、None
  13. Alternate Domain Namesは割り当てるドメイン名を改行区切りで入力。
  14. 証明書については、独自ドメインで割り当てる場合、ACMに登録したものを選択。
  15. 残りはデフォルトで登録

Distribution作成後、 GeneralタブでEditボタンを押下して、以下を設定します。

  1. Default Root Objectにindex.htmlを設定

続いて Restrictionsタブを選択して、GeoRestrictionをEditします。

今回は、日本のみを対象とします。全世界を対象とするとコストと直結します。1日1000円以上かかってもいい!どんな攻撃もどんとこい!という方以外は、対象を絞ったほうが良いと思います(私もこれで当初1日放置して1000円かかってしまい冷や汗、急遽制限を追加しました)。

Route53でCloudFrontへ振り分け

仕上げにRoute53からCloudFrontへ振り分けします。A(IPv4アドレス)およびAAAA(IPv6アドレス)のエイリアス指定でCloudFrontにつなげることができます。

まとめ

Cloudは設定をミスると高額な請求が発生してしまうリスクはありますが、うまく使えば個人で使っても安く運用することができます。最近では予算設定や請求が高額になりそうなときにアラートも出せる機能もありますので、そうしたものを組み合わせて、安全に運用すると良いと思います。先月からの運用の感じだとアクセス数次第なところがありますが、100円~300円/月ぐらいで運用できそうな感じでした。

初心者にはおすすめはしませんが、興味ある方は是非チャレンジしてみてください。

JQコマンドをおぼえた

福岡拠点の野田です。久しぶりの投稿です。

ある案件でAWSを扱っており、ELBからインスタンスが切り離されたか確認してほしいと連絡がありました。生憎、AWS Consoleへの接続アカウントをもらっていない状態で調べられない…と思ったのですが、aws-cliがインストールされてあるサーバーがあることに気づき、そちらで確認してみました。

ELBの一覧を表示するコマンドは以下のようなものになります。

[/crayon]

けれども、awsのコマンドで出てくる内容はjsonで縦に長い!必要な情報だけに整理したいときに役立つのがjq(恐らくjson queryの略)コマンドになります。jsonの中からDNSNameと紐づくインスタンスを見たい場合は、以下のようなクエリをjqに投げます。

[/crayon]

jqコマンドの基本は、配列のフィルターと生成。.から始まる要素がフィルターされる内容になります。{}や[]で配列を再構築します。詳しいやり方は以下をご参考ください。

https://dev.classmethod.jp/tool/jq-manual-japanese-translation-roughly/

すぐれものなのは、jsonからcsvを作れること。以下のような感じでフィルターと配列の再構築を利用すれば、@csvでcsvの作成も楽々です。

[/crayon]

zabbixと連携させたりとか、 レポート出力を簡易化できないかとか夢が広がりますよね?是非、jqを使ってより良いjsonライフを!

AWSでインスタンスを停止し、再起動した時にパブリックIPが割り振られない場合

AWS特訓中の宮里です。

AWSでインスタンスを作成したときに、少し困った現象があったため情報共有したいと思います。

AWSで作成したインスタンスを一旦停止後、ネットワークインターフェイスを追加し、再起動した後にパブリックIPが割り振られない現象が発生しました。

?????となりながら、再起動を何度か試すもパブリックIPは復活せず。
作成したばかりのインスタンスだったので、インスタンスを一から作成し直し、特に問題は起こりませんでした。
その後、気になったので原因を調べてみると、AWS公式のドキュメントに今回の現象の解答がありました。

下記、公式のドキュメントから一部引用します。

手動でパブリック IP アドレスをインスタンスに関連付けること、また、手動でインスタンスから割り当て解除することはできません。場合によって、パブリック IP アドレスはインスタンスから解放されたり、新しいインスタンスに割り当てられたりします。
インスタンスが停止または終了されると、インスタンスのパブリック IP アドレスは解放されます。停止していたインスタンスが再起動されると、そのインスタンスには新しいパブリック IP アドレスが送信されます。
VPC 内のインスタンスのパブリック IP アドレスが既に解放されている場合には、複数のネットワークインターフェイスがインスタンスにアタッチされていると、インスタンスに新しいパブリック IP アドレスは送信されません。

出典:
AWS ドキュメント「パブリック IPv4 アドレスと外部 DNS ホスト名」

インスタンスを再起動するときは、プライマリENI以外はインスタンスにアタッチしてはいけないということでした。。。

少しづつ身につけていきたいと思います。

AWSのタイムゾーン設定でハマった件

福岡拠点の宮里です。
先日、アパッチのアクセスログをアーカイブして一定期間保存する作業を行っていたのですが、

apache-loggenでダミーアクセスログの生成

ログを確認していると、何か違和感が…

|02/May/2018:09:24:59 +0000|

私「あれ?もう出社して9時間は経ってて、もう今日も終わっちまうのかなぁって気がしていたけど」

心の中の金子賢「バカヤロー、まだ始まってもいねーよ」


サーバー時刻をUTCからJSTへ変更

あれあれあれと心を鎮めながら、サーバーに設定されているタイムゾーンを確認してみると、

このサーバーのタイムゾーンはUTC。
このままだとなにかと不都合です。
心臓にもわるいので、JST時間帯へ変更したいと思います。

sysconfigディレクトリの設定ファイル(clock)からタイムゾーンを修正します。
ひとまずバックアップ取って、

シンボリックリンクの向き先Asia/Tokyoへ変更します。

サーバーのタイムゾーンがUTCからJSTに変わりました。

これでひと安心かと思いきや、
この作業を行う前にすでに記録されているログの時刻をJSTに修正しないと何かと収まりがわるいです。
なので、USTで記録されているログをJSTへと変換するスクリプトを作りたいと思います。


既に出力されているログの時刻をJSTへ修正

スクリプトは、サーバーに標準でインストールされているpythonで作成してライブラリをひとつだけ追加します。

pytzの取得

JSTへ変換するスクリプト
changeJst.py

粗いスクリプトですが、ひとまず期待通りに動くことが確認できましたので、作業するサーバーのhttpdを停止してスクリプトを実行しました。ちなみにAWSのELBがunhealthyを認識して振り分けを開始するまで約1分~2分ほどかかるようです。認識する前にhttpdを止めると502で振り分けもされなくなるので注意が必要です。

処理するディレクトリのバックアップを取って実行。

なんとか完了です。
サーバー時刻もUTCからJSTへ変更します。
その後、httpdを再起動。
無事に現在時刻が18時に修正されました。
やっと終わっちまえます。


あれ、cronの実行がおかしい

それから様子をみること数日。
dateコマンドやログに出力される時刻はしっかりUTCからJSTに変更がされているけど、cronに設定したタスクの実行時間がおかしい!どうにも9時間遅れて実行されている!と気づきました。
調べてみるとサーバーのタイムゾーンを変更しただけではcronの実行時刻への反映がされないようです。crondを再起動してJSTタイムゾーンの反映が必要でした。。。

crontabの設定ファイルへtimezoneを記述して、crondの再起動。

これでcronの実行時間にもJSTが反映されました。