blogシタテルの技術やエンジニアの取り組みを紹介するテックブログです。投稿を表示しています。投稿を表示しています。2019こんにちは、DevOpsチームの甲斐です。Functions(以下、GCF)で画像を自動リサイズする手順を紹介したいと思います。GCFとはAWSでいうところのLambdaです。いわゆる、サーバーレスってやつですね。最近はGCPを触ることが多いのですが、先日GCP上のWordPressのアップロード画像をリサイズするために、GCFを使って自動的に画像をリサイズするようにしました。AWSのLambdaも触ったことありますが、GCFのほうが手間が軽い印象を持ちました。GCFをお使いになったことがない方は、ぜひご参考にしていただければと思います。前準備GCFを使う上で必要な環境は以下のとおりです。SDKのインストール詳細は、以下に書かれていますので、こちらをご参照ください。今回の仕様は以下のとおりです。Storage(以下、GCS)の当該バケットのuploadsディレクトリにアップロードされた画像を自動的にリサイズリサイズする画像フォーマットはimage/jpegのみオリジナル画像は".orig"拡張子をつけてバックアップリサイズされた画像はオリジナルの画像と同じ名前で上書き実装それでは、早速実装の手順を紹介していきたいと思います。Go(beta)が使えます。必要なパッケージをインストール今回は、@google-cloud/storage(GCS関連パッケージ)とgm(画像編集パッケージ)をインストールします。コーディングコードは以下のとおりです。最初に少しハマったところとしては、リサイズした画像でオリジナル画像を上書きすると再びイベントが発火されるので無限ループに陥ってしまったことです。対策としてメタデータにコンバート済みである旨を記述し、処理の最初にメタデータをチェックすることで判断するようにしました。デプロイデプロイは以下のようにします。今回の場合、runtimeはnodejs8になります。メモリやタイムアウトもオプションで設定できます。<timeout>]デプロイが完了したら、以下のコマンドで正常に登録されたことを確認します。テストサンプル画像を当該バケットにアップロードし、正常にリサイズされることを確認します。MiB)まとめ簡単ですが、GCFで画像をリサイズする実装手順を紹介しました。Pub/SubやHTTPリクエストをトリガーにすることも出来ます。GCFの詳細については本家ドキュメントをご参照ください。https://cloud.google.com/functions/docs/?hl=enまた、以下のGitリポジトリにGCFのサンプルプログラムがありますので参考にしてみてください。2018こんにちは、シタテルの鶴巻です。devops&インフラ担当です。シタテルのプロダクトのリリース作業を少し楽にするために、Slack+Lambda+Golangを用いて開発した話をします。リリースの流れシタテルでは、GitフローやGitHubフローを採用しています。本番環境へのデプロイは、以下の流れで実施しています。本番環境にデプロイちなみに、1.でreleaseブランチを作成すると、CircleCIによって2.のステージング環境へのデプロイは自動で行われます。地味に面倒なリリース作業ステージング環境へのデプロイは自動化されているとはいえ、小さな手作業が合間に発生し、地味に面倒でした。具体的には以下のような作業です。手作業はSlackからコマンドを叩くだけにしましたSlackから以下のコマンドを叩くだけで、地味に面倒くさかった作業を自動で行うようにしました。branch>実際には、以下の内容を実施するGolangプログラムをLambdaで実行しています。GitHubSlackからコマンドを叩くと、Lambda01にリクエストを送信します。Lambda01は、Lambda02に対象レポジトリとブランチ名を付与してリクエストを送信します。Lambda02で作業を実行します。Lambdaを2つ使用している理由Slackはリクエスト送信後3秒でタイムアウトするためです。実行したいプログラムは3秒以上かかるため、実際の作業は非同期で実施する必要がありました。そのため、Lambda01はLambda02に処理を投げて、Slackに200を返し、実際の処理はLambda02で実施します。Lambda01はLambda02を非同期実行で呼び出すので、リクエストをキューに入れた後は、Lambda01は関数を終了することができます。Lambdaの呼び出しタイプ(同期・非同期)Lambdaは、呼び出しタイプ(InvocationType)を指定することで、同期実行や非同期実行を選択することができます。例:InvocationTypeで"Event"を指定することで、非同期実行でLambdaを呼び出せます。https://github.com/google/go-githubgoogle製プルリク作成やリリースタグ作成に使用その他ハマったポイントAPIGatewayの統合リクエストのマッピングテンプレートを使いこなせず。デバッグのやり方もわからず、使うのを諦めました。まとめ少しの手間が自動化されるだけで、すごく楽になります。これからももっとやっていきたいです。GitHub操作のライブラリはとても便利でした。vue.jsが主ですが、自分の好きなGo言語を使えたので楽しかったです。usシタテルのミッションはテクノロジーとイマジネーションで「ひと」と「衣服」の新しい未来をつくること。クラウドシステムを使うように服作りのリソースを誰でも好きなときに好きだだけ使えるプラットフォームを目指しています。(1)どうも朝野です。Storage移行記:バリデーション編こんにちはあさのです。Storageに移行したときの話を書こうと思います。Paperclipはファイルアップロード用のGemです。https://...SQLite3でWindow関数を試してみた!はじめまして、DevOpsチームの甲斐です。何かブログのネタはないかなーと思っていたところ、たまたま以下のニュースを発見しました。ECSに自動デプロイする(おまけで環境面の切り替えも)こんにちは、シタテルの茨木です。ECR/ECSにデプロイする為の設定例を紹介します。Nuxt.jsアプリ用に作ったものですが、言語やAPサーバが違っても共通の部分がほとんどです。