前回投稿した「Qiita API でいいねとVIEW数をCurlで取得する方法」を利用し、Lambdaで実行してs3にjsonファイルとして格納してみようと思います。 Code 以下のコードを実行しs3に格納していきます。※事前にバケットは作成しておきます。 import csv import json import logging import os import sys import boto3 import requests formatter = '%(asctime)s%(name)-12s%(levelname)-8s%(message)s' logging.basicConfig(level=logging.WARNING, format=formatter) logger = logging.getLogger(__name__) def get_next_url(response): link = response.headers['link'] if link is None: return None links = link.split(',') for link in links: if 'rel="next"' in link: return link[link.find('<') + 1:link.find('>')] return None def get_items(token): url = 'https://qiita.com/api/v2/authenticated_user/items' headers = {'Authorization': 'Bearer {}'.format(token)} items = [] while True: response = requests.
Codeシリーズはまずは使ってみる! 概要(最低限) ソースコードを管理するGitリポジトリサービス サードパーティ(SourceTreeなど)利用可能 プルリクエスト機能が利用可能 リポジトリの作成 リポジトリ名を入れて、作成ボタン > 完成!! はじめにマネジメントコンソールでCodeCommitを選択しリポジトリを作成します。 名前を選択するだけ、簡単ですね。 次にgitを使う端末で設定をしていきます。 今回はAWS CLIを設定していることが前提になります。 git config --global credential.helper '!aws --region ap-northeast-1 codecommit credential-helper $@' git config --global credential.UseHttpPath true git clone [URLのクローン] コミット&プッシュしてみる 通常のgitと同様の利用方法が使えることを確認します。 $ echo "hello codecommit!" > README.md $ git add -A $ git commit -m "add readme" $ git push origin master コミットされたことを確認しました。 プルリクエストしてみる ブランチを作成しファイルを修正、コミット%プッシュします。 (master) $ git checkout -b f1 (f1) $ echo "f1 add" >> README.
bash -> fishに変更した場合、aws-cliの補完機能を有効にする方法 # 位置を特定します $ which aws_completer # 存在しない場合は作成します $ vim ~/.config/fish/config.fish # aws_completerのパスはwhichで調べたパスに適時変更しconfig.fishに追記して保存します $ complete -c aws -f -a '(begin; set -lx COMP_SHELL fish; set -lx COMP_LINE (commandline); /usr/local/bin/aws_completer; end)' #確認 $ aws s + tab さいごに これで、良いfish Lifeを過ごせます。
TTLとは レコード毎にデータの有効期限を指定でき、その有効期限を過ぎるとデータが自動削除される機能です 利用例 低アクセスデータをアーカイブTBLへ移動 メインTBLと同定義、キャパシティーだけ下げてOLDデータを保存 低アクセスデータを削除 削除時にトリガーして、LOGを残す トリガーさせるにはStreamの有効化が必要 TTL詳細 TTL の有効化 カラムで指定した有効期限を過ぎると、自動でデータが消える 変更が完全に処理されるまでに最大で 1 時間かかる TTL 属性 項目の TTL タイムスタンプを保存する DynamoDB 属性の名前 有効期限はNumber型のエポック時間(Unixtime(ミリ秒無し))を指定 現在の時間を、項目の Time To Live 属性に保存されている時間と比較 属性に保存されているエポック時間の値が現在の時間よりも少ない場合、項目は期限切れとマークされ、その後に削除される データは48時間以内に削除される リアルタイム性が重要でない場合(48時間後に消えてもOKな場合)は、とても有効な機能 スループットは消費せず、データ容量が減らせる エポック時間形式(Unixtime) コンピューターシステム上での時刻表現の一種 UNIXエポック、すなわち協定世界時 (UTC) での1970年1月1日午前0時0分0秒から形式的な経過秒数(すなわち、実質的な経過秒数から、その間に挿入された閏秒を引き、削除された閏秒を加えたもの) 現在時刻からエポック時間を取得する方法 Linux ターミナル: date +%s Python: import time; long(time.
Sparse Indexesとは DynamoDBのデータ抽出アプローチのテクニックの1つ 特定Itemにしか設定していない項目にGSIを含めることでプライマリーキー、ソートキー以外のキーでデータ抽出を容易に 以下の悩みを解決(プライマリーキー、ソートキー以外のキーでデータ抽出) scanだと高コスト、キーで検索しても高コスト、フィルターだとキー検索とコスト一緒 サンプル: gameから最優秀賞を取得 初期テーブル game単位で最優秀スコアのデータを取得したい scoreの最優秀をawdという項目を用意。対象以外は項目を設定しない awdを含めたグローバルセカンダリインデックスを作成 GSIを検索 最優秀賞が設定されている項目が少ないため、VIEWが出来た時点で絞り込まれている scanしても低コスト!←今回の一番のポイント aws dynamodb scan --table-name game --index-name name-awd-index { "Count": 1, "Items": [ { "score": { "S": "3" }, "id": { "S": "user3" }, "awd": { "S": "cp" }, "name": { "S": "game1" } } ], "ScannedCount": 1, "ConsumedCapacity": null }
Create Table (sample:mails) aws dynamodb create-table --table-name mails \ --attribute-definitions \ AttributeName=id,AttributeType=S \ AttributeName=Name,AttributeType=S \ --key-schema \ AttributeName=id,KeyType=HASH \ AttributeName=Name,KeyType=RANGE \ --provisioned-throughput \ ReadCapacityUnits=2,WriteCapacityUnits=2 attribute-definitions プライマリーキーとソートキーを定義する それ以外のキーはテーブル作成時には定義しなくても良い key-schema HASH パーティションキー RANGE ソートキー provisioned-throughput ReadCapacityUnits 読み込みスループット WriteCapacityUnits 書き込みスループット put-item aws dynamodb put-item \ --table-name mails \ --item '{"id": {"S": "testid1"},"Name": {"S": "Alice"},"mail": {"S": "alice@test.