AWS IaC Program学習 Python

WindowでAWS CDKを使ってPythonでInfra as codeを試してみる(その2)

AWS

前回の続きで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の学習については、これまでもいくつかおすすめの書籍などを挙げていたこともありますが、今はまずは「Udemy」が何よりもオススメです。

Pythonの以下のコースは合計で28.5時間のビデオ講座があって、それらを受講するだけで、Pythonの基礎から応用まで学ぶことができます。

そして何より安いです!!
Udemyでは頻繁にセールが開催されているので、セールのタイミングで購入すれば2,000円以内で済みます。(※セールごとに割引率が少し違うみたいです)
書籍より安いビデオ講座があるとは・・・

現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル

私も受講してみましたが、かなり幅広く網羅されており、おそらくこれ以上の教材はないと思いますので、絶対にUdemyはおすすめです。

今回は以上となります。

コメント

タイトルとURLをコピーしました