- 投稿日:2020-08-12T17:11:01+09:00
Lambda関数をCodeCommitで管理する
概要
Lambda関数のコードを、Gitでソース管理したい。
登場人物
AWSSDKで、ソースを外から突っ込む系は以下のコマンドでできるみたいです。
Lambda.createFunction
Lambda関数の属性値(メモリ・タイムアウト・説明・VPC設定などなど)と、ソースコード(zipにする必要がある)をまとめて送るとLambda関数が作成される。Lambda.updateFunctionCode
関数名を指定して、ソースコード(zip)を送ると、ソースコードのみが更新(総入れ替え)される。作ってみた
- とりあえず、ソースコードの入れ替えができれば良いので、createFunctionは使わずupdateFunctionCodeを使うことにする
- CodeCommit内レポジトリからソースコードを抽出して、zipでまとめてupdateFunctionCode を実行する感じで。
処理概要
Lambda関数で以下の処理を書きます
- 対象のLambda関数名を指定する
- CodeCommitレポジトリ内から関数名フォルダ以下のファイル一覧を取得CodeCommit.getFolder
- ファイル一覧でループして、ファイル内容を取得するCodeCommit.getFile
- zipに固める
- updateFunctionCodeを実行する
コード
下準備:zip圧縮を使うので、Layerを準備します。↓を参考に。
【Lambda】zipファイルの圧縮解凍サンプル【nodejs】宣言部var AWS = require('aws-sdk') var lambda = new AWS.Lambda(); var codecommit = new AWS.CodeCommit(); var node_zip = require('node-zip');CodeCommitリポジトリ中、指定フォルダからファイル一覧を取得する関数async function listFiles(Folder){ var pCCm = { folderPath: Folder, repositoryName: process.env.CodeCommitRepo // 環境変数にリポジトリ名 }; const ccF = await codecommit.getFolder(pCCm).promise(); let files = []; // ファイル取得 for(let i=0;i< ccF.files.length;i++){ // 先頭の関数名を除く files.push(ccF.files[i].absolutePath); } // サブフォルダ→再帰処理 for(let i=0;i< ccF.subFolders.length;i++){ let files2 = await listFiles(ccF.subFolders[i].absolutePath); files = files.concat(files2); } return files; }本体-ファイル一覧取得let lstFiles = await listFiles(event.FunctionName);zip変数へファイル名とファイル中身を設定するvar zip = new node_zip(); // zip変数 for(let i=0;i< lstFiles.length ;i++){ var pGet = { filePath: lstFiles[i], // ファイル名 repositoryName: process.env.CodeCommitRepo, // 環境変数でリポジトリ名指定 }; const cCgf = await codecommit.getFile(pGet).promise(); // ファイル名先頭の関数名を除いて、zip変数へ突っ込む(ファイル名とファイル中身) zip.file(lstFiles[i].slice(event.FunctionName.length + 1), cCgf.fileContent); }updateFunctionCodeを実行してLambda関数のソースを更新するlet zipContent = zip.generate({base64: false,compression:'DEFLATE'}); var pLmd= { FunctionName: event.FunctionName, ZipFile: Buffer.from(zipContent, 'binary') }; await lambda.updateFunctionCode(pLmd).promise();あとがき
意外と短いプログラムでできる様子。。
CLI+バッチのほうが簡単にできそう
- 投稿日:2020-08-12T16:40:30+09:00
remote repositoryのすべてのbranchをpullする(on Windows)
はじめに
仕事でgitのSaaSから、異なるgitのSaaSへ移行を行いました。
その際に、remote repositoryのすべてのbranchをpullする必要がありました。Mac上でやっている例はすぐに見つかるので、参考にさせて頂いてWindows(powershell)上で実現しました。
参考
以下のサイトを参考にさせて頂きました。ありがとうございます。
全ブランチをリモートリポジトリからpullする
Git のトラッキングブランチの確認と設定方法環境
- Windows 10
- git 2.28.0
- VS Code
- Powershell
手順
- リモートリポジトリからcloneする
- 全branchをpullするスクリプトを流す
- git remote addする
- 全branchをpushするスクリプトを流す
リモートリポジトリからcloneする
はい、リモートリポジトリからcloneしてください。
git_clonegit clone <old remote repository>リポジトリがたくさんある場合は、ここもスクリプトでやったほうがよさそうです。
全branchをpullするスクリプトを流す
pull_all$repos = @( "C:\...\repo1", "C:\...\repo2", "C:\...\repo3" ) foreach ($r in $repos) { Set-Location $r $branches = git branch -r foreach ($b in $branches) { $b = $b.Trim().Split(' ') $branch = $b[$b.length - 1] $local_branch = $branch.Replace('origin/', '') $remote_branch = $branch git branch $local_branch $remote_branch } git fetch --all git pull --all }リポジトリがたくさんある方は、$reposを編集してください。
進捗が気になる方は必要に応じてメッセージを挿入してください。git remote addする
この作業の前にremote repositoryを作っておいてください。
remote repositoryのURLがわからないと、remote addできません。cloneして、全branchをpullしたlocal repositoryにcdして、remote repositoryを設定します。
remote repositoryのURLがlocal repository名から判別できる場合、前述のスクリプトに組み込んだほうが間違いがないです。
私は移行元のSaaSが複数あったり、repository名の変更があったので手動で行いました。
ここを間違えると、repositoryの紐づけがくるってしまうので慎重に。git_remote_addgit remote add aws <new remote repository>例ではawsという名前のremote repositoryをaddしています。
この時は、AWS CodeCommit
にpushしました。皆さんの状況に合わせてわかりやすい名前にしてください。
repositoryの紐づけがわからなくなってしまうので、originを上書きしちゃダメ絶対です。全branchをpushするスクリプトを流す
ここまで来たら、pushするだけです。
pull_all$repos = @( "C:\...\repo1", "C:\...\repo2", "C:\...\repo3" ) foreach ($r in $repos) { Set-Location $r $branches = git branch foreach ($b in $branches) { $b = $b.Trim().Split(' ') $branch = $b[$b.length - 1] git push aws $branch } }remote repositoryの名前を
aws
から変更した方は、下から3行目のaws
を適宜変更してください。まとめ
branchが50個ぐらいあると、手動移行だと殉職するなーと思いましたが、殉職せずに楽しく移行することが出来ました。
- 投稿日:2020-08-12T12:35:40+09:00
GitHubに100MB超えのファイルをプッシュしてエラーになった
Railsアプリを開発中に、GitHubにプッシュできなくなりました。
GitHubに100MB制限があることを知らず、少し苦戦しましたので備忘録として。エラー
いつもどおり、
git add
git comit
git push
と進めるとエラーが出ました。
development.logが100MBを超えてますよ、ということです。・・・ remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com. remote: error: Trace: 13ec04b062a0cd9bb1a20e6a0b921ec7cf7396c0 remote: error: See http://git.io/iEPt8g for more information. remote: error: File log/development.log is 150.13 MB; this exceeds GitHub's file size limit of 100.00 MB ・・・100MB超ファイルをアップする方法もあるようですが、今回はLogファイルだったので削除する方針で進めます。
100MB超ファイルをプッシュする方法(参考)
https://qiita.com/kanaya/items/ad52f25da32cb5aa19e6解決手順
- 巨大ファイルのコミットを取り消す
- 巨大ファイルを削除(Gitから除外)
- 再度コミット
- 再度プッシュ
1.巨大ファイルのコミットを取り消す
直前のコミットであればこれで取り消せます。
$ git reset --hard HEAD直前ではないときは、該当するリビジョンを調べてその1個前まで戻ります。
$ git log コミット履歴がズラッと出るので、該当リビジョンを確認 commit 13ec04b062a0cd9bb1a20e6a0b921ec7cf7396c0 ↑これが該当リビジョンの1個前$ git reset --soft 13ec04b062a0cd9bb1a20e6a0b921ec7cf7396c0これで巨大ファイルのコミットの前に戻りました。
2.巨大ファイルを削除(Gitから除外)
単純に巨大ファイルを削除(中身を空に)してもよいのですが、Railsの仕様上いずれまた100MBを超えることになるのでGitから除外します。
.gitignoreでGitから除外する
.gitignoreに除外ファイルを追加します。
.gitignore/log/development.log.gitignore 書き方(参考)
https://qiita.com/inabe49/items/16ee3d9d1ce68daa9fff最初から除外したほうが楽
このツールで、各言語に最適化された.gitignoreがゲットできます。
https://www.toptal.com/developers/gitignore3.再度コミット
あとはいつもどおりと言いたいところですが、ちゃんと除外されているか確認しましょう。
自分はここで何度もやり直しました。除外してもコミットされてしまうときは
Gitのキャッシュが残っている場合は、こちらを参考にキャッシュを削除してください。
(ちなみにVS CODEだと、除外ファイルはグレーアウトされます。)
https://qiita.com/fuwamaki/items/3ed021163e50beab71544.再度プッシュ
最後にプッシュすればコンプリートです!
- 投稿日:2020-08-12T01:01:43+09:00
VScode環境構築(Windows10、Python、C++、C、Git)
概要
この記事は
- 新しいPCを手に入れて改めて環境構築したので、その備忘録
- VScodeで Python, C++, C などを扱う方へのヒントになればいいな
という気持ちで書きました。
この記事を読むと
- VScodeが使えるようになる!
- Pythonが使えるようになる!
- C++, Cが使えるようになる!
という感じの内容になっていて、具体的には
- VScodeのインストール
- Anacondaのインストール
- Pythonの仮想環境の設定等
- C++, Cを実行するためのコンパイラのインストール
- 各種拡張機能のインストール
- 私のVScodeの設定
という感じになっています。
……とはいっても、実際にはほとんどが記事紹介という感じなので、先駆者様には感謝感謝です。VScodeのインストール
ということで、まずはVScodeをインストールしましょう。
VScodeはコードを書くやつですね(雑)。……こんな感じですらすら進んでいきます。
Python環境構築
続いて、Pythonの環境構築です。
Pythonは今いろいろと注目されていて、機械学習なんかでもよく使われている言語ですね。まずはAnacondaを入れます。蛇縛りなんですかね。
Anacondaは、これ一つで全部入ってるよ!みたいなやつで、Jupyter lab とかとっても便利なので、今回は紹介しませんがぜひ使ってみてください。Python環境構築(Anaconda + VSCode) @ Windows10 【2020年1月版】
仮想環境についてちょっとだけ。
Pythonって3.7とか3.8とか、いろいろバージョンがあったり、便利なライブラリ(道具箱みたいないイメージ)がいっぱいあったりして、例えばプロジェクトとか毎に設定を変えたいなぁと思うことが結構あるのです。
なので、仮想な環境を作って、その中でバージョン等々を管理していくわけです。
最初の「一人で勉強」段階ではそんなに仮想環境意識しなくても大丈夫ですけど、まぁやっぱり使えるといいなとは思います。ということで、上の記事ではその辺のこともちょっと詳しく載っているのであげました。
仮想環境構築はAnacondaのGUI上でも(つまりコマンドポチポじゃなくても)一応できます。Anacondaでの仮想環境づくりは
conda
というコマンドを使って行うのですが、 上記URLにある以外で基本的なコマンドは以下が参考になります。C++, C の環境構築
こちらは、2つの方法をご紹介します。
実は、前半の方法でやって一部うまくいかなかったので、後半の方法もやった……という感じなので、もしかしたら初めての方は後半の方法のほうがいいかもしれません。ではまずは1つ目の記事です。
Visual Studio Codeで競プロ環境構築(導入編)
とっても「いいね」がたくさんついている記事なので、失敗したのは私のせいだと思います。
あとで、失敗した部分についても話します。こちらの方法はWindowsというOSの上に「Ubuntu」というOSをのっけて、その中でC やC++をコンパイル(実行できる状態にすること)する方法です。
上の記事曰く、2つ目で紹介するやつには変なバグがあったりするみたいで、どっちかというと上のやり方のほうが良さそうなのか?という印象でした。では2つ目の記事の紹介です。
VSCode + MinGW-64 で C++ のコードをビルド&デバッグするまで
こちらの方法はMinGWという「Windows でもフリーで使える C++ コンパイラ」(引用)をインストールして使おうという方法です。
私は結局上記2つどっちも行ったのですが、そんな状況だからか、はたまたPythonも使えるようにしたからか、ちょっとはまった部分がいくつかあったので、次の節はそのはまりポイントについて話そうと思います。
VScode × Python × C++ ではまったこと
シェルが複数
シェルとは……についてはこちらがわかりやすいです。
VScodeでターミナルを開いて、「既定のシェルの選択」というところで使えるシェルの確認ができるのですが、ここまでをすべて実行していると
- Command Prompt (Pythonが実行できる)
- Windows PowerShell (デフォルトである)
- WSL Bash (C, C++などの実行やUnixコマンドが使える)
の3つが選択できるようになっていると思います。
例えばWSL BashではPythonの実行はできない(多分)ので、最初は「あれ、さっき設定したのにPython使えなくなっている!」と混乱するかもしれません。
言語ごとにシェルを切り替えれば問題なく使えるので安心してください。便利なC, C++の拡張機能が使えない!?
はい、これが先ほどの2の記事の前半で私がつまづいたところです。
具体的にはこんな事象にあいました。2つ目の記事の2-3で説明している、コードの間違いなどを指摘してくれる便利な拡張機能である「C/C++」をインストールしたのですが、
#include <stdio.h>などのインクルード文で「include path が正しくないよ!」みたいなエラーをはかれてしまいました。
まぁ詳しい話は割愛しますが、この問題を自力で解決できなかったので、2つ目の方法に変更した……という感じです。Gitのインストール
私のつまずきポイントについてはだいたいこんな感じですが、気を取り直して次はGitのインストールです。
Gitは、コードを管理したり、共有したりするやつです。便利です。あと、インストールしただけではいろいろと不都合があるので、初期設定もしたほうが良いと思います。
それはこちらが参考になります。「Gitの初期設定」の部分は名前とメールアドレスだけで十分だと思います。
こうすれば、VScodeのGUI上でいろいろな操作ができるようになります。ちなみに、Gitをインストールすると、またシェルが増えて今度は「Git Bash」が使えるようになります。
このGit Bash上で「Gitの初期設定」をするわけですが、ここでの設定内容は、場合によっては他のシェルに反映されません。
GUIはGit Bashで行った設定が反映されるのですが、ほかのシェルを使ったGitの操作を行うときは注意しましょう。この話は初めての方にはちんぷんかんぷんだと思いますが、設定でつまづいたときには、以下の記事が参考になるかもしれません。
Gitのコマンドについては、以前まとめを少し書いたので、ついでにのっけておきます。(露骨な宣伝)
上の記事の参考URLを見れば一通りGitについては学べると思うので、まだ使ったことがない方がいたらぜひ見てみてください。
各種拡張機能
ということでここからは拡張機能やVScodeの設定についてです。
とはいっても、基本的な部分ばかりで恐縮ですが……。拡張機能の追加方法については、上記の環境設定の中でも書いてあったので、割愛します(割愛してばっか)。
C/C++
これは私のつまづきポイントのところでもちょっと紹介しましたね。
C/C++で書いたコードの間違いなんかを指摘してくれるので、とっても便利なやつです。Code Spell Checker
例えば「haloo」とかって書いたら「おいおい、そんな英語はないぜ?」と注意してくれます。
一つの誤字でプログラムは動かなくなてしまうので、結構役に立ちます。Git History
Gitのログなどを、とっても見やすく表示してくれます。
Japanese Language Pack for Visual Studio Code
VScodeを日本語にしてくれます。
Python
Pythonを使うなら欠かせない拡張機能です。コードの間違いを発見してくれたり、いろいろしてくれます。
Pylance
上のPythonではできない、かゆいところに手が届くようなことをやってくれます。詳しくは以下の記事をどうぞ。
[Python]PylanceのVS Code拡張機能をさっそく使ってみた。
zenkaku
プログラマーの敵、全角を発見してくれます。全角のせいで動かない……ということは、誰しもが一度は通ることのような気がします。
VScodeの各種設定
最後に私がしている設定についてご紹介します。
Editor: Insert Spaces
私はTabを押すとTabが挿入されるようにしています(デフォルトは空白が4つ入る)。好みの問題です。
Editor: Render Whitespace
空白文字が表示されるようになります。私はboundaryにしています。
これで、タブなのかとかもわかりますし、変なところに空白がないかもわかります。Editor: Word Wrap
横に長いコードを折り返して表示するかを設定できます。私はonにしています。好みの問題です。
Files: Auto Save
オートセーブをするかどうかを設定できます。私はafterdelayにしています。
オートセーブのメリットはもちろんセーブのし忘れや突然PCが落ちたときの対策ですが、デメリットとして編集を戻せなくなることがあることは覚えておかなければなりません。これも好みの問題です。Files: Eol
既定の改行文字を変更できます。
実は改行文字は環境によって違うことがあるのですが、そういうのは怖いので、\nにしています。最後に
ということで、あくまで備忘録という感じですが、誰かの役に立ったらうれしいと思います。
また、もっと良い方法があったりしたら、教えていただけたら嬉しいです(特に、私のつまづきポイントについて)。