🎃

Clineで一からテスト付きLambdaURLデプロイパイプラインを作成してみたらどうなるかやってみた

に公開

何度やってもAWSクレデンシャルの環境変数設定は失敗しましたがそれ以外はそのままいけました!

https://zenn.dev/kameoncloud/articles/09127459e2291d
こちらの記事でClineを使ってCircleCIのパイプライン設定ファイルであるconfig.ymlを修正してみました。ClineはソースコードだけではなくCircleCIも学習しているようです。

さらにテスト付きLambda関数デプロイのパイプラインを作成してもらいました。Lambdaだとテストが少し煩雑になるためURL経由でアクセス&テストが可能なLambdaURLを用いました。

何度(5回)やってもAWS CredentialをCircleCIの環境変数から読み込む部分だけは気づかなかったようで、ここだけ明示的にプロンプトで指示を出したところ気づいてくれたようです。

さっそくやってみる

0. 環境準備

https://zenn.dev/kameoncloud/articles/641dbdd496a59d
この手順の3までをやっておきます。
本当はindex.mjsも何もない状態からClineに作業をしてもらいたかったのですが、CircleCIの制限で何かファイルが入っていないとブランチができないためindex.mjsだけを入れてあります。

index.mjs
export const handler = async (event) => {
   // TODO implement
   const response = {
     statusCode: 200,
     body: JSON.stringify('Hello from Lambda deployed by CircleCI!'),
   };
   return response;
 };

1.Cline on VSCode との対話

https://github.com/harunobukameda/LambdaURL がCircleCIのプロジェクトと連携しています。 index.mjsをURL付きLambdaとしてデプロイする設定を作成してください

このプロンプトで依頼をしました。
ガンガン以下の作業を行っています。

git clone https://github.com/harunobukameda/LambdaURL .
config.yml の修正
README.md の作成
SAM用template.ymlの作成
.gitignoreの作成
package.jsonの作成
.eslintrc.jsonの作成
index.mjsの修正
test-local.jsの作成
node test-local.js でテストファイルのテスト実行

また以下4つの環境変数を作成せよ、と指示が出ました。

- `AWS_ACCESS_KEY_ID`
- `AWS_SECRET_ACCESS_KEY`
- `AWS_REGION`
- `AWS_LAMBDA_ROLE_ARN`

上3つはすでに過去の手順でCircleCI側で作成済です。AWS_LAMBDA_ROLE_ARNは作成したLambda関数にアタッチする用ですのでIAMロールを作成してARNを環境変数に入れておきます。
途中何度かDeployエラーがCircleCI側で出ましたが、エラーをそのままコピペするとClienは修正を都度してくれます。


2, AWS Credentials の取り扱い指示

ただどうしてもAWS Credentialの正しい指定だけは5回試しましたが成功しませんでした。config.ymlでCircleCIの環境変数を指定する必要があるのですが、そこは最終的に以下で指示を出しました。

config.yml
<snip>
workflows:
  deploy-lambda-workflow:
    # Inside the workflow, you define the jobs you want to run.
    jobs:
      - deploy-lambda:
          # Use the aws-credentials context to access AWS credentials
          context:
            - aws-credentials
          # Only run on main branch
          filters:
            branches:
              only: main

通常CircleCIの環境変数はcontextとして読み込ませるのですが、その部分は漏れていました。

workflowには
          context:
            - aws-credentials
が必要じゃないですか?

と伝えるとすぐ思い出して修正してくれました。以下の通り無事Deloyが成功しました!

出来上がったファイル群はこちら!
https://github.com/harunobukameda/LambdaURL

Discussion