2021年11月30日火曜日

DynamoDBのメモ

DynamoDBを使ったときのメモです。


list_tablesは1つずつしか出てこない

boto3でlist_tablesを使うと存在するテーブルが全部出てくるかと思いきや、1つしか出力されない。ある1つの名前を出して、ExclusiveStartTableNameに入れるとその次が見れる。空白にすると、最初のものが出てくる。(CLIでも同じはず)

この例では、Musicの次のものが出てきます。

response = client.list_tables(

ExclusiveStartTableName='Music',

)

AWS S3 オブジェクトロックを理解する

S3バージョニング

バケットにあるオブジェクトのバージョンidを知るには

aws s3api list-object-versions --bucket <bucket-name>

オブジェクトロックを理解する

Default retensionの設定

- bucket作成時に設定可能、変更も可能

- consoleで修正可能

- consoleからbucketにObjectを入れるときは必ずこの設定になる

CLIでput-objectで設定する

- オブジェクトごとに設定できる

- 指定しないとDefaultになる

Legal Hold

- 削除不可になる

- ON/OFFを変えられる

- オブジェクトの上書きはできる。前のは前のバージョンとして残る。

以下では、sample-lock.txt というファイルに対して設定する

ON/OFFを変える

aws s3api put-object-legal-hold --bucket <bucket-name> --key sample-lock.txt --legal-hold Status=ON

ON/OFFを調べる

aws s3api get-object-legal-hold --bucket <bucket-name> --key sample-lock.txt
{
	"LegalHold": {
			"Status": "OFF"
	}
}

- bucket全体に同時にセットすることはできない

  - オブジェクトに対してなので, 都度設定する

ストレージクラスの変更はできる?

できる。コピーが作られる、そのコピーにはObject Lock設定はされていない。

コピーしない場合は、Lifecycle ruleを使う

- This action creates a new version of the object with updated settings and a new last-modified date. You can change the storage class without making a new copy of the object using a lifecycle rule.

- Copied objects will not retain the Object Lock settings from the original objects.

- Objects copied with customer-provided encryption keys (SSE-C) will fail to be copied using the S3 console. To copy objects encrypted with SSE-C, use the AWS CLI, AWS SDK, or the Amazon S3 REST API.

消せないけど上書きできる

Object Lockはversionに対してセットされる。

つまり、Object(versionなし)自体は削除できる。DeleteMarkerがつく。

このDeleteMarkerは削除できる→Objectは戻る

aws s3api put-object  --bucket <bucket-name> --key sample-lock.txt --body sample-lock.txt --object-lock-mode COMPLIANCE  --object-lock-retain-until-date "2021-07-10"

retensionは100年まで可能。ポリシーで最大10日等に変更する

Setting retention limits

https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-managing-retention-limits

S3 Object Lock追加されたのは November 26, 2018

Amazon S3 now offers Object Lock functionality that provides Write Once Read Many protections for Amazon S3 objects.

2021年11月28日日曜日

三井住友VISAカードの明細CSVをまとめて確認するPythonスクリプト

かなりニッチな自分用のスクリプトです。VISAカードで明細をCSVでダウンロードできます。

ある一つの項目を月ごとに見たいときがあります、そういうときのみ使えるスクリプトです。

ファイル名は202111.csvというdefault形式で、ひとつのフォルダに入れます。

check_itemが調べる項目で、この文字を含むものを抽出します。1つずつしか設定できません。

抽出結果を出力するときはto_csvのコメントアウトを外します。

import datetime

import pandas as pd
from dateutil.relativedelta import relativedelta


directory = "~/path/to/directory"

check_item = "大阪ガス"
# check_item = "関西電力"
# check_item = "水道"

start_year = 2017
start_month = 6

end_year = 2021
end_month = 12


date = datetime.datetime(start_year, start_month, 1)
date_end = datetime.datetime(end_year, end_month, 1)

data_out = []

while date <= date_end:

filename = "{0:%Y%m}.csv".format(date)
check_file_path = directory + "/" + filename

try:
df = pd.read_csv(check_file_path, encoding="sjis-2004")
except:
print(filename + " not exist.")

for i in range(len(df)):
if check_item in str(df.iloc[i].name[1]):
data_out.append(df.iloc[i].name[0:3])

date += relativedelta(months=1)

df_out = pd.DataFrame(data_out)

print(df_out)

# df_d_out.to_csv("test.csv", index =None)



2021年11月19日金曜日

Javascriptで日付を設定して、あと●●日というWEBカウントダウンタイマー的なのを作る

 タイトルの通りなのですが、日付を設定してそこまでのカウントダウンをするものを作ってみたかったので作りました。ほとんど参考サイトにありました。


1秒毎に更新されます。

tmp.html というファイルに下記コードがあり、 <form action="./tmp.html"> というフォームsubmitで押すとアドレスが .../tmp.html?set_day=2021-11-20 というものになって、それが<script>内で渡されてset_dayの部分が表示されています。 

<!DOCTYPE HTML>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
p {
text-align: left;
margin: 0px;
}

.large {
font-size: 60px;
}

.small {
font-size: 32px;
}
</style>
</head>
<body>
<p id="demo" class="large"></p>
<p id="demo1" class="small"></p>
<label for="start">Enter date:</label>
<form action="./tmp.html">
<input type="date" name="set_day">
<p><button style="float: left;">Submit</button></p>
</form>

<script>
var dateControl = document.querySelector('input[type="date"]');

var url = new URL(window.location.href);
var params = url.searchParams;
let set_day = params.get('set_day');

document.getElementById("demo1").innerHTML = "to " + set_day;

// Set the date we're counting down to
let countDownDate = new Date(set_day).getTime(); // milliseconds

// Update the count down every 1 second
var x = setInterval(function () {

var now = new Date().getTime(); // milliseconds

var distance = countDownDate - now;

// Time calculations for days, hours, minutes and seconds
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);

output = days + "d " + hours + "h " + minutes + "m " + seconds + "s ";

// Output the result in an element with id="demo"
document.getElementById("demo").innerHTML = output

// If the count down is over, write some text
if (distance < 0) {
clearInterval(x);
document.getElementById("demo").innerHTML = "EXPIRED";
}
}, 1000);
</script>
</body>
</html>

参考

https://www.w3schools.com/howto/howto_js_countdown.asp

https://gray-code.com/javascript/get-parameter-of-url/

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date

https://www.w3schools.com/js/js_dates.asp

https://www.w3schools.com/js/js_date_methods.asp


2021年11月13日土曜日

CloudFormationでLambdaのリトライを0にする

Lambdaで試行錯誤しているときにリトライばっかりして終わらないときがあります。デフォルトでは2回リトライするようです。これをゼロにします。</ br> https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventinvokeconfig.html
Resources:
  function:
    Type: AWS::Lambda::Function
    Properties:
  ...
  ...
  version:
    Type: AWS::Lambda::Version
    Properties:
      FunctionName: !Ref function
  asyncconfig:
    Type: AWS::Lambda::EventInvokeConfig
    Properties:
      FunctionName: !Ref function
      MaximumRetryAttempts: 0
      Qualifier: !GetAtt version.Version

2021年11月1日月曜日

S3 object lockで調べたことメモ

 https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-overview.html


バケット作るとき

バージョニング必須(自動でenableに)

オブジェクトロックEnable

→これらを戻すことはできない


あとから設定するには→contact AWS support


Default retention

Automatically protect new objects put into this bucket from being deleted or overwritten.

Disabled


設定項目

どちらかでも、両方でも設定可能。

- リーガルホールド--- hold on/off をpermissionがあれば設定できる

- リテンション -- 日付で設定。


compliance mode 期日まで誰も消せない

governance mode permissionがあれば再設定できる


作成時の設定がDefaultになる。

※objectごと、versionごとに設定する必要がある

新しく入れるオブジェクトは何もしなければDefault、入れた後でも設定できる


TODO

cliでできれば便利かも

バケットのストレージクラスの変更はできる?かよく分からない