-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
17 changed files
with
9,177 additions
and
41 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 */ | ||
}); |
Oops, something went wrong.