前回の続きでAWS CDKで実際にコードを書いていきます。やっと本番です。
AWS CDKでコード書く前に
要件
それでは実際にコード書いてみますが、まず要件を確認して作成するAWSリソースについて整理します。
目的:Gitlabのバックアップを取得するためのS3 BucketとIAMユーザ(+Policy)を作成する
・空のS3 Bucketを作成
・バックアップ用のIAMユーザを作成して、S3へアップロードできる権限(Policy)を追加
・10日間で自動的に削除されるようにバケットポリシーを設定する
必要なモジュールをインストールする
はじめにAWS CDKからS3とIAMを操作するためのモジュールをインストールします。
> pip install aws_s3
> pip install aws_iam
AWS CDKでコード書く
次に実際のCDKのコードについてになります。
Pythonを使ったことがある方ならばCloudFormationに比べて読みやすいコードではないでしょうか。
PythonのCDKのサンプルはまだ少ないので、もし変な部分があった指摘いただければと思います。
今回はS3BucketやIAMユーザ、ポリシーはCDKで作成しますが、IAMユーザのAPIキーだけは手動で作成します。
※S3バケットは世界でユニークになる必要があるので変更してください。
from aws_cdk import (
aws_s3 as s3,
aws_iam as iam,
core
)
class AwsGitlabBkStack(core.Stack):
def __init__(self, scope: core.Construct, construct_id: str,
**kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
# Create s3 bucket for gitlab backup
s3_bucket = s3.Bucket(self, 'syachiku-gitlab-bk',
bucket_name = "syachiku-gitlab-bk",
block_public_access =
s3.BlockPublicAccess(
block_public_acls=True,
block_public_policy=True,
ignore_public_acls=True,
restrict_public_buckets=True
),
lifecycle_rules = [{ "expiration": core.Duration.days(10),}],
removal_policy = core.RemovalPolicy.DESTROY
)
backup_user = iam.User(self, "gitlab-bk-user",
user_name="gitlab-bk-user"
)
# Create IAM role for gitlab backup
backup_policy_statement = iam.PolicyStatement(
actions = [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"
],
resources = [ s3_bucket.bucket_arn+"/*" ]
)
backup_policy = iam.Policy(self, "gitlab-bk-policy",
policy_name = "gitlab-bk-polic",
statements = [
backup_policy_statement
],
users = [
backup_user
]
)
AWS CDK実行
はじめてCDKを使う場合にはcdk synthを行ってCDK用のスタックを作成してから、cdk diffで確認→deployでDeployしてAWSリソースを作成します。
> cdk synth
> cdk diff
> cdk deploy
スタックの確認
Deployして問題が発生しなければ数分でAWS上にリソースが作成されます。完了したら作成されているかを確認してみます。
まずAWSコンソールにログオンしてから、CloudFormationでスタックに作成されていることを確認します。
CDKToolkitスタックはcdk synthで作成されたスタックでCDKコマンドでのリソースDeployに自動的に使われます。
スタックの詳細からリソースを開くと、今回CDKで作成されたAWSリソースを確認することができます。
S3バケットも作成されていることが確認できます。
さらにバケットポリシーで10日後に削除するように設定されていることも確認できます。
最後にIAMユーザについても作成されていて、CDKで合わせて作成したS3バケットへアクセスするためのポリシーも設定されていることが分かります。
まとめ
いかがだったでしょうか。今回作成したリソースくらいであれば手動で作ることも簡単ではありますが、「コードでインフラを定義する」というメリットを享受することができません。
「コードでインフラを定義する」ことで履歴が残り、更新箇所が明確になり、更新サイクルが順調に回り、自分以外のメンバーへコードを共有することで知見を広めることができるようになる、などの様々なメリットを感じることができます。
AWS CDKでなくでもInfrastructure as Codeを試すことはできますが、オンプレのVMwareやOpenStackなどで試すよりはクラウドでのAWSやAzureなどのほうが試しやすいと思います。
Pythonのオススメ勉強方法
私がオススメするPython初心者向けの最初に購入すべき書籍は「シリコンバレー一流プログラマーが教える Pythonプロフェッショナル大全」です。
シリコンバレー一流プログラマーが教える Pythonプロフェッショナル大全
この書籍は実際にシリコンバレーの一流エンジニアとして活躍している酒井潤さんが書いた本です。
内容も初心者から上級者までまとめられており、各Lessonも長すぎずに分かりやすくまとめられているので、初心者の方にもおすすめです。
シリコンバレー一流プログラマーが教える Pythonプロフェッショナル大全
今回は以上となります。
コメント