2021-2022の年末年始にやってみたチュートリアルのまとめ。
普段使っている技術の学び直し。
キーワード | やってみたチュートリアル | 感想 |
---|---|---|
git | たぶんもう怖くないgit〜git内部の仕組み〜 | gitを使うエンジニア必読 |
DynamoDB | Amazon DynamoDB Developer Guide | 本家のチュートリアル。GSIについて理解できた。 |
ECS,Fargate | Introduction to Amazon ECS | 本家のチュートリアル。マネコンから設定はよく分かった。 |
Docker | イラストでわかるDockerとKubernetes | CRIやOCIのことが書いてあって内部の理解に役立つ |
メモ
たぶんもう怖くないgit
gitの内部の仕組みがとてもわかりやすく説明してあった。gitを使うエンジニアは必読だと思う。
githubのプルリクを行うと内部的に何が行われているか、追加で調べてみた。
準備
ローカル、リモート共にmainブランチにはhello.txtが、b1ブランチにはbye.txtがcommitされている状態を作る。
githubにREADME.mdだけ存在するレポジトリを作る
リモートレポジトリをcloneする
git clone https://github.com/xxxxx/test0001.git
cd test0001
% find .git/objects -type f -print0 | xargs -0 ls -alt
-r--r--r-- 1 s staff 1156 1 2 19:22 .git/objects/pack/pack-32128797de6af3bfa53bb992f5255d8d528568de.idx
-r--r--r-- 1 s staff 605 1 2 19:22 .git/objects/pack/pack-32128797de6af3bfa53bb992f5255d8d528568de.pack
ローカルにb1ブランチを作成、b1.txtをcommitして、リモートにPUSH。
% git checkout -b b1
Switched to a new branch 'b1'
% echo b1 > b1.txt
% git add b1.txt
% git commit -m 'add b1.txt'
% find .git/objects -type f -print0 | xargs -0 ls -alt
-r--r--r-- 1 s staff 162 1 2 19:23 .git/objects/02/2988e6247703f5339613a7700e6986b6ad093e
-r--r--r-- 1 s staff 84 1 2 19:23 .git/objects/1a/81b069cc0395b22b23f02bec94f54d6983bf6f
-r--r--r-- 1 s staff 18 1 2 19:23 .git/objects/c9/c6af7f78bc47490dbf3e822cf2f3c24d4b9061
-r--r--r-- 1 s staff 1156 1 2 19:22 .git/objects/pack/pack-32128797de6af3bfa53bb992f5255d8d528568de.idx
-r--r--r-- 1 s staff 605 1 2 19:22 .git/objects/pack/pack-32128797de6af3bfa53bb992f5255d8d528568de.pack
% git push origin b1
ローカルのmainブランチに、main.txtをcommitして、リモートにPUSH。
% git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
% echo main > main.txt
% git add main.txt
% git commit -m 'add main.txt'
% find .git/objects -type f -print0 | xargs -0 ls -alt
-r--r--r-- 1 s staff 164 1 2 19:24 .git/objects/98/5359104355b21885eb536a27bb1e24ce737d5a
-r--r--r-- 1 s staff 86 1 2 19:24 .git/objects/13/b990074561f57492fd5b54ab6774f9394da3b5
-r--r--r-- 1 s staff 20 1 2 19:24 .git/objects/ba/2906d0666cf726c7eaadd2cd3db615dedfdf3a
-r--r--r-- 1 s staff 162 1 2 19:23 .git/objects/02/2988e6247703f5339613a7700e6986b6ad093e
-r--r--r-- 1 s staff 84 1 2 19:23 .git/objects/1a/81b069cc0395b22b23f02bec94f54d6983bf6f
-r--r--r-- 1 s staff 18 1 2 19:23 .git/objects/c9/c6af7f78bc47490dbf3e822cf2f3c24d4b9061
-r--r--r-- 1 s staff 1156 1 2 19:22 .git/objects/pack/pack-32128797de6af3bfa53bb992f5255d8d528568de.idx
-r--r--r-- 1 s staff 605 1 2 19:22 .git/objects/pack/pack-32128797de6af3bfa53bb992f5255d8d528568de.pack
% git push origin main
リモートからFetch。ローカルからPUSHしたものだけなので変化なし。
% git fetch
% find .git/objects -type f -print0 | xargs -0 ls -alt
-r--r--r-- 1 s staff 164 1 2 19:24 .git/objects/98/5359104355b21885eb536a27bb1e24ce737d5a
-r--r--r-- 1 s staff 86 1 2 19:24 .git/objects/13/b990074561f57492fd5b54ab6774f9394da3b5
-r--r--r-- 1 s staff 20 1 2 19:24 .git/objects/ba/2906d0666cf726c7eaadd2cd3db615dedfdf3a
-r--r--r-- 1 s staff 162 1 2 19:23 .git/objects/02/2988e6247703f5339613a7700e6986b6ad093e
-r--r--r-- 1 s staff 84 1 2 19:23 .git/objects/1a/81b069cc0395b22b23f02bec94f54d6983bf6f
-r--r--r-- 1 s staff 18 1 2 19:23 .git/objects/c9/c6af7f78bc47490dbf3e822cf2f3c24d4b9061
-r--r--r-- 1 s staff 1156 1 2 19:22 .git/objects/pack/pack-32128797de6af3bfa53bb992f5255d8d528568de.idx
-r--r--r-- 1 s staff 605 1 2 19:22 .git/objects/pack/pack-32128797de6af3bfa53bb992f5255d8d528568de.pack
プルリク
github上でb1 -> mainのプルリクエストを作成してマージ。
その後、リモートからFetchしてみる。
% git fetch
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 2 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (2/2), 721 bytes | 360.00 KiB/s, done.
From https://github.com/xxxxx/test0001
9853591..3075afa main -> origin/main
% find .git/objects -type f -print0 | xargs -0 ls -alt
-r--r--r-- 1 s staff 114 1 2 19:32 .git/objects/22/e851343c5dc64155ffec8d1bb9c2aad9006813
-r--r--r-- 1 s staff 607 1 2 19:32 .git/objects/30/75afa328960e169f789142caa90fb8b1a4fdbc
-r--r--r-- 1 s staff 164 1 2 19:24 .git/objects/98/5359104355b21885eb536a27bb1e24ce737d5a
-r--r--r-- 1 s staff 86 1 2 19:24 .git/objects/13/b990074561f57492fd5b54ab6774f9394da3b5
-r--r--r-- 1 s staff 20 1 2 19:24 .git/objects/ba/2906d0666cf726c7eaadd2cd3db615dedfdf3a
-r--r--r-- 1 s staff 162 1 2 19:23 .git/objects/02/2988e6247703f5339613a7700e6986b6ad093e
-r--r--r-- 1 s staff 84 1 2 19:23 .git/objects/1a/81b069cc0395b22b23f02bec94f54d6983bf6f
-r--r--r-- 1 s staff 18 1 2 19:23 .git/objects/c9/c6af7f78bc47490dbf3e822cf2f3c24d4b9061
-r--r--r-- 1 s staff 1156 1 2 19:22 .git/objects/pack/pack-32128797de6af3bfa53bb992f5255d8d528568de.idx
-r--r--r-- 1 s staff 605 1 2 19:22 .git/objects/pack/pack-32128797de6af3bfa53bb992f5255d8d528568de.pack
gitオブジェクトが二つ増えている。
github上でmainブランチとb1ブランチのmergeが行われたことによって生成されたもの。
ひとつはtreeオブジェクト。main.txtとb1.txtの両方が入ったtreeオブジェクトが新規作成されている。
もう一つはcommitオブジェクト。commiterはGitHubとなっている。親commitオブジェクトはマージ元とマージ先のcommitオブジェクトになっている。
これで、githubでのプルリクとマージで何が行われているかが分かった。
% git cat-file -p 22e8
100644 blob f696506eb0d12c05a75d076a4a4e47b8f9723baa README.md
100644 blob c9c6af7f78bc47490dbf3e822cf2f3c24d4b9061 b1.txt
100644 blob ba2906d0666cf726c7eaadd2cd3db615dedfdf3a main.txt
% git cat-file -p 3075
tree 22e851343c5dc64155ffec8d1bb9c2aad9006813
parent 985359104355b21885eb536a27bb1e24ce737d5a
parent 022988e6247703f5339613a7700e6986b6ad093e
author xxxxx <xxxxxx@gmail.com> 1641119532 +0900
committer GitHub <noreply@github.com> 1641119532 +0900
gpgsig -----BEGIN PGP SIGNATURE-----
...
-----END PGP SIGNATURE-----
Merge pull request #1 from xxxxx/b1
add b1.txt%
最後にfetchした内容をマージ。ここからはgithubは関係なく、ローカルのgitの動作。
merge前。まだmainブランチのheadはマージ前のcommitオブジェクトを指している。
% git branch
b1
* main
% cat .git/HEAD
ref: refs/heads/main
% cat .git/refs/heads/main
985359104355b21885eb536a27bb1e24ce737d5a
merge後。mainブランチのheadはfetchしたcommitオブジェクトを指すようになっている。
b1.txtファイルが追加されている。
% git merge
Updating 9853591..3075afa
Fast-forward
b1.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 b1.txt
% cat .git/HEAD
ref: refs/heads/main
% cat .git/refs/heads/main
3075afa328960e169f789142caa90fb8b1a4fdbc
Introduction to Amazon ECS
- Fargateではポートマッピングがホストと同じポートじゃないとできない(異なるポートでマッピングできるのはネットワークタイプがbridgeの時だけ。Fargateはbridgeに対応していない)
- Cloud9を使ってDockerイメージを作ってレジストリにPUSHするところを、ローカルのMacでやってみた
- Apple Siliconなので、dockerビルドするイメージはARM用。そこでdocker buildxを使ってクロスコンパイルしたものをECRにPUSHした。
- ARM版のイメージをPUSHして、gravitonで実行してみたかったが、マネコンからの設定では選択できなかった。なぜだ?
docker buildxの使い方は下記にメモ。