TerraformでCloud Storageのバケット名を変更する際の罠

最近よくデータ基盤構築の仕事をしているため、TerraformでGCPをいじったりしています。今回はCloud Storageのバケット名を変更する際に罠にはまりやすいところを紹介します。もちろん、Cloud Storageだけでなく、他のサービスやAWSなどにも活用できそうな箇所があるではないかと思います。 環境 Terraform v1.1.2 on darwin_arm64 provider registry.terraform.io/hashicorp/google v4.15.0 他の環境は正しく動作するかは未検証です。 経緯 下記のバケットを作って検証環境に反映した後、PRを出しました。 resource "google_storage_bucket" "my_bucket" { name = "my-bucket" storage_class = var.gcs_storage_class.coldline project = var.project_id location = var.gcs_location force_destroy = false uniform_bucket_level_access = true retention_policy { is_locked = true retention_period = 30 } lifecycle_rule { condition { age = 30 } action { type = "Delete" } } } チームメンバーのレビュー受けて、バケット名はmy-bucketよりmy-bucket-hogeの方が良いと言われたので、my-bucketをmy-bucket-hoge変更しterraform applyしたらエラーになりました。もちろんのことですが、最初はforce_destroy = falseに設定していて、バケット内オブジェクトが入っているので、強制変更はできません。 force_destroy - (Optional, Default: false) When deleting a bucket, this boolean option will delete all contained objects....

May 27, 2022 · Me

ワードクラウドを自作ニュースアプリに追加してみた

はじめに この間Node.jsで多言語Webニュースアプリ作ってみました https://www.multitrue.news ニュースのタイトルと概要だけではつまらないので、単語の出現頻度によって直近一週間のニュースからワードクラウド作って、一目で世の中の出来事を確認できたら面白そうじゃないかと思いながら、ワードクラウドをニュースアプリに追加してみました。 詳細 ソースはこちらから確認できます。 https://github.com/aibazhang/multitrue 下準備 日本語と中国語などは英語と異なり、単語と単語の間スペースがないので、形態素解析が必要です。簡略化するために、今回は英語のワードクラウドのみを作ることにしました。人称代名詞や助動詞のようなStop Wordsをワードクラウドに出しても意味がないので、NLTKの英語Stop Words辞書を利用します。 https://gist.github.com/sebleier/554280 また、単語の出現頻度を集計するヘルプ関数を作成します。いい感じライブラリもありますが、できるだけdependencyを減らしたいので、自分で実装することにしました。ただ、全ての単語を最終的に大文字に変換します。 src/utils/countWordsFrequency.js const stopwords = require('./stopwords-en.json'); // English stopwords via https://gist.github.com/sebleier/554280 const countWordsFrequency = (sentences) => { const result = {}; // remove punctuation and split by space const terms = sentences.toLowerCase().match(/[a-zA-Z]+/g); terms.forEach((e) => { if (!stopwords.stopwords.includes(e)) { const name = e.toUpperCase(); if (result[name]) { result[name] += 1; } else { result[name] = 1; } } }); return Object....

May 14, 2022 · Me

Herokuにデプロイする際のTips

2022年11月28日をもってHerokuフリープランが終了しました https://blog.heroku.com/new-low-cost-plans 個人開発する際にコスト面と手軽さを考えるとAWSにデプロイするのはあまりふさわしくないでしょう。Herokuだともっと手軽くデプロイできるし無料枠もあるので、個人で開発したおもちゃをデプロイするのはちょうどいい感じだと思います。この間筆者が開発した多言語WebニュースアプリもHerokuにデプロイしています。 本記事では、Herokuにデプロイする際のTipsをいくつかを紹介したいと思います。少しでもお役に立てれば幸いです。 Tip 1: GitHub Actionsで自動デプロイ https://devcenter.heroku.com/articles/git コマンドラインでいちいち打つのは面倒くさいので、自動デプロイしたほうが断然便利ですね。もちろんHerokuのGUIからも自動デプロイできますが、せっかくソースコードもGitHubで管理しているので、GitHub Actions を使ったほう便利だと思います。 heroku-deployというアクションを利用すると、Herokuのメールアドレスとheroku_api_keyさえわかれば、GitHub Actionsから自動デプロイできます。ちなみに、heroku_api_keyはこちらから取得できます。 GitHub Actionsの設定についてですが、他の記事を見たかぎりon: [push, pull_request]に設定している方もいました。本番にデプロイするという意味合いもあるので、個人的にはrelease(リリース作成するたびに、パイプラインが発火される)に設定したほうがいいではないかと思います。ミスってpushしちゃったのも防げます。 on: release: types: published name: Deploy to PROD jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: akhileshns/heroku-deploy@v3.12.12 with: heroku_api_key: ${{secrets.HEROKU_API_KEY}} heroku_app_name: 'your_app_name' heroku_email: ${{secrets.HEROKU_EMAIL}} Tip 2: 無料枠を使いこなす 現時点(2022年5月)Herokuのプランはこうなっています。 https://devcenter.heroku.com/articles/free-dyno-hours Personal accounts are given a base of 550 free dyno hours each month. In addition to these base hours, accounts which verify with a credit card will receive an additional 450 hours added to the monthly free dyno quota....

May 4, 2022 · Me

Creating a Personal Knowledge Management Tool with Just a 15-Line Shell Script

Introduction When reading books or articles, you may want to systematically manage the notes you’ve written. Currently, there are many excellent knowledge management tools available. Confluence Notion HackMD Boost Note There are countless tools when you also include mind mapping tools. I am a minimalist and has the following preferences: Manage personal notes like code on Github View notes in a mind map format from the web Use a free tool instead of a subscription-based service Thererfore, I came up with the idea of creating a custom personal knowledge management tool....

May 3, 2022 · 5 min · 950 words · Me

M1 Mac (macOS Monterey 12.2.1)でpyenv/Python開発環境構築

はじめに 先日M1のMBPを入手したので、早速Pythonの開発環境を構築しました。 Intel Macと比べて大きく違うので、昔メモったIntel Macの環境構築手順が使えなくなり、新しく環境構築の記事を書こうと思いました。 少しでもお役に立てれば幸いです。 この記事では Homebrewは使わないで!(動くけど難易度高い) pyenvは使わないで!(動かない=2021年2月時点) と記述していましたが、おそらく2021年2月時点ではHomebrewやpyenvなどはまだM1 Macに対応していない(?)と考えられます。現在(2022年4月)では、少し設定は必要ですが、問題なく動作できるようになりました。 Homebrew まずはHomebrewをインストールします /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh) M1 MacではHomebrewによってインストールされたパッケージは/usr/local/bin/hogeではなく、/opt/homebrew/bin/hoge保存されるので、brewをインストールした後は環境変数を設定する必要があります。 以下を.bashrcか.zshrcに追加して、ターミナルを再起動すると、brew installは問題なく動作します。 export PATH=/opt/homebrew/bin:$PATH export PATH=/opt/homebrew/sbin:$PATH fishユーザはこれを実行してください。 set PATH /opt/homebrew/bin /opt/homebrew/sbin $PATH pyenv pyenvとvirtualenvをインストールします brew install pyenv brew install pyenv-virtualenv ここまでは問題ないはずです。 続いてバージョンしてPythonをインストールします。 たとえば Python 3.8.12 pyenv install 3.8.12 しかし、うまくいきません pyenv install 3.8.12 python-build: use openssl@1.1 from homebrew python-build: use readline from homebrew Installing Python-3.8.12... python-build: use readline from homebrew python-build: use zlib from xcode sdk BUILD FAILED (OS X 12....

April 22, 2022 · Me

Web開発ど素人がNode.jsで多言語Webニュースアプリ作ってみた

目的 筆者自身はトリリンガル(自称)のため、簡単に日本語、英語、中国語などの複数の言語のホットニュースを読めるサービスががあると便利だなとずっと思っていました。「Google Newsで良くない?」って言われそうなところですが、Google Newsはやや使いづらいと感じました。 例えば、 言語を切り替えるのに「言語地域→候補から選ぶ→更新」3回クリックする必要がある 本当にヘッドライトしか閲覧したくないのに、「おすすめ」や「ピックアップ」などがうるさい モバイルのweb版が見づらい・アプリをダウンロードしたくない 芸能ニュースにまったく興味がないため、ニュースの表示をカスタマイズしたい また、やってみないと(何かを残さないと)学んだ技術をすぐ忘れるのはもったいないのも考えて、多言語ニュースWebアプリを自作するという発想に至りました。 使った技術 バックエンド NodeJS Express フロントエンド インタラクションがほぼないため、フレームワークは使っておらず、DOMをいじっただけ CSSはStart Bootstrapの無料テンプレートを使用 DB MongoDB インフラ Heroku コスト 毎月7ドルだけです!!(Heroku Hobbyの料金) 成果物 https://www.multitrue.news https://github.com/aibazhang/multitrue それでは、詳細を解説していきます。 下準備 ニュースはどこから収集するか 最初はニュース収集するかについてけっこう時間を費やしました。ニュース関連のAPIがかなり多いですが、 ある程度の無料枠がある 多言語のニュースが簡単に取れる 使いやすさ 3つの観点から考えて、NewsAPIとNews dataの2つのAPIに絞りました。ただ、後々News dataは言語を指定しても他の言語のニュースが混ざっていることがあると気づいたので(例えば、言語を日本語と指定したにも関わらず、日本関連の英語ニュースが出てくる)、NewsAPI一択となりました。ちなみに、こちらの記事はNewAPIについて詳しく説明しています。また、RSSなど他の人が作ったニュースAPIを使わないという方法もあるようですが、今回は試していなかったです。 データベース ニュース情報を収集するAPIを見つけましたが、ユーザがリクエストを投げるたびに、NewsAPIに叩くのは明らかに現実ではないので、ニュースを保存するDBが必要です。データ量が少ないかつ永久無料枠がベストなので、MongoDB@Atlasを選びました。AWSとかにいい感じにデポロイしてくれるし、便利です。(無料枠の上限は500MB)また、テーブルはせいぜい1つ、2つくらい、リレーションも特にないはずなので、RDBを使う必要もありませんでした。 フロントエンド CSSから実装するはだるいので、Start BootstrapにあるClean blogを使わせてもらいました。(感謝) 詳細 システム構成はこんな感じです。図を見ていただくとわかると思いますが、特にややこしいことをやっていないです。 定期的にNewsAPIからデータと取って、Mongodbに入れます ユーザからのリクエストが来る度に、バックエンドでhtml(正確にいうとpug)を作って、レスポンスを返します。いわゆるSSR(Server Side Rendering)ですね。 コスト面とシンプルさを考えているため、デポロイはHerokuというクラウドプラットフォームサービスを利用しています NewsAPIからMongodb データの定期取得ために、Node.jsのスクリプトを書きました。 NewsAPIの無料枠は100req/dayそして複数の言語のニュースを取得したいといった制約があるので、cronを使って一日の取得回数を制限しています。data-import-config.jsonはルートの下にあるデータをインポートする際のconfigファイルです。 ソース const dotenv = require('dotenv'); const NewsAPI = require('newsapi'); const Cron = require('croner'); const dataImportConfig = require('....

April 18, 2022 · Me

@xinshu9211 原文地址 写的挺好的 还是每个人情况不一样 1没看我以前的在留卡 2是源泉只要了1年 只有纳税1.2是3年的 住所5年的 其他的我全提供的是1年的 看了你写的 发现情况还真不一样 啥也没问我 補充: 再多说下 第一次面谈 :估计交流顺畅 没有日语测试 因为我第4年就开始预约面谈了 第2次去面谈的时候资料都快准备齐全了 担当第一次就告诉我要准备什么资料了 第2次 申述书没要邮寄的信封 估计疫情结束了 面试没问为啥要入籍 问了健康情况 有意思呢

J.C.

網友DW 我当初是满足条件后去预约的,只面谈了一次。我说我平常工作忙,你就把需要的材料list给我,我全准备齐全之后,下次就提交申请。第二次去法务局就交了申请了。 關於改名 日本有个戸籍法,里面规定了可以用在名字上的汉字只有2136个常用汉字,如果中国人的原本的名字的汉字不包含在其中,就必须改名,改汉字或者换个完全新的合法的名字都可以。当然即使原名汉字合法,也可以改名。其实归化之后是很宝贵的一次改名换姓的机会 名字可以用常用汉字、平假名和片假名。户籍上是不登录英文字母的。但护照上只有英文字母,比如像你这种情况,可以在户籍上用和英文相近读音的片假名,在护照上用英文名。不过正式身份证件,除了护照之外是没有写英文名的。

J.C.