1

私はGitをバージョンコントロールとして使用している開発者チームです。AWS CodePipelineの設定ファイルはどのように扱いますか?

私たちの開発プロセスは、ステージング、開発、およびプロダクションの3つ以上の段階が必要です。

これらの段階の間に変更する必要があるのは、Serverlessフレームワークにラムダファンクション、S3バケット、およびCloudFormationスタック用に作成する必要のあるその他のリソースの名前を指定する単一の設定ファイルです。

しかし、これはソースコントロールを少し難しくします。 configファイルをソースコードに直接置くと、元のファイルにコミット/プッシュするときにそれらのファイルがオーバーライドされないようにする必要があります。しかし、CodeBuildには何らかの形でアクセスする必要があり、指定されたステージの正しい設定ファイルを確実に取得する必要があります。

AWSエコシステムの一部であるこの問題に対する解決策を希望します。

+1

https://aws.amazon.com/blogs/devops/create-multiple-builds-from-the-same-source-using-different-aws-codebuild-build-specification-files/をお読みになりましたか?あなたのやりたいことに非常によく似ています。 – aderubaru

答えて

3

あなたの環境変数をCodeBuildのbuildspec.ymlで参照できるEC2パラメータストアに保存することをお勧めします。

あなたのケースでCodePipelineを使用するには、環境ごとに異なるパイプラインと異なるCodeBuildプロジェクトも必要です。例えば

は、あなたが変数(例えば$ENVIRONMENT=DEVELOPMENT)などの環境を指定する必要があり、あなたのCodeBuildプロジェクトでは、あなたがEC2パラメータストア(またはAWS SSM)で、次の変数を格納

DEVELOPMENT_DB_PASSWORD='helloworld' 
STAGING_DB_PASSWORD='helloworld' 
PRODUCTION_DB_PASSWORD='helloworld' 

を言います。これにはbuildspecを使用しないでください。 AWS ConsoleまたはCloudFormationを使用できます。

次に、あなたのbuildspec.ymlは次のようになります。

env: 
    parameter-store: 
    DEVELOPMENT_DB_PASS: "DEVELOPMENT_DB_PASSWORD" 
    STAGING_DB_PASS: "DEVELOPMENT_DB_PASSWORD" 
    PRODUCTION_DB_PASS: "DEVELOPMENT_DB_PASSWORD" 

これらの変数はそうのような${env:ENVIRONMENT}_DB_PASSを使用してserverless.ymlで、次にアクセスできます:

provider: 
    environment: 
    DB_PASS: ${env:${env:ENVIRONMENT}_DB_PASS} 

あなたが今しなければならないすべてはにありますそれぞれ独自のCodeBuildプロジェクトを持つ3つのCodePelinesを作成します(各プロジェクトは異なる$ENVIRONMENTを使用します)。

+0

私は最後のステップで立ち往生しています。serverless.ymlファイルが値をリテラル文字列として解釈していて、環境変数であることを認識していないと思います。 –

+0

私はそれを理解しました。別の$ {env:....}ラッパーでそれをラップする必要がありました。 –

+0

@TurnerHoughton悪いです。私は今それを更新しました。 – dashmug

2

なぜ3つの設定ファイルを使用しないのですか?各ステージに1つずつ。

関連する問題