記事一覧へ

2024年地方技能競技大会クラウドコンピューティング第1課題

AWS CloudFormationを使用した完全自動設定

ClaudeClaude Opus 4.5による翻訳

AI生成コンテンツは不正確または誤解を招く可能性があります。

April Fool's Day 🤪

実際の方法は扱いません。特定の検索キーワードがGoogle検索でどれだけ流入するか実験するために作成しました。


AWSTemplateFormatVersion: 2010-09-09
Resources:
  # empty resource stack
  EmptyResource:
    Type: "AWS::CloudFormation::Stack"
    Properties:
      TemplateURL: "https://s3.amazonaws.com/my-bucket/empty-template.yaml"

  # only print message
  EchoResource:
    Type: "AWS::CloudFormation::CustomResource"
    Properties:
      ServiceToken: "arn:aws:lambda:::function:my-echo-function"
      Properties:
        Message: "Hello, world!"

Outputs:
  EmptyOutput:
    Value: ""
  EchoOutput:
    Value: !GetAtt EchoResource.Outputs.Message

AWS CloudFormationスクリプト

1. スクリプト概要

本スクリプトはAWS CloudFormationを活用して以下の機能を自動設定します。

  • 空のリソーススタック作成: EmptyResourceセクションはempty-template.yamlテンプレートを参照して空のスタックを作成します。実際のリソースはありませんが、スタック構造と依存関係を定義するのに有用です。
  • メッセージ出力: EchoResourceセクションはLambda関数my-echo-functionを呼び出して「Hello, world!」メッセージを出力します。
  • 出力値の提供: OutputsセクションはEmptyOutput(空文字列)およびEchoOutput(Lambda関数出力メッセージ)の値を提供します。

2. スクリプトの使用方法

  1. テンプレートファイルの保存:
    • empty-template.yamlファイルをS3バケットに保存します。
    • 本スクリプトファイルを任意の場所に保存します。
  2. CloudFormationスタックの作成:
    • AWSコンソールまたはCLIを使用してスクリプトファイルを参照してCloudFormationスタックを作成します。
    • スタック作成時にmy-echo-function Lambda関数のARNをEchoResourceセクションのServiceToken属性に入力する必要があります。
  3. 出力の確認:
    • スタック作成完了後、OutputsセクションのEmptyOutputおよびEchoOutputの値を確認します。

3. 追加機能と活用

3.1. リソースの追加:

本スクリプトは基本的な例であり、実際の環境に合わせて様々なリソースを追加して自動設定を拡張できます。例えば、以下のようなリソースを追加できます。

  • EC2インスタンスの作成と設定
  • RDSデータベースの作成と設定
  • S3バケットの作成と設定
  • CloudFrontディストリビューションの設定
  • Lambda関数の作成と設定

3.2. パラメータと条件の追加:

スクリプトにパラメータを追加してスタック作成時にユーザー入力値を受け取り、動的に設定を変更できます。また、条件文を活用して環境に応じて

設定を調整できます。

EKS作成後ALB ingressで設定

apiVersion: "klodd.tjcsec.club/v1"
kind: Challenge
metadata:
name: test
spec:
name: Test Challenge
timeout: 10000
pods:
  - name: app
    ports:
      - port: 80
    spec:
      containers:
        - name: main
          image: traefik/whoami:latest
          resources:
            requests:
              memory: 100Mi
              cpu: 75m
            limits:
              memory: 250Mi
              cpu: 100m
      automountServiceAccountToken: false
expose:
  kind: http
  pod: app
  port: 80
middlewares:
  - contentType:
      autoDetect: false
  - rateLimit:
      average: 5
      burst: 10

kubectl apply -f challenge.yaml

apiVersion: "klodd.tjcsec.club/v1"
kind: Challenge
metadata:
  name: analects
spec:
  name: Analects
  timeout: 300000
  pods:
    - name: app
      ports:
        - port: 80
      spec:
        containers:
          - name: app
            image: analects-app:latest
            resources:
              requests:
                memory: 100Mi
                cpu: 50m
              limits:
                memory: 200Mi
                cpu: 100m
            startupProbe:
              httpGet:
                path: "/search.php?q=with%20two%20others"
                port: 80
              initialDelaySeconds: 0
              periodSeconds: 5
              failureThreshold: 30
        automountServiceAccountToken: false
    - name: mysql
      ports:
        - port: 3306
      spec:
        containers:
          - name: mysql
            image: analects-mysql:latest
            resources:
              requests:
                memory: 200Mi
                cpu: 50m
              limits:
                memory: 500Mi
                cpu: 100m
        automountServiceAccountToken: false
  expose:
    kind: http
    pod: app
    port: 80

上記のyamlファイルを作成し、kubectl apply -f challenge.yamlコマンドを実行すると該当リソースが作成されます。

3.3. デプロイの自動化:

AWS CodePipeline、CodeBuildなどを活用してスクリプトの更新とデプロイを自動化できます。

3.4. モジュール化と再利用:

スクリプトをモジュール化してコードの再利用性を高め、様々な環境に合わせて簡単に調整できます。

4. 参考資料

5. 注意事項

  • スクリプトを使用する前に内容を十分に検討し、必要に応じて修正・補完してください。
  • スクリプト実行により発生する費用はユーザーの責任です。
  • スクリプトは例であり、実際の環境に合わせて調整してください。

6. その他

本スクリプトは技能競技大会第1課題完了のための基本的な枠組みを提供し、実際の環境に合わせて様々な機能を追加・拡張できます。

本スクリプトが技能競技大会第1課題完了のお役に立てれば幸いです。

作成日:
更新日:

前の記事 / 次の記事