Skip to content

Commit

Permalink
Athena Federated Queryを実装
Browse files Browse the repository at this point in the history
  • Loading branch information
mazyu36 committed Feb 11, 2023
1 parent b98d78f commit 6bf2161
Show file tree
Hide file tree
Showing 17 changed files with 9,177 additions and 41 deletions.
64 changes: 54 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,58 @@
# Welcome to your CDK TypeScript project
# Fargate Bastion(AWS CDK)
AWS Fargateによる踏み台サーバ構築、およびAthena Federated Query構築をCDKで行う。
(主に参考資料[2]の内容を元に実装)
## Achitecture

This is a blank project for CDK development with TypeScript.
![](./docs/architecture.drawio.svg)

The `cdk.json` file tells the CDK Toolkit how to execute your app.
以下ポイントのみ記載。

## Useful commands
### Fargate Bastion
* 踏み台構築に関連するのはAuroraとSecrets Manager以外。Auroraは踏み台の動作検証用。
* Fargate(ECS)はECSサービスを使用して起動する方式にした(実装上はタスク数を0にしてあり、必要時に1にして起動する等を想定)。
* ECSのタスク定義でAuroraの認証情報(Secrets Manager)を環境変数として注入している。
* CodeCommitに踏み台用の資材をプッシュしたら自動的にCodePipelineでビルド&デプロイが行われるようにしている。
* CodeCommitは手動で作成で作成したものを参照する形とした。また踏み台用の資材は手動でCodeCommitにプッシュする形とした。
* リポジトリはCDKスタックとライフサイクルを分けたかったため、手動作成。
* 後者は`ecr-deploy` など外部ライブラリを使えば自動でできなくもないが、あまり複雑にしたくない、かつ踏み台の資材は頻繁に更新は入らないと考えこの形式とした。

* `npm run build` compile typescript to js
* `npm run watch` watch for changes and compile
* `npm run test` perform the jest unit tests
* `cdk deploy` deploy this stack to your default AWS account/region
* `cdk diff` compare deployed stack with current state
* `cdk synth` emits the synthesized CloudFormation template
### Athena Federated Query
* Athena Federated QueryによりAuroraの中身をクエリできる仕組み。
* LambdaからSecrets Managerに接続するためのVPCエンドポイント、S3(Spill Bucket)に接続するためのVPCエンドポイントが必要な点に注意。
## リポジトリ構成(lib配下のみ)
```
├── fargateBastionStack.ts // 1スタック構成
└── constructs
├── AthenaConstruct.ts // Athenaの定義
├── AuroraConstruct.ts // Auroraの定義
├── BastionCodepipelineConstruct.ts // CodePipelineとそれに付随するリソースの定義
├── BastionEcsConstruct.ts // ECSとそれに付随するリソースの定義
├── EcrConstruct.ts // ECRの定義
├── SecurityGroupConstruct.ts // セキュリティグループとVPCエンドポイントの定義
├── config
│ └── buildspecConfig.ts // CodeBuildにおけるビルドスペックを取得する関数の定義
├── docker // 踏み台サーバー用の資材。参考資料[3]の資材を参考にさせていただいた。
│ ├── Dockerfile // 踏み台サーバー用のDockerfile
│ └── run.sh // 踏み台サーバーで使用するスクリプト
└── vpcConstruct.ts // VPCとサブネットの定義
```

## 使い方
* CodeCommitのリポジトリを手動で作成する(リポジトリ名は`BastionRepository`にする。変更する場合はCDKのハードコード箇所を修正する)。
* `./lib/constructs/docker/`配下の資材を上記リポジトリにプッシュ。
* Systems Managerでアドバンスドインスタンスティアへの変更をしておく。
* ECSサービスで踏み台のタスクを起動する。
* Systems Manager -> セッションマネージャーで対象のタスクを選択して接続。
* DBの接続情報は環境変数で読み込んでいるので、以下で接続可能。パスワードは`env|grep DB_PASSWORD`で確認する。
* `mysql -h $DB_HOST -u $DB_USERNAME --password=$DB_PASSWORD`


## 参考資料
* [1] 続:「Bastion ~ AWS Fargateで実現するサーバーレスな踏み台設計」<br/>
https://iselegant.hatenablog.com/entry/2020/09/28/012409

* [2] AWSコンテナ設計・構築[本格]入門 <br/>
https://www.amazon.co.jp/dp/B09DKZC1ZH/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

* [3] GitHub(参考資料[2]のGitHubリポジトリ)<br/>
https://github.com/uma-arai/sbcntr-resources/tree/main/fargate-bastion
15 changes: 1 addition & 14 deletions bin/cdk_fargate_bastion.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,8 @@
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { CdkFargateBastionStack } from '../lib/cdk_fargate_bastion-stack';
import { CdkFargateBastionStack } from '../lib/fargateBastionStack';

const app = new cdk.App();
new CdkFargateBastionStack(app, 'CdkFargateBastionStack', {
/* If you don't specify 'env', this stack will be environment-agnostic.
* Account/Region-dependent features and context lookups will not work,
* but a single synthesized template can be deployed anywhere. */

/* Uncomment the next line to specialize this stack for the AWS Account
* and Region that are implied by the current CLI configuration. */
// env: { account: process.env.CDK_DEFAULT_ACCOUNT, region: process.env.CDK_DEFAULT_REGION },

/* Uncomment the next line if you know exactly what Account and Region you
* want to deploy the stack to. */
// env: { account: '123456789012', region: 'us-east-1' },

/* For more information, see https://docs.aws.amazon.com/cdk/latest/guide/environments.html */
});
Loading

0 comments on commit 6bf2161

Please sign in to comment.