created: 2020-12-06T13:07:00.000Z

Chalice の generate pipeline を試す (コードはGitHub)

chalice pipeline の動作検証

私用のAWSアカウントで chalice pipeline コマンドを試してみた。 デフォルトだとソースコードの管理は AWS Code Commit になるが、GitHubが使いたいのでそのようにした。

AWS => GitHub へのアクセストークン

GitHubからソースコードを取得できるように、GitHubのアクセストークンを払い出す。権限はreposが読めればよい。

トークンをこんな感じのJSONに格納して、AWS Secrets Manager に置く。

$ cat /tmp/secrets.json
{"OAuthToken": "xxxxxxxx"}
$ aws secretsmanager create-secret --name GithubRepoAccess \
  --description "Token for Github Repo Access" \
  --secret-string file:///tmp/secrets.json

設定ファイルの生成

chalice generate-pipeline でパイプラインをつくるためのcloudformationテンプレートを生成する。

$ chalice generate-pipeline \
    --pipeline-version v2 \
    --source github \
    --buildspec-file buildspec.yml \
    pipeline.json

自分の場合はjsonだとコメントがつけられなくて不便だったのでyamlに変換した。

cat ./pipeline.json | yq -y . | tee ./pipeline.yaml
rm ./pipeline.json

cloudformation deploy

cloudformationのテンプレートを適用する。

aws cloudformation deploy \
    --template-file pipeline.json \
    --capabilities CAPABILITY_IAM \
    --stack-name {{ }} \
    --parameter-overrides \
        GithubOwner={{ }} \
        GithubRepoName={{  }} \

--capabilities オプションは、AWSの仕様で承認していることを示すためにつける必要があるオプション。

CloudFormation の仕様として、AWSアカウントのアクセス権限に影響するリソース(Roleの作成など)を含む可能性があるテンプレートを指定する場合、明示的に --capabilities を使ってテンプレート機能の承認を行う必要があります。

オプション

自動生成されるpipeline.yamlに用意されているオプションは以下の通り

$ cat ./pipeline.yaml | yq -y .Parameters
ApplicationName:
  Default: sandbox
  Type: String
  Description: Enter the name of your application
CodeBuildImage:
  Default: aws/codebuild/amazonlinux2-x86_64-standard:3.0
  Type: String
  Description: Name of codebuild image to use.
GithubOwner:
  Type: String
  Description: The github owner or org name of the repository.
GithubRepoName:
  Type: String
  Description: The name of the github repository.
GithubRepoSecretId:
  Type: String
  Default: GithubRepoAccess
  Description: The name/ID of the SecretsManager secret that contains the personal
    access token for the github repo.
GithubRepoSecretJSONKey:
  Type: String
  Default: OAuthToken
  Description: The name of the JSON key in the SecretsManager secret that contains
    the personal access token for the github repo.

この2つは必須のオプション

GithubOwner

The github owner or org name of the repository.

GithubRepoName

The name of the github repository.

GitHubのURLはこうなってるので

/repos/:owner/:repo/git/trees/:sha

たとえばchaliceの場合はこうなる

  • GithubOwner=aws
  • GithubRepoName=chalice

実行

circleciのように buildspec.yml に定義したスクリプトが実行される。