AWSIaCProgram学習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(ユーデミー)」によるビデオ学習です。

「Udemy」は、オンライン学習の提供サイトです。学びたい人は多くある講座の中から受講したいコースを選択することができ、動画で学べるのが特徴です。

多くあるPythonのコースの中でもオススメするPythonのコースは以下となります!!

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

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

私も購入して受講していますが、内容としては初心者の方から上級者まで対応する幅広い内容になっています。

下手な書籍を何冊か購入するより、この動画コースを最初からじっくりと受けることで総合的なスキルを習得することができるできます。おそらくこれ以上の教材はないと思いますので、絶対おすすめです。

ちなみに、Udemyでは頻繁にセール(1か月に2,3回程度)が開催されているので、セールのタイミングで購入すれば90%OFFになる講座もあるため、セールが開催されてからの購入をオススメします!

今回は以上となります。

コメント

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