2024年地方技能競技大会クラウドコンピューティング第1課題
AWS CloudFormationを使用した完全自動設定
Claude 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.MessageAWS CloudFormationスクリプト
1. スクリプト概要
本スクリプトはAWS CloudFormationを活用して以下の機能を自動設定します。
- 空のリソーススタック作成:
EmptyResourceセクションはempty-template.yamlテンプレートを参照して空のスタックを作成します。実際のリソースはありませんが、スタック構造と依存関係を定義するのに有用です。 - メッセージ出力:
EchoResourceセクションはLambda関数my-echo-functionを呼び出して「Hello, world!」メッセージを出力します。 - 出力値の提供:
OutputsセクションはEmptyOutput(空文字列)およびEchoOutput(Lambda関数出力メッセージ)の値を提供します。
2. スクリプトの使用方法
- テンプレートファイルの保存:
empty-template.yamlファイルをS3バケットに保存します。- 本スクリプトファイルを任意の場所に保存します。
- CloudFormationスタックの作成:
- AWSコンソールまたはCLIを使用してスクリプトファイルを参照してCloudFormationスタックを作成します。
- スタック作成時に
my-echo-functionLambda関数のARNをEchoResourceセクションのServiceToken属性に入力する必要があります。
- 出力の確認:
- スタック作成完了後、
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: 10kubectl 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. 参考資料
- AWS CloudFormationドキュメント: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/
- AWS CloudFormationテンプレート例: [無効なURL削除済み]
- AWS Lambdaドキュメント: https://docs.aws.amazon.com/lambda/
5. 注意事項
- スクリプトを使用する前に内容を十分に検討し、必要に応じて修正・補完してください。
- スクリプト実行により発生する費用はユーザーの責任です。
- スクリプトは例であり、実際の環境に合わせて調整してください。
6. その他
本スクリプトは技能競技大会第1課題完了のための基本的な枠組みを提供し、実際の環境に合わせて様々な機能を追加・拡張できます。
本スクリプトが技能競技大会第1課題完了のお役に立てれば幸いです。
作成日:
更新日: