はじめに
これの続きです。自作したAlexa用のテンプレートをS3バケットを使って公開しました。
やったこと
以下のようなテンプレートファイルをS3にデプロイするだけですが、
{
"Hello TS": {
"gitUrl": "https://github.com/ufoo68/alexa-hello-ts.git"
}
}
ただ単純にAWSのコンソールを触ってやるだけでは面白くなかったので以下のようなことをしてみました。
- AWS CDKを使ってS3の設定とテンプレートファイルを構成
- GitHub Actionsを使ってmasterブランチへのプッシュとマージのときに自動デプロイ
GitHub Actionsを使ってAWS CDKでデプロイを行うためのスクリプトはこちらの記事を参考にしました。
Actionを定義
基本は参考記事のyamlがベースですが、他のブランチからmasterにマージしたときも同様にデプロイを行ってほしかったので以下のようにスクリプトを書きました。
name: cdk
on:
push:
branches:
- masterr
pull_request:
types: [closed]
branches:
- master
jobs:
aws_cdk:
runs-on: ubuntu-18.04
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Setup Node
uses: actions/setup-node@v1
with:
node-version: '12.x'
- name: Setup dependencies
run: yarn
- name: Build
run: yarn build
- name: CDK Deploy
if: contains(github.event_name, 'push') || github.event.pull_request.merged == true
run: yarn cdk:deploy
env:
AWS_DEFAULT_REGION: 'ap-northeast-1'
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
これで、masterへの直接プッシュ時はもちろん、pull-requestがCloseして尚且マージされた状態のときだけCDK Deploy
が走ります。
S3の構成
構成というほど大したものはないですが、単純にファイルをデプロイして公開するといった設定内容でCDKのスクリプトを記述しました。
import * as cdk from '@aws-cdk/core'
import * as s3 from '@aws-cdk/aws-s3'
import * as iam from '@aws-cdk/aws-iam'
import * as s3deploy from '@aws-cdk/aws-s3-deployment'
export class AskTemplatesStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props)
const bucket = new s3.Bucket(this, 'Bucket', {
publicReadAccess: true,
removalPolicy: cdk.RemovalPolicy.DESTROY,
})
bucket.addToResourcePolicy(new iam.PolicyStatement({
actions: ['s3:GetObject'],
resources: [`${bucket.bucketArn}/*`],
principals: [new iam.AccountRootPrincipal()],
}))
new s3deploy.BucketDeployment(this, 'Deploy', {
sources: [s3deploy.Source.asset('./assets')],
destinationBucket: bucket,
})
}
}
さいごに
今回つくったソースコード一式はここのGitHubで公開しています。一応README
にも記載していますが、こちらのレポジトリをフォークして自分のテンプレートをjsonに書いたものをプルリクしてくれたら私の方でマージして一緒にデプロイすることが可能です。
どうせ大してアクセスも集中することはないと思いますので、しばらくこのS3にデプロイしたテンプレートを公開しておきます。もし自分のテンプレートをお持ちで尚且、S3にデプロイするのが面倒だと思っている方は是非ご活用下さい。