2021年12月28日火曜日

AWS Step FunctionsのMapでループをイテレートする

Step functionsでループを回すとき、Lambdaを使っていたのですが、Mapを使う方が簡単なのではないかということでメモ。


WorkFlow Studioで描く

2021年に出た機能です。絵を書くのは簡単ですが、途中で保存できないのが少し困ります。そのうち改良されるでしょうが・・・。



コード全体

WorkFlow Studioで絵を書いてからコードに変換できます(逆はできない。。)

"MaxConcurrency": 1 としないとループしないで同時に実行してしまうので注意が必要です(デフォルト無設定)。エラー処理の部分はデフォルトです。

{
  "Comment": "A description of my state machine",
  "StartAt": "Map",
  "States": {
    "Map": {
      "Type": "Map",
      "Iterator": {
        "StartAt": "Lambda Invoke",
        "States": {
          "Lambda Invoke": {
            "Type": "Task",
            "Resource": "arn:aws:states:::lambda:<lambda-name>",
            "OutputPath": "$.Payload",
            "Parameters": {
              "FunctionName": "map_step_function:$LATEST"
            },
            "Retry": [
              {
                "ErrorEquals": [
                  "Lambda.ServiceException",
                  "Lambda.AWSLambdaException",
                  "Lambda.SdkClientException"
                ],
                "IntervalSeconds": 2,
                "MaxAttempts": 6,
                "BackoffRate": 2
              }
            ],
            "End": true
          }
        }
      },
      "End": true,
      "MaxConcurrency": 1
    }
  }
}

Lambda関数はこちらのを使っています。 
arn:aws:states:::lambda:<lambda-name> という名前になるようにしてnode.js  で作成します。

exports.handler = (event, context, callback) => {
    callback(null, "Hello, " + event.who + "!");
};

StepFunctionsに入力するデータ
[
  {
    "who": "bob"
  },
  {
    "who": "meg"
  },
  {
    "who": "joe"
  }
]
実行すると、イテレートしていることが分かります。


もう少し入力を変えたいときはこちらを参考に。

2021年12月23日木曜日

udemyの動画を一時停止したときのボタンが邪魔→解決

 Udemyの動画を見ているときに、一時停止すると中央にアイコンが出ます。

こんな感じで、講義中のコードが読めなくて邪魔。


どうにかならないかと思っていたのですが、AfterShokz OPENCOMMのボタンで停止すると、このアイコンが表示されないで済むことがわかりました。一時停止の解除も同じボタンでやる必要があります。他のBluetooth機器でもできるんじゃないでしょうか。ちょっと手間ですが、とりあえず解決しました。


2022/01/14 一時停止中の表示が消えるように変更されたようです。



2021年12月10日金曜日

CLIの出力のJSONをgrepで抜き出したい

JSON出力から一部を取り出したいとき、いつも困っているのでメモ

練習のために、CloudFormationのCLIコマンド出力をtmp.json に保存して使います。

{
    "Stacks":  [
        {
            "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",
            "Description": "AWS CloudFormation Sample Template S3_Bucket: Sample template showing how to create a publicly accessible S3 bucket. **WARNING** This template creates an S3 bucket. You will be billed for the AWS resources used if you create a stack from this template.",
            "Tags": [],
            "Outputs": [
                {
                    "Description": "Name of S3 bucket to hold website content",
                    "OutputKey": "BucketName",
                    "OutputValue": "myteststack-s3bucket-jssofi1zie2w"
                }
            ],
            "StackStatusReason": null,
            "CreationTime": "2013-08-23T01:02:15.422Z",
            "Capabilities": [],
            "StackName": "myteststack",
            "StackStatus": "CREATE_COMPLETE",
            "DisableRollback": false
        }
    ]
}


一行だけを抜き出したい

OutputValue がある行を抜き出します。

grep -o '"OutputValue": "[^"]*' tmp.json | grep -o '[^"]*$'

'"OutputValue": "[^"]*' の部分で "OutputValue... の部分にマッチして(最後の"の手前まで)、
grep -o '[^"]*$' の部分で最初の " を削除しています。


一ブロックを抜き出したい

"Outputs" のブロックを抜き出します。中身を見ながらコマンドを作る必要があります。

a="$(cat tmp.json)" として、jsonの中身を変数aに入れておきます。 echo $a で確認できます。ここからネストした部分を切り出していきます。

echo $a | jq -r '.Stacks[0]'

で Stacks の1番目が見れます。

さらにOutputsを抜き出すには、こうなります。

echo $a | jq -r '.Stacks[0].Outputs[0]'

最終的に、cliコマンドの結果から繋げて直接見たいときは

aws cloudformation describe-stacks --stack-name aaaabbbbcccc | jq -r '.Stacks[0].Outputs[0]'

などとなります。


参考

https://stackoverflow.com/questions/36073695/how-to-retrieve-single-value-with-grep-from-json

https://unix.stackexchange.com/questions/597368/grep-print-value-of-a-key-in-json-that-is-stored-in-a-variable

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でできれば便利かも

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

2021年10月31日日曜日

AWSでASIAで始まるアクセスキーの意味

 https://docs.aws.amazon.com/STS/latest/APIReference/API_GetAccessKeyInfo.html より

(Access key ID はIDがついても無くても同じ意味)

AKIAで始まるaccess keyはIAMのlong-term credentialsで、IAMユーザがアカウントで使う。

ルートアカウントのaccess keyはルートにログインすれば見られる。credentials reportで、どのIAMユーザがどのaccess keyを持っているかを知ることができる。

ASIAで始まるaccess keyはtemporary credentialsで、AWS STSで作られる。誰がこれをリクエストしたのかを調べるには、CloudTrail logsでAWS STS events  を調べればよい。

、、、

ということです。


ubuntuで調べたことのメモ

sudoでaliasが使えないとき

.bashrc に alias sudo='sudo ' を登録する。sudo<スペース>としていて、他の記号でも良いらしい。

aliasかどうかはコマンドの最初しか見ないので、普通にsudo XXX とするとスキップされる。一方最初に記号(‘/’, ‘$’, ‘`’, ‘=’ など)が入っていると、2つ目の単語を見る。

ということだそうです。

https://askubuntu.com/questions/22037/aliases-not-available-when-using-sudo


2021年10月23日土曜日

Azure Blob Storageの料金比較。CentralUS、JapanEast、JapanWest

Azure Blob Storage pricingの表を作りました。 

こちらの公式サイトから。

https://azure.microsoft.com/en-us/pricing/details/storage/blobs/


料金は全て、最初の50TBに対する / month / GB。Standard (GPv2) storage

  • Central USとJapanを比べると、Hotで10%、Coolで50%、Premiumで20%割高。Archiveは同じ。
  • JapanEastとJapanWestの費用は、Premium以外は同じ。


Central US
PremiumHotCoolArchive
LRS$0.18$0.018$0.01$0.002
ZRS$0.239$0.023$0.013N/A
GRSN/A$0.037$0.02$0.004
RA GRSN/A$0.046$0.025$0.004
GZRSN/A$0.042$0.028N/A
RA GZRSN/A$0.052$0.022N/A
Japan East
PremiumHotCoolArchive
LRS$0.218$0.02$0.015$0.002
ZRS$0.289$0.025$0.019N/A
GRSN/A$0.04$0.03$0.004
RA GRSN/A$0.05$0.038$0.004
GZRS----
RA GZRS----
Japan West
PremiumHotCoolArchive
LRS$0.233$0.02$0.015$0.002
ZRS$0.309$0.025$0.0188N/A
GRSN/A$0.04$0.03$0.004
RA GRSN/A$0.05$0.038$0.004
GZRS----
RA GZRS----

2021年10月6日水曜日

AzureのsandboxのためにUbuntu20.04に.NetCoreを入れる

公式から連なる説明は全然わからず。

こちらのブログが大変役立ちました。

https://kazuhira-r.hatenablog.com/entry/2021/04/02/013829


Azureの知識ではなくUbuntuのパッケージ管理の問題でしたが。。

2021年10月2日土曜日

Azure sandboxでAzure Active Directoryが使えないエラー

Microsoft AzureのlearningにあるExercise - Set up self-service password resetとかをやっていてAzure ADの練習をしようとしていたのですが、唐突にAzure ADが作れないエラーになりました。

{ "shellProps": { "sessionId": "xxxxxxxxxxxxxxxxx", "extName": "Microsoft_AAD_IAM", "contentName": "ActiveDirectoryMenuBlade",


 "code": 403 }, "error": { "message": "No access", "code": 403 }} 


ここらへんでの会話を見る限りはずっと解決しないままのようですが・・・。

https://docs.microsoft.com/en-us/answers/questions/25751/lab-sandbox-not-allowing-access-to-azure-ad.html 


・・・実はアカウントを作っておかないと駄目なのでは。

2021年9月24日金曜日

VSCodeの設定メモ


VSCODEのブレイクポイントの部分を隠したいとき


setting.jsonにこれを入れる

  "editor.glyphMargin": true, // toggle breakpint bar


VSCODEサイドバー、タブの文字サイズを変えたいとき

setting.jsonの

"window.zoomLevel": 1,

の部分を0とか1にして、本文をマウスホイルスクロールなどでサイズを変える。

公式では要望があるけど反映されていないようです。

https://stackoverflow.com/questions/61046039/how-can-i-change-vscode-sidebar-font-family

https://github.com/microsoft/vscode/issues/3702


VSCODEコマンド

ペインの移動

Ctrl + 0 side bar

Ctrl 1 GROUP 1のペイン

Ctrl 2 GROUP 2のペイン

...

※GROUPがないときは空のグループが作成されて、空のペインが開く


?? Ctrl Alt Right, Left | ファイルを隣のEDITORペインに移動 | ペインが複数あるとき。 WinではOKだが...


最短マッチ  ^.*? のように?を付ける


にわにはにわにわとりがいる

のマッチで

^にわ.*?

^にわ.*

で比べてみるとわかる


cSpellの設定

日本語を無視する

複数系の 's  を無視する

  "cSpell.ignoreRegExpList": ["[0-9A-Za-zぁ-んァ-ヶ亜-熙纊-黑]+", "'s$"],

2021年9月15日水曜日

Magic trackpad 3 を買ったのでUbuntuで使う

Magic trackpad 3を買いました。楽天のショップで少し安かったです。

写真など



なんだかパッケージに東南アジアの言語が書かれている気がするのですが・・・たぶんそちらの免税店で買ったものかな?分かりませんが。



説明書とケーブル。Trackpad3からはライトニングーUSB-Cになったみたいですが、他は2と同じとのこと。


本体。見た目ではよくわかりませんがガラスです。踏んだら割れそうです。



こんな感じで、分離するキーボードの間に置いています。


使った感想

  • 特に問題なく使えています
    • 慣れるのに数日はかかりましたが
  • Ubuntuだからか不明ですが、カーソルがモッサリしています。Macbook airなどのデフォルトのものより遅い気がします。もう少しカーソル移動の感度が上がって欲しいです。(少しの指の移動でカーソルを大きく移動させてほしい)。画面の四隅とタッチパッドの四隅が対応しているけどそんなに移動させるの大変なので。
  • 電池の持ちは普通?充電は月1回程度なのではないかと
  • Bluetoothの再接続方法がよくわからず電源をオンオフしてやっています
    • 再起動時などに自動で繋げてくれない(けどこれはUbuntu側の設定なのかも)

Ubuntu側での設定

Ubuntu 20.04でのメモ

ペアリング 電源入れたり消したりしたらUbuntu上に出てきた。(そのときはLighting接続していたが、あまり関係ないかも?)

Ubuntu標準のSettingにあるトラックパッドの設定が使える。

- タッチでクリックをオフ

- 二本指でスクロール

に設定。(「タッチでクリック」は、二本指タッチするときに右クリックが暴発しまくっていたのでオフに。)


プログラムインストール

デフォルトでは機能が限られているので、gesturesというライブラリを使いました。若干、試行錯誤が必要でした。


作成者のgithub

https://github.com/bulletmark/libinput-gestures


こちらが一番参考になりました。appstream-utilが無かったので別途インストール。

https://kaigo.medium.com/mac-like-gestures-on-ubuntu-20-04-dell-xps-15-7ea6e3be7f76


"libinput-gestures failed to start as a desktop application" というエラーが出て、こちらにある

newgrp input

をやったら直った気がする(いろいろ試してしまったので断定できないが。PCの再起動は意味がなかったような気がする)

https://atlassc.net/2021/08/07/libinput-gestures-failed-to-start-as-a-desktop-application/


その他参照した日本語のブログ記事

https://ohmyenter.com/trackpad-gestures-with-libinput-on-linux/

https://blog.uyorum.net/post/ubuntu-multitouch/


3本指左右スワイプの挙動が好みと逆だったのでこのように入れ替えた。ctrl+wのタブ削除と、Enterキーのジェスチャがほしかったので、

 /etc/libinput-gestures.conf

の中を編集


gesture swipe right_up xdotool key ctrl+w

gesture swipe down xdotool key KP_Enter

gesture swipe left xdotool key alt+Left

gesture swipe right xdotool key alt+Right


指3,4本の設定はできるが、指2本のジェスチャはデフォルトから変更できない


アプリ再起動
libinput-gestures-setup restart

2021年8月9日月曜日

DMMのポイントを楽天ポイント全額利用では購入できないが1円だけクレジットカードにすれば買える

ポイントにつられてDMMブックスを利用してしまっている(?)のですが、DMMポイントを購入するときに、 全額楽天ペイのポイント払いにすると



ご利用のサイトでは、決済金額全額を楽天ポイントもしくは楽天キャッシュでお支払いすることはできません。
というエラーが出ます。

なので、1円だけクレジットカード払いにして、残り全額を楽天のポイント支払いにすると払えました。よく分かりませんが、クレジットカードの認証を通すときに、0円では駄目だからなんでしょうか。

ちなみに、

  • 楽天の期間限定ポイントを利用できました。
  • DMMのポイントの有効期限は1年間です。
  • DMMの最低購入ポイントは500ポイントです。それ以下のポイントは買えません。
  • DMMブックスでは、ポイント支払いにもポイントがつきます!










2021年8月7日土曜日

ubuntu nautilus の starが使える/使えないディレクトリがある

nautilusのstar機能が使えないディレクトリがあり、理由を調べました。(ubuntu 20.04)

XDG user directoriesのディレクトリしか使えないらしい


https://gitlab.gnome.org/GNOME/nautilus/-/issues/243

使えるのは、下記のディレクトリの下にあるもの。Homeそのものは対象外です。

XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_TEMPLATES_DIR="$HOME/Templates"
XDG_VIDEOS_DIR="$HOME/Videos"


パスを変更することはできるらしい

https://wiki.archlinux.org/title/XDG_user_directories
https://forums.ubuntulinux.jp/viewtopic.php?pid=121174

これを変更するとnautilusのstarが使えるようになるのかは、不明です。

結局

home/user/ にあるディレクトリをstarしたかったのですが、面倒なので、starを使いたいディレクトリは、starが使える ディレクトリの下に置くことにしました。







2021年8月4日水曜日

CloudFormationのyamlファイルの中で、jsonでの書き方を混ぜても動きます、という話

下のテンプレートで簡単なVPCとサブネットが作成されます。テスト用なのでパラメータ端折っています。

これを調べた動機は、他の人が書いたyamlテンプレートを見ていたらこのJSON混じりの書き方になっていたので、試してみた次第です。

VPCとsubnetに3つずつタグをつけていますが、VPCはyamlの記法で、subnetはJSONの記法で書いています。特に問題なく作成できますが、 JSONの [ { } ] という記法を間違えたりしそうです。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html

AWSTemplateFormatVersion: 2010-09-09
Description: Create VPC. Use JSON style of Tag list for the subnet.

Resources:
myVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
Tags:
- Key: stack
Value: production
- Key: Name
Value: VPC-name
- Key: Time
Value: when
mySubnet:
Type: AWS::EC2::Subnet
Properties:
VpcId:
Ref: myVPC
CidrBlock: 10.0.0.0/24
Tags: # JSON style works in YAML.
[
{ "Key": stack, "Value": production },
{ "Key": Name, "Value": subnet-name },
{ "Key": Time, "Value": when },
]

UbuntuでRaspberry PiのSambaに接続する

ラズパイ上でsambaを使ってフォルダ 共有をするときのメモです。

Raspberry Pi側の準備

設定方法:省略。(TODOあとで書くかも)

/etc/samba/smb.conf をメモ用にここに書いておく。

[share]
path = /home/pi/share
#writable = yes
guest ok = yes
guest only = yes
create mode = 777
directory mode = 777
#share modes = yes
#force user = pi
public = yes
read only = no
browsable = yes
force user = pi


$ ifconfig

でRaspberry PiのIPアドレスを調べておく。

Ubuntu側の準備

同じネットワーク上にあるなら、ディレクトリのウィンドウを開いたときにある"Ohter Locations"から見つかりました。



コマンドラインで入るなら、下記ページのやり方で。IPアドレスはRaspberry Piのもの、<folder_name>はshareフォルダの名前。ユーザを指定せず(ーU以降はなし)に入ると、clientのユーザー名で繋がりました。パスワードを入力しなくても入れてしまいましたが、これはSamba側の設定なのかもしれません。

Installして、shareディレクトリのListを見ます。

sudo apt-get install smbclient

# List all shares:

smbclient -L //<HOST_IP_OR_NAME>/<folder_name> -U <user>

Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
share Disk
IPC$ IPC IPC Service (Samba 4.9.5-Debian)
SMB1 disabled -- no workgroup available

接続します。

# connect:

smbclient //<HOST_IP_OR_NAME>/<folder_name> -U <user>

~$ smbclient //192.xxx.xxx.xxx/share

Enter WORKGROUP\user's password:

Try "help" to get a list of possible commands.

https://askubuntu.com/questions/777717/how-to-share-a-folder-on-ubuntu-to-raspberry-pi-3-over-local-wifi-network

2021年8月2日月曜日

S3のバケットからオブジェクトを移動しつつリネーム

aws cliで、S3のバケットから全てのオブジェクトを移動します。まとめて移動することはできないので、
shell scriptでforループを使います。


下記では、bucket01からbucket02へregex でオブジェクト名を変更しつつ移動します。

rename_and_move_s3_bucket.sh
list_objects=$(aws s3 ls s3://bucket01 | awk '{print $4}')

for old_object_name in $list_objects; do
	new_object_name=$(...) # mv or rename
	aws s3 mv s3://bucket01/$old_object_name s3://bucket02/$new_object_name
done

2021年7月31日土曜日

scriptでUnix ターミナルの表示全てを保存する

script コマンドで、terminalの表示を逐一保存することができます。
$ script outputfile.txt

で出力ファイルを決めてスタート。
$ exit

するまで続きます。


出力を見てみると、PS1で設定したフォントの部分がそのまま出て文字化けか?と思ってしまいました。

この出力はターミナルのフォントの部分で、同じターミナルで読むときは問題ないですが、他のエディタなどで読むには辛いので消したいです。置換、削除するとスッキリします。

置換する
月 -> 月

削除する
\[01;3\dm
\[0m
\[00m
\]0;
~

---

Script started on 2021-07-31 14:54:50+09:00 [TERM="screen-256color" TTY="/dev/pts/3" COLUMNS="151" LINES="51"]
<user>@<client>:~$ script --help

Usage:
 script [options] [file]

Make a typescript of a terminal session.

Options:
 -a, --append                  append the output
 -c, --command        run command rather than interactive shell
 -e, --return                  return exit code of the child process
 -f, --flush                   run flush after each write
     --force                   use output file even when it is a link
 -o, --output-limit      terminate if output files exceed size
 -q, --quiet                   be quiet
 -t[], --timing[=] output timing data to stderr or to FILE
 -h, --help                    display this help
 -V, --version                 display version

For more details see script(1).
<user>@<client>:~$ exit
exit

Script done on 2021-07-31 14:54:59+09:00 [COMMAND_EXIT_CODE="0"]

実際のターミナルのスクリーショットはこんな感じでした。分かり難いですが元の色が設定されています。
参考 https://unix.stackexchange.com/questions/200637/save-all-the-terminal-output-to-a-file

2021年7月26日月曜日

AWSコンソール上の名前の欄はタグと連動している

全然知らなかったのでメモ

AWSマネジメントコンソールのリソース名は、タグの"Name"を反映しているようです。

下の図のような項目です。ここではNameがありません。


リソースは例えばEC2インスタンス、VPC、subnet、などです。後から書いてもよい

  • Tag側で書いても、コンソール側で書いてもよい

です。


よく分からないこと

コンソール上で以下の操作をします。

Nameなし(Tag Nameもなし)で作成する

Nameを設定すると、Tag Nameが生成される → これはOK

Nameを削除すると、Tag NameはValue空白で残される → ??

Tagは存在していることになるのだろうか。

aws cliで試してみる

こういうCLIでdescribeします。

aws ec2 describe-tags --filters "Name=resource-id,Values=i-xxxxxxxxxxxxxxxx"


EC2の作成直後は空白です。

{
"Tags": []
}

Tag Name: EC2-a を入力してからdescribeしたときの出力。きちんと出ていますね。

{
"Tags": [
{
"Key": "Name",
"ResourceId": "i-xxxxxxxxxxxxxxxx",
"ResourceType": "instance",
"Value": "EC2-a"
}
]
}

Nameが空白の状態で残ったとき Valueが空白の""で出力されています。

{
"Tags": [
{
"Key": "Name",
"ResourceId": "i-xxxxxxxxxxxxxxxx",
"ResourceType": "instance",
"Value": ""
}
]
}

ということで、タグ自体は存在しているようですが、valueが空白ということでした。


CloudFormationで作成時にTag: Nameを設定

Tags:
- Key: Name
Value: Name-is-also-displayed-on-console

などとすればよいです。

トイレットペーパーホルダーを壁の穴を変えずに静音のものに交換した話

先にまとめ

  • トイレットペーパーホルダーを静音のものに交換しました。
  • 壁にある既存の穴を使えるように、木材でアダプターを作りました。

完成版の写真


比較動画

ビフォー (元々ついていたホルダー。商品名等は不明)


アフター (取り付けたもの。カワジュン SC-483-ST )



準備

動機

トイレットペーパーホルダーがカラカラ音がして気になるので、静音のものに交換することにしました。賃貸なので、既存の壁穴を使えるアダプターを作りました。

選定

新しく買ったペーパーホルダーはネットでも評判がよいKAWAJUNさんのものを買いました。上面が鏡面になっているものや、黒いものやいろいろ種類があるようです。実売4,000円くらい。

カワジュン トイレットペーパーホルダー SC-483-ST 

https://shop-kawajun.jp/fs/kawajun/SC-483-ST


使った道具

  • ドリル一式
  • 19mm厚の木材(もともと別の用途に使っていた残骸)
    • この木材にホルダー本体を留めるためのネジ(15mm程度の長さ)
  • ノコギリ





手順

元のペーパーホルダーホルダーはこんなのでした


外すと穴はこうなっています。幅70ミリのようです。下の穴は使わず、上の2つを使います。



木材に穴を開けます

壁固定用のネジは4mmなので、穴は4.8mmにしています。内側の穴は本体を留める用の間隔30ミリの穴です。けっこう雑に開けました。



アダプタを装着します。


壁に付けます。元々使われていたネジをそのまま使っています。


ペーパーも付けました。木があるのが逆にいい感じかも。




静音ペーパーホルダーの感想

  • とても静かです。無音というわけではないですが。
  • 片手でペーパーを切ることもできます。これはこの製品特有かもしれません。(追記:実際のところは癖で両手で切ってます)


まとめ

  • 静音ペーパーホルダー最高!
  • DIYで壁に穴を開けるか迷っている人は、木材でアダプターを作ってみてはいかがでしょうか。木材の厚みはたまたま家にあった19mmを使いましたが、適当でいいと思います。カマボコ板とかでも。
    • 今回は既存のホルダーで使っていた壁に肯定するネジが充分に長かったので問題ありませんでしたが、ものによってはネジの長さが足りなくなるかもしれません