ablog

不器用で落着きのない技術者のメモ

AWS

RDS PostgreSQL の接続・切断ログを CloudWatch Logs にエクスポートする

AWS

RDS PostgreSQL で log_connections=1、log_disconnections=1 に設定して、接続・切断ログを記録し、CloudWatch Logs にエクスポートして確認したメモ。 設定する パラメータグループを作成する(パラメータグループファミリー: postgres11)。 log_connecti…

S3 で特定のプリフィックス以下のオブジェクトの過去バージョンを削除する

AWS

S3 で特定のプリフィックス以下のオブジェクトの過去バージョンを削除する。以下はバケット test-bucket の test/ 以下のオブジェクトの過去バージョンを削除するケース。UTC 0:00 になると削除される。 lifecycle.json を作成する { "Rules": [ { "Status":…

S3 オブジェクトの過去バージョンを一括削除する

AWS

バージョニングを有効化している S3 バケットでオブジェクトの過去バージョンを一括削除する手順。 任意の S3 バケットの過去バージョンを確認する。 % aws s3api list-object-versions --bucket test-bucket|jq -r '.Versions[]|select(.IsLatest==false)|@…

Athena で改行を含む CSV を扱いたい場合は Glue ジョブで Parquet に変換する

AWS

データの中身に改行を含む CSV を Athena でクエリすると正しく扱えなかったが、Glue ジョブで CSV を Parquet に変換すると改行を含むデータを扱うことができた。おそらく OpenCSVSerDe は改行に対応していないが、Parquet SerDe は改行に対応しているから…

S3 に 1MB のオブジェクトを1億個作成する手順

AWS

S3 に 1MB のオブジェクトを1億個作成する手順(実際にはやらない)。 s3-cp-100m.sh #!/bin/bash date dd if=/dev/urandom of=1mb.dat bs=1m count=1 aws s3 cp 1mb.dat s3://az-cp-src/ date seq -w 1 100000000|xargs -t -P512 -I{} aws s3 cp s3://az-cp…

Route53 で特定のホストゾーンとトラフィックポリシーのみ編集できるIAMポリシー

AWS

IAMユーザー/ロールに対して、特定のホストゾーンと 特定のホストゾーンとトラフィックポリシーのみ編集できるIAMポリシー { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPublicHostedZonePermissions", "Effect": "Allow", "Action": [ "rout…

Lambda + node.js のデバッグでオブジェクトの中身を見る

AWS

util.inspect を使って、console.log(util.inspect(,false,null)) とするとオブジェクトの中身を CloudWatch Logs に出力できる。 'use strict'; const AWS = require('aws-sdk'); const util = require('util'); // util モジュールを読み込む exports.hand…

DynamoDB Streams + AWS Lambda Triggers で連携すると Item は event オブジェクトで渡される

AWS

DynamoDB Streams + AWS Lambda Triggers で連携すると Item のデータは event オブジェクトで渡されることを確認した。 Lambda (node.js) のコード 'use strict'; const AWS = require('aws-sdk'); const util = require('util'); // util モジュールを読み…

DynamoDB の AWS 管理 CMK のキーポリシー

AWS

aws/dynamodb のキーIDを確認 $ aws kms list-aliases|jq -r '.Aliases[]|select(.AliasName=="alias/aws/dynamodb")' { "AliasArn": "arn:aws:kms:ap-northeast-1:123456780123:alias/aws/dynamodb", "AliasName": "alias/aws/dynamodb", "TargetKeyId": "9…

RDSのスナップショット成功を確認する

AWS

イベントサブスクリプション RDS のスナップショット作成はイベントサブスクリプションで通知することができる。 カテゴリ RDS イベント ID 説明 作成 RDS-EVENT-0042 手動 DB スナップショットが作成されました。 Amazon RDS イベント通知の使用 - Amazon R…

CLoudWatch Logs のロググループを S3 にエクスポートする

AWS

S3バケットを作成する バケット名: exp-cloudwatchlogs バケットポリシー { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.ap-northeast-1.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "…

VPCE Policy Of The Year

AWS

なるほどーと思ったのでメモ。ちゃむれおさん(c)。 Effect: Deny Principal: "*" Action: "s3:PutObject" Resource: "*" Condition: StringNotLike: s3:x-amz-server-side-encryption-aws-kms-key-id: !Sub arn:aws:kms:${AWS::Region}:${AWS::AccountId}:ke…

PostgreSQLに特定の負荷をかける

AWS

準備 pgbench(PostgreSQL)をインストールする。 $ sudo yum -y install postgresql $ sudo yum -y install postgresql-contrib pgbench でデータを登録する。 $ pgbench -i -s 10000 -U awsuser -h aurora-postgres107.cluster-************.ap-northeast-1.…

クロスアカウントS3バケット間コピー時にコピー元の CloudTrail に記録されるログ

AWS

クロスアカウントS3バケット間コピー時にコピー元AWSアカウントの CloudTrail にログに記録されるログを調べたメモ。コピー先アカウントの EC2 から AWS CLI(aws s3 cp) でオブジェクトをコピーしてコピー元アカウントの CloudTrail をダウンロードして jq …

AWS managed CMK はリージョンが異なると別の鍵

AWS

AWSサービスの AWS managed CMK はリージョンが異なると別の Customer Master Key になる。以下は DynamoDBの東京リージョンとバージニア北部リージョンのスクリーンショット、キーエイリアスは同じ aws/dynamodb だがキーIDは異なる。 東京リージョンの aws…

Amazon DynamoDB Accelerator (DAX) のアラームで他アカウントのSNSトピックに通知できるか

AWS

DAX のアラームで他アカウントのSNSトピックに通知できることを確認したメモ。 セットアップ手順 DAX $ cat <<EOF > dax-assume-role-policy-document.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "dax.amazo</eof>…

Route53の特定HostedZoneしか変更できないIAMユーザーを作る

AWS

設定 IAMポリシー Route53HostedzoneAPolicy を作成する ポリシーはテスト用に適当に作成しています。 { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPublicHostedZonePermissions", "Effect": "Allow", "Action": [ "route53:ListHostedZones"…

Amazon DynamoDB Accelerator (DAX) のサンプル Java アプリを動かしてみる

AWS

まずは動かしてみる インストール・コンパイル手順 $ pwd /home/ec2-user $ mkdir trydax $ cd trydax $ sudo yum install -y java-devel $ wget http://sdk-for-java.amazonwebservices.com/latest/aws-java-sdk.zip $ unzip aws-java-sdk.zip $ wget http:…

Amazon DynamoDB Accelerator (DAX) のサンプル Java アプリを実行すると "Unsupported major.minor version 52.0" と怒られる

AWS

Java と DAX - Amazon DynamoDB のサンプルJavaアプリを実行したら、"Unsupported major.minor version 52.0" と怒られたので解決策をメモ。 事象 $ java TryDax Exception in thread "main" java.lang.UnsupportedClassVersionError: TryDax : Unsupported …

AWS Service Catalog の IAMポリシー AWSServiceCatalogEndUserFullAccess と ServiceCatalogEndUserAccess の違い

AWS

AWS Service Catalog の IAMポリシー AWSServiceCatalogEndUserFullAccess とServiceCatalogEndUserAccess の違い ドキュメント(日本語) AWSServiceCatalogEndUserFullAccess — エンドユーザーコンソールビューへのフルアクセス権を付与します。製品を起動…

Athena で CloudTrail から S3 イベントを集計する

AWS

クエリ select eventname, count(1) cnt from cloudtrail_logs where eventsource = 's3.amazonaws.com' group by eventname order by cnt desc 実行結果 eventname count ListObjects 263702 PutObject 200075 GetObject 134911 HeadObject 83034 UploadPar…

Amazon Redshift の監査ログの種類

AWS

デフォルトで Amazon Redshift の監査ログは設定したバケットに以下のパスで出力されるが、 AWSLogs/AccountID/ServiceName/Region/Year/Month/Day/ AccountID_ServiceName_Region_ClusterName_LogType_Timestamp.gzLogType は connectionlog、useractivityl…

S3 のアクセスログのオペレーションを集計する

AWS

ちょっとした量のS3 のアクセスログのオペレーションを集計する。 S3 のアクセスログを EC2 にダウンロードする。 $ aws s3 cp --recursive s3://s3-accesslog-az/ ./ オペレーションで集計する。 $ find . -type f -print0|xargs -0 -I{} perl -lane 'print…

アカウント毎にアクセス可能な S3 Prefix を制御する S3 バケットポリシー例

AWS

やりたいこと データレイクアカウントと連携相手の複数アカウントの間で1対多のクロスアカウントアクセス制御を行う。 連携相手のアカウントから特定S3バケットの特定 prefix 以下のみへの Put/Get/Delete を許可。 連携相手のアカウント毎に Put/Get/Delete…

AWS CLI で IAM Role の Unique ID を取得する

AWS

$ aws iam get-role --role-name EC2AdminRole { "Role": { "Description": "Allows EC2 instances to call AWS services on your behalf.", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Effect…

特定のVPC EndpointからのみPut/Get/Deleteを許可するS3バケットポリシー

AWS

特定のVPC EndpointからのみPut/Get/Deleteを許可するS3バケットポリシーの記述例。 { "Version": "2012-10-17", "Statement": [ { "Sid": "Access-to-specific-VPCE-only", "Effect": "Deny", "Principal": "*", "Action": [ "s3:PutObject", "s3:GetObject…

RDS Oracle で DataPump のダンプファイルをS3にアップロードする

RDS Oracle で DataPump のダンプファイルをS3にアップロードするには rdsadmin.rdsadmin_s3_tasks.upload_to_s3 を使うとよい。 例 SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'mys3bucket', p_prefix => '', p_s3_prefix => '', p…

AWS Summit Tokyo 2019 で登壇した

AWS Summit Tokyo 2019で「データレイク構築における成功の秘訣~マインドと進め方、設計ベストプラクティス~」というタイトルで登壇した。以下はストリーミング配信のスクリーンショットより。 スライドと動画 スライド 動画 アジェンダ データレイクとは …

Java アプリから S3 にアクセス時に必要な証明書がない場合に発生する例外

発生する例外 証明書ファイルが存在しない、もしくは存在するが中身が空の場合 java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty 証明書ファイルが存在する…

AWS SDK for Java v1.11 を使った Java サンプルプログラムを実行してみる

AWS

aws-doc-sdk-examples/java at master · awsdocs/aws-doc-sdk-examples · GitHub をビルドして、S3 バケットをリスト表示する Java サンプルプログラムを動かしてみた。 インストール git をインストールする。 $ sudo yum -y install git OpenJDK をインス…