アマゾンウェブサービスとエラスティックビーンズトークを使用して、シークレットファイルをEC2 Ruby on Railsアプリケーションにどのようにプッシュする必要がありますか?
ファイルをgitリポジトリに追加し、githubにプッシュしますが、秘密のファイルをgitリポジトリに入れないようにします。私は以下を使用してAWSにデプロイしています:
git aws.Push
次のファイルは.gitignoreにあります。
/config/database.yml
/config/initializers/omniauth.rb
/config/initializers/secret_token.rb
このリンクをたどって、S3ファイルをデプロイに追加しようとしました: http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/customize-containers.html
そのリンクからの引用:
スニペットの例
次の例では、Amazon S3バケットからZipファイルをダウンロードし、/ etc/myappに解凍します。
sources: /etc/myapp: http://s3.amazonaws.com/mybucket/myobject
これらの指示に従って、ファイルをS3バケットにアップロードし、以下をprivate.configファイルに追加しました。 .elasticbeanstalk .ebextensionsディレクトリ:
sources:
/var/app/current/: https://s3.amazonaws.com/mybucket/config.tar.gz
そのconfig.tar.gzファイルは次の場所に抽出されます。
/config/database.yml
/config/initializers/omniauth.rb
/config/initializers/secret_token.rb
ただし、アプリケーションがデプロイされると、S3ホスト上のconfig.tar.gzファイルがコピーまたは抽出されることはありません。 database.ymlが見つからず、EC2ログに設定ファイルのレコードがないというエラーが引き続き表示されます。エラーメッセージは次のとおりです。
Error message:
No such file or directory - /var/app/current/config/database.yml
Exception class:
Errno::ENOENT
Application root:
/var/app/current
タイプミスのようなにおいがします。
あなたがリンクした指示は、関連する部分で言う:
アプリケーションをデプロイするときにAWSElastic Beanstalk環境をカスタマイズするには、次の2つの手順が必要です。
- 拡張子が。configの構成ファイルを作成し、ソースバンドルの。ebextensionsトップレベルディレクトリに配置します。 。ebextensionsディレクトリに複数の構成ファイルを含めることができます。これらのファイルはアルファベット順に実行されます。たとえば、.ebextensions/01run.configは、.ebextensions /02do.configの前に実行されます。
ただし、.config
ファイルを.elasticbeanstalk
ディレクトリに配置したとのことです。ディレクトリ名を修正してみてください。
機密ファイルをS3に保存し、それらをBeanstalkインスタンスに自動的にコピーすることは可能です(そして簡単です)。
Beanstalkアプリケーションを作成すると、S3バケットが自動的に作成されます。このバケットは、アプリのバージョン、ログ、メタデータなどを保存するために使用されます。
Beanstalk環境に割り当てられているデフォルトのaws-elasticbeanstalk-ec2-role
には、このバケットへの読み取りアクセス権があります。
したがって、必要なのは、機密ファイルをそのバケット(バケットのルートまたは任意のディレクトリ構造)に配置し、.ebextension
設定ファイルを作成してEC2インスタンスにコピーすることだけです。
次に例を示します。
# .ebextensions/sensitive_files.config
Resources:
AWSEBAutoScalingGroup:
Metadata:
AWS::CloudFormation::Authentication:
S3Auth:
type: "s3"
buckets: ["elasticbeanstalk-us-east-1-XXX"] # Replace with your bucket name
roleName:
"Fn::GetOptionSetting":
Namespace: "aws:autoscaling:launchconfiguration"
OptionName: "IamInstanceProfile"
DefaultValue: "aws-elasticbeanstalk-ec2-role" # This is the default role created for you when creating a new Beanstalk environment. Change it if you are using a custom role
files:
/etc/pki/tls/certs/server.key: # This is where the file will be copied on the EC2 instances
mode: "000400" # Apply restrictive permissions to the file
owner: root # Or nodejs, or whatever suits your needs
group: root # Or nodejs, or whatever suits your needs
authentication: "S3Auth"
source: https://s3-us-west-2.amazonaws.com/elasticbeanstalk-us-east-1-XXX/server.key # URL to the file in S3
これはここに文書化されています: http://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/https-storingprivatekeys.html
S3cmdなどのコマンドラインユーティリティを使用して、bashスクリプトを実行し、必要なすべてのファイルをS3からダウンロードできます。
AWS ElasticBeanstalkのカスタマイズをカバーする一連の記事を書きました。
S3からのファイルのダウンロードの詳細については、 http://www.hudku.com/blog/security-credentials-setup-customizing/#aws-credentials-setup.sh を参照してください。
ソースのソースを/var/app/ondeck
に設定してみてください。 IIRC、スクリプトはそこで実行され、すべてが完了すると、フォルダーの名前が/var/app/current
に変更されるため、置き換えられようとしているビルドに解凍している可能性があります。