AWSといえど、障害がまったくないわけではありません。年に1回大きな問題があるかないかというレベルなので、それはとてもすごいことだと思います。そのうち他のクラウドとも比較してみたいです。
AWS公式の障害情報はこちらから確認できますが、直近の情報しか見れません。そこで、過去の障害情報を確認するサイトを作成してみました。過去1年分ぐらいの確認ができます。
そのうち他のクラウドもという思いから、この名前にしました。
AWSといえど、障害がまったくないわけではありません。年に1回大きな問題があるかないかというレベルなので、それはとてもすごいことだと思います。そのうち他のクラウドとも比較してみたいです。
AWS公式の障害情報はこちらから確認できますが、直近の情報しか見れません。そこで、過去の障害情報を確認するサイトを作成してみました。過去1年分ぐらいの確認ができます。
そのうち他のクラウドもという思いから、この名前にしました。
マネジメントコンソールを使うと、色々と自動でやってくれるので便利ではあるのですが、CLIで一つ一つ作成することで理解が深まると思います。
Steampipeとは
Steampipe, a new open source project from Turbot, enables cloud pros (e.g. software developers, operations engineers and security teams) to query their favorite cloud services with SQL. It has quickly become one of our favorite tools in-house and we hope it finds a way into your tool box as well.
Hashicorp社のVaultを使用します
設定ファイルの作成
storage "raft" {
path = "/vault/file"
node_id = "node1"
}
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = "true"
}
disable_mlock = true
api_addr = "http://127.0.0.1:8200"
cluster_addr = "https://127.0.0.1:8201"
ui = true
起動
docker run --rm -p 8200:8200 \
-v `pwd`/vault/file:/vault/file \
-v `pwd`/vault/logs:/vault/logs \
-v `pwd`/config.hcl:/config.hcl \
vault server -config=/config.hcl
ブラウザで127.0.0.1:8200
にアクセス
Create a new Raft cluster
を選択
key shares
を5、Key threshold
を3に指定。(詳細は公式ドキュメントを参照ください。)
画面遷移後、少し待つとキーが発行されます。Download keys
でキーを一括ダウンロードしContinue to Unseal
をクリックします。
ダウンロードしたファイルのkeysから、3回別々のkey入力します。
右上のStatusが緑色に変わりました。ダウンロードしたファイルのroot_tokenを使ってログインします。
ログインできました。
Enable new Engine
をクリックします。
PKI Certificatesを選択し、Nextをクリックします。
Method Optionsを開き、Max Lease TTLを3650daysに設定します。Enable Engineをクリックします。
ConfigurationタブのConfigureボタンをクリック、Configure CAをクリックします。
項目を入力し、Saveボタンをクリックします。
項目 | 値 |
---|---|
Common name | My Private Certificate Authority |
Options -> TTL | 3650days |
Certificateが生成されるのでファイルに保存します。名前はprivate_root_CA.pemとしておきます。
URLsタブを選択し、Issuing certificates
にhttp://127.0.0.1:8200/v1/pki/ca
、CRL Distribution Points
にhttp://127.0.0.1:8200/v1/pki/crl
と入力し、Saveボタンをクリックします。
パンくずリストのpkiから画面を戻り、RolesタブのCreate roleボタンをクリックします。
以下の項目を入力し、Create roleボタンをクリックします。
項目 | 値 |
---|---|
Role name | MyPrivateCertificateAuthority |
Options -> Allow any name | チェックを付ける |
Options -> Enforce hostnames | チェックを外す |
ここまでで認証局の作成は完了です。
デバイス証明書を作成して登録しましょう。
Vaultの画面でMyPrivateCertificateAuthorityロールのメニューからGenerate certificateをクリックします。(ロール名のクリックでもOKです)
Common nameを入力し、Generateボタンをクリックします。
Certificate、Private keyを保存しておきます。(それぞれcertificate.pem、private.keyとします。) 画面下部のCopy credentialsからJSON形式で一括取得が可能です。
IoT Coreの管理画面でCA証明書まで遷移し、CA証明書を登録ボタンをクリックします。
ページ中程に説明のある検証証明書を作成する必要があります。登録コードはこの後必要なのでコピーしておきます。
OpenSSLで以下のコマンドを実行します。
openssl genrsa -out verification_cert_key_filename.key 2048
ファイルが作成されます。続いてこちらのコマンド。
openssl req -new -key verification_cert_key_filename.key -out verification_cert_csr_filename.csr
入力が求められるので、Common Name以外は未入力でエンター、Common Nameは先程の登録コードを入力します。
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []: <===== ここに検証コード
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Vaultの画面に戻り、Rolesに作成したMyPrivateCertificateAuthorityの右側メニューから、Sign certificateを選択します。
以下の項目を入力し、Generateをクリックします。
項目 | 値 |
---|---|
Certificate Signing Request (CSR) | OpenSSLで生成したCSRファイルの内容 |
Common name | 検証コード |
Options -> Exclude Common Name from Subject Alternative Names (SANs) | チェックを付ける |
証明書が作成されるので、ファイルに保存します。(verification_cert_filename.pemとします)
AWSの管理画面に戻ります。 CA 証明書にprivate_root_CA.pem、検証証明書にverification_cert_filename.pemを指定し、登録ボタンをクリックします。
CA証明書が登録されました。
証明書画面の証明書を登録ボタンをクリックします。
CA が AWS IoT に登録されていますを選択した状態でCA証明書を選択、作成済みのデバイス証明書をアップロードします。有効化もこのタイミングで実施しておくと良いでしょう。登録ボタンをクリックします。
IoTポリシーを作成します。ポリシーの画面でポリシーを作成ボタンをクリックします。
お試しなので、フル権限で作成します。ポリシーアクションとポリシーリソースはいずれも*です。作成をクリックします。
証明書の画面に戻り、先程登録したデバイス証明書にポリシーをアタッチします。
準備完了です。
接続します。
MQTTクライアントで以下の内容を入力し、接続します。
項目 | 値 |
---|---|
プロトコル | mqtts |
ホスト名 | AWS IoTの設定画面で表示されるエンドポイント |
ポート番号 | 8883 |
クライアントID | 任意の文字 |
ユーザー名 | 未指定 |
パスワード | 未指定 |
CAファイル | Amazon Root CA 1を保存したファイル |
クライアント証明書 | デバイス証明書(certificate.pem) |
プライベートキー | プライベートキー(private.key) |
任意(一部AWS予約トピックあり)
任意(一部AWS予約トピックあり)
Google Cloud IoT Coreのサービスは2023年8月16日に廃止されるようです。(https://cloud.google.com/iot-core?hl=ja)
GCPのIoT Core管理画面を開き、レジストリを登録ボタンをクリックします。
レジストリID、リージョン、Cloud Pub/Subトピックを入力、CA証明書欄private_root_CA.pemの値を貼り付け、作成ボタンをクリックします。
次はデバイスを登録します。左メニューのデバイスを選択し、デバイスを作成ボタンをクリックします。
デバイスID(device1)を入力し、認証欄にcertificate.pemの内容を貼り付けます。公開鍵の種類はRS256_X509を選択します。作成ボタンをクリックします。
接続します。
MQTTクライアントで以下の内容を入力し、接続します。
項目 | 値 |
---|---|
プロトコル | mqtts |
ホスト名 | mqtt.googleapis.com |
ポート番号 | 8883 |
クライアントID | projects/{GCPのプロジェクトID}/locations/{リージョン}/registries/{レジストリ名}/devices/{デバイス名} |
ユーザー名 | unused |
パスワード | こちらの方法で生成したJWT |
CAファイル | Google ルート CA 認証パッケージを保存したファイル |
クライアント証明書 | デバイス証明書(certificate.pem) |
プライベートキー | プライベートキー(private.key) |
/devices/{デバイス名}/commands/#
/devices/{デバイス名}/config
GCPの管理画面から構成を編集ボタン、コマンドを送信ボタンでテスト送信が可能です。
/devices/{デバイス名}/events
IoT Hubを作成します。
IoT Hub名を入力し、確認及び作成ボタンをクリック、作成ボタンをクリックします。
ルート証明書を登録します。左の証明書メニューを選択し、追加ボタンをクリックします。
証明署名を入力、private_root_CA.pemを選択、アップロード時に証明書の状態を確認済みに設定するにチェックを入れ、保存ボタンをクリックします。
次にデバイスを登録します。左のデバイスメニューを選択し、デバイスの追加ボタンをクリックします。
デバイスIDを入力しますが、ここで指定するデバイス名はデバイス証明書作成時に指定したCommon nameと同一である必要があります。認証の種類をX.509 CA 署名済みとし、保存ボタンをクリックします。
接続
接続します。
MQTTクライアントで以下の内容を入力し、接続します。
項目 | 値 |
---|---|
プロトコル | mqtts |
ホスト名 | {IoT Hub名}.azure-devices.net |
ポート番号 | 8883 |
クライアントID | {デバイスID} |
ユーザー名 | {IoT Hub名}.azure-devices.net/{デバイスID} |
パスワード | 未指定 |
CAファイル | Baltimore CyberTrust Rootを保存したファイル |
クライアント証明書 | デバイス証明書(certificate.pem) |
プライベートキー | プライベートキー(private.key) |
devices/{デバイスID}/messages/devicebound/#
Azureの管理画面からデバイスへのメッセージボタンでテスト送信が可能です。
/devices/{デバイスID}/messages/events/
過去にQiitaに投稿した内容のアーカイブです。
Amazon Managed Service for PrometheusとAmazon Managed Grafanaを使ってRaspberry Piのメトリクスを可視化してみました。(名前が長い。。そして統一感がない。。)
ワークスペースの名称を決めるだけです。
出来上がり。超簡単
IAMユーザーのアクセスキー情報が必要ですので、IAMユーザーを作成します。
必要なポリシーはこんな感じです。aps:RemoteWrite
だけでいいかもしれません。
注意点はなんといってもサービス名が AMP ってところです。さらにActionの接頭辞は aps (笑)
Docker ComposeでPrometheusとNode exporterを起動します。
version: '3.8'
services:
prometheus:
image: quay.io/prometheus/prometheus:latest
network_mode: host
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
node-exporter:
image: quay.io/prometheus/node-exporter:latest
container_name: node_exporter
command:
- '--path.rootfs=/host'
network_mode: host
pid: host
restart: unless-stopped
volumes:
- '/:/host:ro,rslave'
remote_write
のところに認証情報をセットします。
## my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
## Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
## Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
## A scrape configuration containing exactly one endpoint to scrape:
## Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
remote_write:
- url: https://aps-workspaces.ap-northeast-1.amazonaws.com/workspaces/ws-0ae04b80-d5e2-4b2c-a198-5a0c60989b58/api/v1/remote_write
sigv4:
# The AWS region. If blank, the region from the default credentials chain
# is used.
region: ap-northeast-1
# The AWS API keys. If blank, the environment variables `AWS_ACCESS_KEY_ID`
# and `AWS_SECRET_ACCESS_KEY` are used.
access_key: XXXXXXXXXXXXXXXXXXXX
secret_key: XXXXXXXXXXXXXXXXXXXX
起動します
## docker-compose up
ワークスペース名をつけます
Grafanaの画面にログインする際に使う認証情報を選択します。AWS SSOにしてみました。
GrafanaがアクセスするAWSのリソースを選択します。 あとからも変更できます。
これで作成は完了です。 続いてログインするユーザーを追加します。「ユーザーとユーザーグループの設定」をクリック
今回はAWS SSOで作成したグループを追加します。
権限は閲覧者と管理者の2つあります。デフォルトが閲覧者で管理者に変更する場合はチェックを入れて「管理者を作成する」をクリックします。(閲覧者に戻す方法はないのかな?)
マネジメントコンソールに表示されるワークスペースURLからアクセスします。設定したAWS SSOのユーザーでログインするとGrafanaの画面が表示されます。メニューにAWSのアイコンがありますね。
データソースにAmazon Managed Service for Prometheusを追加します。 AWSアイコンからデータソースをたどると追加できます。
ここまでできれば通常のGrafana同様です。