技術メモ置き場

とあるSIerのインフラエンジニアが主に技術メモを書き残すブログです。

AWS公式ハンズオン"AWS Hands-on for Beginners Amazon CloudFrontおよびAWS WAFを用いて エッジサービスの活用方法を学ぼう"を試してみました

はじめに


認定資格の学習をする際、避けては通れないCloudFrontですがハンズオンの機会がなく、なかなか実機操作のイメージが掴めないサービスの1つだと思います。そんな中、CloudFrontおよびAWS WAFのハンズオンができるAWS公式の動画が公開されていましたので試してみました。

このハンズオンで学べること


タイトルにあるハンズオンは以下のリンクよりアクセスできます。
Amazon CloudFrontおよびAWS WAFを用いて エッジサービスの活用方法を学ぼう

このハンズオンでは、S3で用意する静的コンテンツおよびAPI Gateway+Lambdaで用意する動的コンテンツをCloudFrontと関連付けし、 CloudFrontにキャッシュされたコンテンツへのアクセスとオリジンサーバのコンテンツへのアクセスとでレスポンスタイムがどの程度異なるのかを実験できます。
さらにAWS WAFの簡単な設定を通じて事前に設定したCloudFrontのコンテンツへアクセスできなくなることも確認します。

ユーザーエクスペリエンスの向上のため、CloudFrontなどのエッジサービスが必要なことは何となく分かるのですが普段Web系の部分に関わることがない私にとって、座学だけでそのメリットを理解することは困難でした。今回ハンズオンを通してレスポンスタイムの変化を確認できたことはサービスへの理解が深まるきっかけとなりました。

このハンズオンで登場するAWSサービス


  • AWS CloudFront
    AWSが提供するマネージドなCDN(Contents Delivery Network)サービス

  • AWS WAF
    AWSが提供するマネージドなWAFでCloudFront、API Gatewayなど他のAWSサービスに関連付けることが可能

  • Amazon API Gateway
    AWSが提供するAPI管理サービス

  • AWS Lambda
    AWSが提供するFaaSサービスでサーバーレスアーキテクチャを実現する際に必須のサービス

  • Amazon S3
    AWSが提供するマネージドで耐障害性を持つオブジェクトストレージ

まとめ


冒頭でも記載したとおり、CloudFrontとAWS WAFを利用したCDNサービスをハンズオンできる内容となっています。提供されている動画内で各サービスに関する説明もされており、初めてサービスを触れる方にとっても優しい内容になっていると思います。

認定資格を受験する場合はBlackbeltオンラインセミナーの資料などを通じて知識を保管する必要があると思いますが、実機操作のイメージを持つことが目的ならこのハンズオンは非常に良い学習コンテンツであると考えます。1時間半程度で完了する内容ですので、時間がある方は是非このハンズオンを試してみてはいかがでしょうか。

今後の学習で活用したい情報


Amazon CloudFront deep dive 資料及び QA 公開
AWS WAFアップデート 資料及び QA 公開

JP1/AJSでジョブネットの実行履歴を出力するコマンド

はじめに


JP1/AJSでジョブネットの実行履歴を表示するときのコマンドメモ。
いつも忘れてしまうので自分用にメモを残しておこうと思います。

# コマンド書式 
/opt/jp1ajs2/bin/ajsshow -b <開始日> -e <終了日> -f "%S %E %J" -RET "/"
# ルート配下の全てのジョブネットの2020/2/1〜2021/2/28分の実行履歴を出力
/opt/jp1ajs2/bin/ajsshow -b 2021/02/01 -e 2021/02/28 -f "%S %E %J" -RET "/"

参考情報


JP1/Automatic Job Management System 2 コマンドリファレンス - ajsshow

AWS CLIの使い方について学ぶ

はじめに


最近、AWSのクラスルームトレーニングであるSystems Operations on AWSを受講し、AWSの運用管理について学習しました。運用においてAWS CLIの利用は欠かせないものであり、今までマネジメントコンソールでポチポチやってた状況から脱却しなければならなかったため、学習したことを以下にまとめます。

AWS CLIとは


AWS公式ドキュメントがわかりやすいので以下引用です。

AWS Command Line Interface (AWS CLI) は、コマンドラインシェルでコマンドを使用して AWS サービスとやり取りするためのオープンソースツールです。WS CLI を使用すると、最小限の設定で、任意のターミナルプログラムのコマンドプロンプトから、ブラウザベースの AWS マネジメントコンソール で提供される機能と同等の機能を実装するコマンドを実行できます。

AWS CLIは、WindowsMacLinuxなど様々なプラットフォーム向けに展開されているツールで、普段GUIベースでポチポチ作業している内容をコマンドで実行できるため、スクリプトなどで運用業務を自動化することが可能です。研修の中でも、繰り返し行う作業についてはAWS CLIを使って自動化していくことが重要だと述べられていました。
ちなみに昨年12月にAWS CloudShellがリリースされており、AWS環境の操作方法がさらに増えたみたいです。こちらは公式のブログを参照すると良いと思います。
AWS CloudShell – AWS リソースへのコマンドラインアクセス

AWS CLIの書式


まだ使い始めたばかりで書式などになれていないため、備忘録として簡単に以下にまとめておきたいと思います。

# コマンド書式
aws <サービス名> <オペレーション> <パラメータ> <オプション>

例として、EC2を停止するコマンドを実行する場合は以下のフォーマットで記述します。

# EC2インスタンスを停止するコマンド例
aws ec2 stop-instances --instance-id i-987654321oiuytr1 --output json

上記のコマンド書式に記載している引数の意味はそれぞれ以下になります。

  • サービス名: どのAWSサービスを呼び出すか指定
  • オペレーション: そのAWSサービスで実行する操作を指定
  • パラメータ: オペレーションの実行に必要な引数を指定
  • オプション: 特定の値のみフィルターしたり、出力フォーマットを変更するオプションを指定

AWS CLIで利用可能なオプション


  • --query: コマンド実行結果をクライアント側でフィルタリングして表示するオプション
aws ec2 describe-instances --query 'Reservations[0].Instances[*].InstanceId'
  • --filter: コマンド実行結果をサーバ側でフィルタリングして表示するオプション
    ※ --queryも似たオプションなのでややこしいが、以下の組み合わせで利用することでなんとなくイメージが掴めました。
aws ec2 describe-instances --filter 'Name=instance-type,Values=t2.micro' --query 'Reservations[*].Instances[*].InstanceId'
  • --output: コマンドの出力形式を指定できるオプション
    json、text、tableが指定可能で、デフォルトはJSON形式になっています。
aws ec2 describe-instances --query "Reservations[0].Instances[0]"

{
    "Monitoring": {
        "State": "disabled"
    },
    "PublicDnsName": "ec2-18-183-174-135.ap-northeast-1.compute.amazonaws.com",
    "Platform": "windows",
    "State": {
        "Code": 16,
        "Name": "running"
以下省略

おわりに


AWS CLIの概要とコマンド書式について簡単にまとめてみました。名前は聞いたことあるけど全く触ったことない…という方のお役に立てば幸いです。私は実務でAWSに触れる機会がなく、すぐに忘れてしまいそうですが運用自動化のためには避けて通れない部分だと思うので定期的に振り返りたいと思います。

参考文献


AWS CLI Command Reference
AWSブログ - AWS CloudShell – AWS リソースへのコマンドラインアクセス

AWS公式ハンズオン"AWS Hands-on for Beginners 監視編 サーバーのモニタリングの基本を学ぼう"を試してみました

はじめに


2020年9月にAWSソリューションアーキテクト - アソシエイトを取得しましたが、その時は座学が中心でAWSサービスのハンズオンにあまり取り組めていませんでした。AWSサービスを運用する中で監視サービスであるCloudWatchの知識は必須であるため、実際に触ってみて理解を深めようと思いました。

このハンズオンで学べること


タイトルにあるハンズオンは以下のリンクよりアクセスできます。
AWS Hands-on for Beginners 監視編 サーバーのモニタリングの基本を学ぼう
このハンズオンでは、座学と実機操作が1セットになった動画を参照して学んでいきます。座学部分ではなぜ監視が必要か、なぜログを1箇所に集約しておく必要があるか、などCloudWatchのみならず、一般の監視に関する知識も身につけることができ、初めて監視を行うことになった方も参考になるのではないかと思います。

CloudWatchに関するサービスとしては以下について学ぶことができます。

  • CloudWatch Metrics : CloudWatchに発行されたメトリクスを収集し、統計を取得するサービス
  • CloudWatch Alarms : CloudWatchメトリクスを監視するアラームと関連サービスのアクションを設定できるサービス
  • CloudWatch logs : AWSサービスおよび顧客システムのログ監視、保存、アクセスが可能なサービス
  • CloudWatch Logs Insight : 専用のクエリといくつかのコマンドが提供され、取得したログを様々な切り口から分析できるサービス
  • CloudWatch Events : システムイベントをトリガーとして、Lambda関数などを起動したりできるサービス

まとめ


CloudWatchと一口に言っても、いくつかのサービスに分類されているため、ハンズオンで学ぶまではどれが何の機能を担っているのかイマイチイメージが湧いていませんでした。
座学と実機操作を通してCloudWatch関連サービスの操作方法や画面イメージについての理解が深まり、どのように活用すればいいかもなんとなくわかったような気になれました。ただし、実際に業務で活用するレベルまで持っていくとなるとチュートリアルなどを通して様々なユースケースを知る必要があると感じました。ハンズオン動画の最後の方で、今後のラーニングパスなどについても示されているので、こちらを参考にサービスに触れる時間を増やしていこうと思いました。

今後の学習で活用したい情報


Blackbelt Online Seminar Amazon CloudWatch
公式ドキュメント - Amazon CloudWatch とは

QwiklabsのIntroduction to AWS Identity and Access Management (IAM)を試しました

はじめに


IAMの基礎知識を保管するため、QwikLabsのハンズオンを試してみました。

学べること


  • 事前に用意された検証環境のIAMユーザーやIAMグループの設定内容を確認できます。
  • 事前に用意されたIAMポリシーの内容を参照し、どのAWSリソースのどの操作が許可されているかを確認できます。
  • 事前に用意されたIAMユーザをIAMグループとマッピングし、特定の権限をIAMユーザに付与します。その後、実際に各IAMユーザでAWSマネジメントコンソールへアクセスし、各リソースの操作権限を確認できます。

ハンズオンの流れ


  1. IAMユーザとIAMグループの内容確認
  2. IAMユーザとIAMグループを紐付ける
  3. 各IAMユーザでAWSマネジメントコンソールへアクセスして操作権限を確認

注意点


  • Qwiklabsでハンズオンを行う際、ログインアカウントが必要になります。Googleアカウントを持っている場合はそちらを利用することでログイン可能です。

感想


本当にAWSのことを何も知らない、という方向けにおすすめできるハンズオンです。 IAMユーザ、IAMグループ、IAMポリシーなどの大事な要素を抑えつつ、実際に手を動かして権限を超えた操作を行うとどうなるのか確認できるので取っ掛かりには丁度いいかと思います。

Dockerfileを利用してDockerコンテナを立ち上げる

Apache HTTPサーバのDockerコンテナを立ち上げるための準備


コンテンツファイルを配置するためのファイルを作成する。

mkdir document
echo "make dockerfile" > document/index.html

Dockerファイルの作成


Dockerfileを作成し、設定項目を記述する。

vim Dockerfile
FROM centos
RUN yum -y update
RUN yum -y install httpd
ADD document/index.html /var/www/html/index.html
EXPOSE 80
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

Dockerイメージを作成


以下のコマンドを実行してDockerイメージを作成する。

docker build -t test/apache .

docker buildにオプションtを渡しているが、これは作成するイメージにタグ付けするものである。 階層構造にすることでどのプロジェクトのイメージかが管理しやすくなる。

実行後、以下のコマンドを実行することでイメージが作成されたことが確認できる。

docker images
REPOSITORY    TAG       IMAGE ID       CREATED              SIZE
test/apache   latest    7090726bdc77   About a minute ago   323MB

Dockerコンテナを起動


作成したイメージからApacheのDockerコンテナを起動する。

docker run -d -p 8080:80 test/apache
docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED              STATUS                      PORTS                  NAMES
5a650ed68be3   test/apache   "/usr/sbin/httpd -D …"   10 seconds ago       Up 9 seconds                0.0.0.0:8080->80/tcp   angry_moser

事前に作成したindex.htmlファイルの内容が反映されているか確認


作成したDockerコンテナに対してHTTPアクセスして実行結果を確認する。

curl -v http://localhost:8080
# コマンド実行結果

*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET / HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.64.1
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Fri, 29 Jan 2021 15:51:25 GMT
< Server: Apache/2.4.37 (centos)
< Last-Modified: Fri, 29 Jan 2021 15:21:09 GMT
< ETag: "10-5ba0b8dc5960f"
< Accept-Ranges: bytes
< Content-Length: 16
< Content-Type: text/html; charset=UTF-8
< 
make dockerfile
* Connection #0 to host localhost left intact
* Closing connection 0

以上で無事Apache Dockerコンテナの起動確認までできた。

(番外)Dockerコンテナの中にアクセス


Dockerfileを作成する際、From部分で特にOSバージョンをしてしなかった。 この場合はDocker Hubで公開されているDockerイメージの最新版が指定されるようである。 実際にアクセスして確認してみる。

docker exec -it 5a650ed68be3 /bin/bash

以下のようにプロンプトが切り替わる。

[root@5a650ed68be3 /]# 

コンテナ内で以下のコマンドを実行してOSバージョンを確認する。

cat /etc/redhat-release 
# コマンド実行結果
CentOS Linux release 8.3.2011

2021年1月30日現在、Docker Hubに記載されているバージョンは以下のため、確かにDockerイメージ作成時に最新のOSが指定されている。

latest, centos8, 8, centos8.3.2011, 8.3.2011

コンテナから抜ける際は以下のコマンドを実行すればOK。

exit

まだまだ浅い理解であるが、少しずつDockerの仕様や操作を理解し、検証環境をサクサク作れるようになりたい。

ブログはじめました

ブログ初投稿になります。よろしくお願いします。

SIerでインフラ運用SEとして働いて5年程度になりますが、IT技術にあまり詳しくなく危機感を感じている今日この頃です。 業務上、技術の深い部分まで関わることがなくエンジニアとしてあまり成長している実感が無いため、 少しずつここにアウトプットすることで自身の成長に繋げたいと考えています。

脱なんちゃってエンジニアを目指して頑張ります。 ゆくゆくは多くのエンジニアの方に見ていただけるブログにしていきたい所存です。