aws route53 list-hosted-zones

表題のコマンドを実行する。Route53系のコマンドを叩きたいのだが、まずは”hosted-zone-id“を知らなければいけないようなので取得したい。

■ 環境

  • awscli 1.14.50
  • Mac OSX El Capitan

■ route53 list-hosted-zones

Hosted zone“の一覧を取得する。

$ aws route53 list-hosted-zones
{
    "HostedZones": [
        {
            "Id": "/hostedzone/XXXXXXXXXXXXXX",
            "Name": "withsin.example.com.",
            "CallerReference": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
            "Config": {
                "PrivateZone": false
            },
            "ResourceRecordSetCount": 7
        },
  :
    ]
}
$

id“は”/hostedzone/“から始まるようだ。またその”Hosted zone“にいくつのレコードが登録されているかも取得できる。

さて”hosted-zone-id“が取得できたので、これを元に他のサブコマンドを使用してやりたいことができそうである。

以上。

IPレンジ変更通知を受け取る

AWSにおいて表題の通り。AWS SNSを通して変更通知を受け取ることができる。

■ 環境

  • AWS SNS

■ SNS

AWS IP アドレスの範囲 – AWS の IP アドレス範囲の通知を受信登録するには
https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws-ip-ranges.html#subscribe-notifications

上記に登録方法が記載されているので、この通りに実施する。

自身は、メールにて変更通知を受け取るようにしている。Lambdaに渡して、対応まで自動化してしまいたいが、今時点ではここまで。

以上。

■ 関連

CloudFrontのIPレンジを取得する

AWS IP range

ELBのログに不明なフィールド

表題の件について。

■ 環境

  • AWS Application Load Balancer

■ ALB

Application Load Balancerを使用しログをS3に出力させているのだが、そのログの解析処理の中で2018/03/02もしくは2018/03/03分のログから一部で解析に失敗している箇所を発見した。なぜだろう?とデバッグしていくと、どうやら今まではなかったフィールドがログに追加されていることが原因であるようであった。

※よくよくログファイルを確認したところ、3/1分からであった。

Application Load Balancer のアクセスログ
https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-access-logs.html

上記のマニュアルによると、”アクセスログのエントリ“には20のフィールドが出力されるようになっている。しかし前述の日付あたりから21フィールドが出力されているようであった。21番目のフィールドに『0』、ものによっては『』が出力されている。件の解析処理の中では20フィールドの場合はELBと判別しELB用の処理を、それ以外の時はCloudFrontと判定しCloudFront用の処理を行うようになっていた為、ELBであるのにCloudFront用の処理に入っていた為に失敗しているようであった。判定処理はフィールド数だけではないのだが、CloudFront用の処理に入ってしまっていた。判定処理が甘いようである。ちなみにCloudFrontのログは26フィールドである。

判定処理を20フィールドもしくは21フィールドに変更し正しい結果を得られるようになった。

以上。

特定prefix配下のオブジェクトを全て削除

AWS S3において表題の件を`aws`コマンドで行いたい。

■ 環境

  • awscli 1.14.50
  • Mac OSX El Capitan

■ aws s3 rm

不要なオブジェクトが大量にある。件数を出してみると50万個…。どれもS3のライフサイクルを設定される前に作成されたもので既に不要になったものの残ってしまっていたオブジェクトである。さすがに50万個もあるので1個ずつ消していくとかなりの時間がかかってしまう。というわけである程度prefixで対象をまとめることができそうだったので、特定のprefix配下にあるオブジェクト全てを削除したい。

$ aws s3 rm s3://..../path/to/ --recursive

–recursive“を付けることで、指定したprefix配下全てを削除してくれる。

prefixを絞ってみたところ、対象が50万個であったオブジェクトが1万5千prefix程度になった。これでも十分多いのであるがさすがに50万個に比べれば我慢できる範囲である。後は1行スクリプトでどんどん消していくだけである。

以上。

aws acm get-certificate

表題のコメントについて。

■ 環境

  • awscli 1.14.50
  • Mac OSX El Capitan

■ get-certificate

サブコマンド名の通り、証明書の取得である。

もちろん取得できるのは証明書と中間証明書だけである。下記のようにして取得することができる。まずは`acm list-certificates`で取得したい証明書の”CertificateArn“を確認することが必要である。

$ aws acm list-certificates
{
    "CertificateSummaryList": [
        {
            "CertificateArn": "arn:aws:acm:ap-northeast-1:XXXXXXXXXXXX:certificate/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
            "DomainName": "example.withsin.net"
        },
        {
  :
$ aws acm get-certificate --certificate-arn arn:aws:acm:ap-northeast-1:XXXXXXXXXXXX:certificate/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
{
    "Certificate": "-----BEGIN CERTIFICATE-----\nMII...\n-----END CERTIFICATE-----\n",
    "CertificateChain": "-----BEGIN CERTIFICATE-----\nMII.../\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMII...\n-----END CERTIFICATE-----"
}

ManagementConsoleから証明書をインポートした時には下記3つを投入している。

  • 証明書本文
  • 証明書のプライベートキー
  • 証明書チェーン

インポート時に注意メッセージがあったように、秘密鍵は取得することはできない。当然か。

以上。

■ 関連

aws acm describe-certificate

aws acm list-certificates