🐈‍⬛

神記事をお手本にCDKでのGitSyncに挑戦してみる

2024/01/24に公開

GitSync、CDKでも役に立つのか気になり

調べ始めましたが、着手程なくしてmazyu36さんという方が書かれた↓記事に出会ってしまった為、私自身で試行錯誤する部分は少し残念ですが少なくなってしまいました。

https://mazyu36.hatenablog.com/entry/2023/11/29/204527
https://mazyu36.hatenablog.com/entry/2023/12/05/000000

本当に素晴らしい記事を有難うございます。自身の理解の為に手を動かした備忘録でここから先を残しておりますが、皆様是非上記ブログをご覧ください。

全く同じ事をなぞるもあれなので、Github CLIを使ってみる事+本家であえて割愛されていそうな表示があればスクショしながら進めるべしと意気込みつつ挑戦していきたいと思います。


開始

Github CLIをインストール

未installの場合はGithub CLIをインストールする以下コマンドを実行。

$ brew install gh

GitHubへのAuth Login

$ gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations on this host? HTTPS
? Authenticate Git with your GitHub credentials? Yes
? How would you like to authenticate GitHub CLI? Login with a web browser

! First copy your one-time code: XXXX-XXXX
Press Enter to open github.com in your browser...
✓ Authentication complete.
- gh config set -h github.com git_protocol https
✓ Configured git protocol
✓ Logged in as hogehoge0123

🔻
途中に表示のあった「one-time code」をCopy & Paste=>「Continue」を押下します。

🔻

🔻
無事接続されたようです。


Repositoryを作成+Clone

次に、任意の場所でrepositoryを作成するコマンドを実行。

$ gh repo create
? What would you like to do? Create a new repository on GitHub from scratch
? Repository name gitSyncPrac
? Description
? Visibility Private
? Would you like to add a README file? No
? Would you like to add a .gitignore? No
? Would you like to add a license? No
? This will create "gitSyncPrac" as a private repository on GitHub. Continue? Yes
Y✓ Created repository hogehoge0123/gitSyncPrac on GitHub
? Clone the new repository locally? Yes

🔻
無事作成されました。


cdk init

先ほどの「Clone the new repository locally? Yes」で「gitSyncPrac」というフォルダが作成されていますので、中に移動してcdk initを実行します。

$ cd gitSyncPrac && cdk init sample-app --language typescript

Metadata出力を停止しておく

必須ではないかもしれませんが、後で行うSynth時不要なMetadataが出力されないようにしておきます。

cdk.jsonに以下を追加。

cdk.json
  "versionReporting": false,
  "pathMetadata": false,

🔻
bin/git_sync_prac.tsを以下に書き換え。

bin/git_sync_prac.ts
#!/usr/bin/env node
import * as cdk from 'aws-cdk-lib';
import { GitSyncPracStack } from '../lib/git_sync_prac-stack';
import { DefaultStackSynthesizer } from 'aws-cdk-lib';

const app = new cdk.App();
new GitSyncPracStack(app, 'GitSyncPracStack', {
    synthesizer: new DefaultStackSynthesizer({
        generateBootstrapVersionRule: false,
    }),
});

lib>git_sync_prac-stack.tsを書き換える

lib>git_sync_prac-stack.ts
import { Duration, Stack, StackProps } from 'aws-cdk-lib';
import * as sqs from 'aws-cdk-lib/aws-sqs';
import { Construct } from 'constructs';

export class GitSyncPracStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    new sqs.Queue(this, 'GitSyncPracQueue', {
      visibilityTimeout: Duration.seconds(300)
    });
    
  }
}

デプロイファイル & テンプレートファイル作成

「hoge」というDirを作成し、中に空の「deploy.yaml」「template.yaml」を作成します。

$ mkdir hoge && touch hoge/{deploy.yaml,template.yaml}

push

この状態でadd~pushまでします。

$ git add . && git commit -m "first commit" && git branch -M main && git push -u origin main

CFnスタック作成(途中GitHubとの接続作成)

反映確認後、CFnコンソールに移動してスタックを作成。
黄枠部分を選択・入力して進めます。





接続を作成します。




🔻
元の画面に戻りそれぞれを以下のように選択します。

🔻

今回ここはテストの為、Admin権限付与で作成したロールを選択しています。



🔻
Stackが「CREATE COMPLETE」になりました。


中身を確認

写真には収め忘れましたが、この時点では「GitSyncSetupWaitCondition」という名前でWaitConditonのみがリソースとして作成されていました。

作成完了時点で最初から「Git と同期 - 新規」というタブが選択されており、↓画像のような表示となっています。
「最新の動機イベント」ブロックでは「CHECK_FOR_SYNC_BLOCKERS_FAILED」というエラーが出ているようです。(※一旦ここはスルー)


PRをMerge



※Githubリポジトリ上のhoge/deploy.yamlの中身は↓のようになりました。

hoge/deploy.yaml
template-file-path: hoge/template.yaml
parameters: {}
tags: {}

ローカルにpull & synthして再push

deploy.yamlの中身が書き換わっているのでローカルにpull=>template.yamlにsynth結果が記されるように以下を実行。

$ git pull && cdk synth > hoge/template.yaml

synth結果は以下になります。

hoge/template.yaml
Resources:
  GitSyncPracQueueF0323D16:
    Type: AWS::SQS::Queue
    Properties:
      VisibilityTimeout: 300
    UpdateReplacePolicy: Delete
    DeletionPolicy: Delete

🔻
確認後、add+commit+pushします。

$ git add . && git commit -m "second commit" && git push -u origin main

🔻
同期イベントもTEMPLATE_BUNDLEDから始まり、
=>CHANGESET_CREATION_ IN_PROGRESS=>CHANGESET_CREATION_SUCCEEDED
=>CHANGESET_EXECUTION_IN_PROGRESS=>STACK_UPDATE_SUCCEEDED
となりました。

プロビジョニングも今度は無事「成功しました」と表示されています。


リソースの作成を確認

「リソース」タブを覗くと無事SQS::Queueが作成されていました。

🔻
「イベント」タブを見ると、先ほどのwaitConditionは削除が走っている事も確認出来ました。


以上でした

「AWS CodeStar Connections Apiが利用されている。」という部分も気になった事含め、明日以降も少し掘り下げて触ってみたいと思います。

有難うございました。

Discussion