vue create --preset kocal/vue-web-extension
AWS ECRにDockerイメージをPrivateにPushする
ECRって馴染み無いからなんだろうけど、公式サイトが「Amazon ECR レジストリ」って謳ってるのなんかウケる
概要
FargateにデプロイするにあたってAWSにコンテナをPushする必要がでてきたのでメモ
ちょうどタイムリーにPublic Registoryもリリースしてたしね
ゴールとしては docker push
してAWS ECRにpushできるようにしたい
やり方
まずはAWSのアカウントはあるものとする
まずはAWSのリージョンを決める。今回はap-northeast-1にしておく。あとはレポジトリ名も決めておく。粒度がいまいちわかってないけどコンテナ名1つにつき1レポジトリになるはず。(1レポジトリには異なるタグでしか複数登録できない)
リージョンとレポジトリ名は頻出するので環境変数にセットしておく
export AWS_REGION=ap-northeast-1 export AWS_REPOSITORY_NAME=sample
まずはレポジトリの作成
aws ecr create-repository --repository-name ${AWS_REPOSITORY_NAME} --region ${AWS_REGION}
作成したレポジトリを見てみる
aws ecr describe-repositories --region ${AWS_REGION}
以下のように表示されれば正常に作成されている
{ "repositories": [ { "repositoryArn": "arn:aws:ecr:ap-northeast-1:173603934556:repository/sample", "registryId": "xxxxxxxxxxxxxxxx", "repositoryName": "sample", "repositoryUri": "xxxxxxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/sample", "createdAt": "2020-12-29T23:37:55+09:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": false }, "encryptionConfiguration": { "encryptionType": "AES256" } } ] }
結果の registryId ってのが今後使うので、こいつも環境変数にセットしておく
export AWS_REGISTRY_ID=xxxxxxxxxxx
次にdocker pushできるようにdockerコマンドにAWSのログイン情報を紐付ける。
aws ecr get-login-password --region | docker login --username AWS --password-stdin ${AWS_REGISTRY_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com
aws ecr get-login-password --region
でログイン用のハッシュ?が生成されるのでそれを標準入力でdocker loginする形。
実際にpushしてみる
テスト用に簡単なDockerfileを用意する
FROM alpine CMD ["echo", "nyaa"]
でECRにpushできるようにタグを付けてビルド
docker build -t ${REGISTRY_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_REPOSITORY_NAME}:latest .
念の為動作確認
docker run --rm ${REGISTRY_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_REPOSITORY_NAME}
いざpush
docker push ${AWS_REGISTRY_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_REPOSITORY_NAME}
イメージの確認
aws ecr list-images --repository-name ${AWS_REPOSITORY_NAME} --region ${AWS_REGION}
うまくいけばこれでpushできるはず。やったね
参考リンク
NFSマウント時の最強オプション晒す
まあタイトルは嘘で、AWSとか大御書の推奨オプションをメモするだけ(
AWS
rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport
マウントに関する追加の考慮事項 - Amazon Elastic File Systemに記載されている。
- rsize=1048576 – 各ネットワーク読み取りリクエストに対して NFS クライアントが受信できるデータの最大バイト数を設定します。この値は、EFS ファイルシステム上のファイルからデータを読み取る際に適用されます。パフォーマンスが低下しないように、可能な限り大きいサイズ (最大 1048576) を使用することをお勧めします。
- wsize=1048576 – 各ネットワーク書き込みリクエストに対して NFS クライアントが送信できるデータの最大バイト数を設定します。この値は、EFS ファイルシステム上のファイルにデータを書き込む際に適用されます。パフォーマンスが低下しないように、可能な限り大きいサイズ (最大 1048576) を使用することをお勧めします。
- hard – NFS リクエストがタイムアウトした後の NFS クライアントのリカバリ動作を設定します。これにより、NFS リクエストは、サーバーが応答するまで無期限に再試行されます。データの整合性を確保できるように、ハードマウントオプション (hard) を使用することをお勧めします。soft マウントを使用している場合は、timeo パラメータを 150 デシ秒 (15 秒) 以上に設定してください。これにより、ソフトマウントに固有のデータ破損が生じるリスクを最小限に抑えることができます。
- timeo=600 – NFS クライアントがレスポンスを待機するのに要するタイムアウト値を設定してから、NFS リクエストを 600 デシ秒 (60 秒) に設定します。タイムアウトパラメータ (timeo) を変更する必要がある場合は、少なくとも 150 の値を使用することをお勧めします。これは 15 秒に相当します。これにより、パフォーマンスの低下を抑えることができます。
- retrans=2 – NFS クライアントでリカバリアクションを試行する前に、そのアクションのリクエスト試行回数を 2 回に設定します。
- noresvport – ネットワーク接続が再確立された時に、新しい Transmission Control Protocol (TCP) 送信元ポートを使用するように、NFS クライアントに指示します。これにより、ネットワーク復旧イベント後、EFS ファイルシステムでの中断のない可用性が保証されます。
- _netdev – /etc/fstab に存在する場合、クライアントは、ネットワークが有効になるまで、EFS ファイルシステムをマウントすることはできません。
Alibaba Cloud
vers=4.0,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport
Linux で NFS ファイルシステムをマウントする - ファイルシステムのマウント| Alibaba Cloud ドキュメントセンター
AWSとバージョンの指定有無しか違いなかった。もうこれで確定じゃん
Mac OSでフォーマットできないデバイスを初期化する
GUIでさっくりできるようにしろ令和だぞ
概要
Mac OSには標準で「ディスクユーティリティ」というディスク管理ツールがある。内蔵/外付けのディスクやUSBメモリをGUIでフォーマットできるアプリで、Windowsでいうディスクの管理にあたる。
が、LinuxのUSBインストーラー用に改造したUSBメモリとかだと正常に初期化できなかったりする。そこでコマンドツールで無理やり初期化する。
やり方
まずは diskutil list
でディスクの一覧表示。ここで初期化したい対象のディスクのパスを控えておく。今回は「/dev/disk2」
diskutil list /dev/disk1 (synthesized): #: TYPE NAME SIZE IDENTIFIER 0: APFS Container Scheme - +960.0 GB disk1 Physical Store disk0s2 1: APFS Volume MacOS 107.4 GB disk1s1 2: APFS Volume Preboot 23.1 MB disk1s2 3: APFS Volume Recovery 515.1 MB disk1s3 4: APFS Volume VM 4.3 GB disk1s4 /dev/disk2 (internal, physical): #: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *16.0 GB disk2 1: Windows_FAT_32 boot 268.4 MB disk2s1 2: Linux 15.7 GB disk2s2
いざ初期化。当然だがデータが全部飛ぶので注意。
diskutil eraseDisk free MYDISK /dev/disk2
Fat32形式でフォーマットする場合は以下
diskutil eraseDisk FAT32 MYDISK /dev/disk2
で、どの形式でフォーマットできるのか調べたいときは以下
diskutil listFilesystems Formattable file systems These file system personalities can be used for erasing and partitioning. When specifying a personality as a parameter to a verb, case is not considered. Certain common aliases (also case-insensitive) are listed below as well. ------------------------------------------------------------------------------- PERSONALITY USER VISIBLE NAME ------------------------------------------------------------------------------- APFS APFS (or) APFSI Case-sensitive APFS APFS (Case-sensitive) ExFAT ExFAT MS-DOS MS-DOS (FAT) MS-DOS FAT12 MS-DOS (FAT12) MS-DOS FAT16 MS-DOS (FAT16) MS-DOS FAT32 MS-DOS (FAT32) (or) FAT32 HFS+ Mac OS Extended Case-sensitive HFS+ Mac OS Extended (Case-sensitive) (or) HFSX Case-sensitive Journaled HFS+ Mac OS Extended (Case-sensitive, Journaled) (or) JHFSX Journaled HFS+ Mac OS Extended (Journaled) (or) JHFS+ Free Space 空き領域 (or) FREE
Chrome拡張機能で現在のタブのURLを取得する
環境
manifest v2
コード
chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, tabs => { const url = tabs[0].url alert(url) })
backgrond.jsとかpopup.jsとかで使える。
tabsって入ってるからパーミッションに「Tabs」必須かなと思ったけどURL取得だけならいらないっぽい