バージョニングとライフサイクルルールを使用してs3バケットを作成するためのcloudformationスクリプトを作成しました。ここで、ローカルマシンから新しく作成したs3バケットに1つのファイル(テキストドキュメント)をアップロードしたいのですが、手動でアップロードしたくありません。 cloudformationスクリプトまたは他の提案でファイルへのパスを指定する方法はありますか?これが私のCFスクリプトです
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Resources" : {
"S3Bucket" : {
"Type" : "AWS::S3::Bucket",
"Properties" : {
"AccessControl" : "PublicRead",
"BucketName" : "s3testdemo",
"LifecycleConfiguration": {
"Rules": [
{
"Id": "GlacierRule",
"Status": "Enabled",
"ExpirationInDays": "365",
"Transition": {
"TransitionInDays": "30",
"StorageClass": "Glacier"
}
}
]
},
"VersioningConfiguration" : {
"Status" : "Enabled"
}
}
}
}
}
私が正しく理解している場合、バケットを作成するCloudFormationスタックを介してS3バケットにファイルをアップロードする方法があるかどうかを尋ねています。答えはイエスですが、単純でも直接的でもありません。
これを行うには2つの方法があります。
1)起動時にファイルをアップロードするEC2インスタンスを作成します。おそらく、EC2インスタンスを起動して、単一のファイルを送信するためだけに実行したままにしたくないでしょうが、それは機能します。
2)Lambdaベースのカスタムリソースを使用します。カスタムリソースの詳細については、 http://docs.aws.Amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html を参照してください。 CloudFormationでは、Lambda関数自体を作成し、そのLambda関数に基づいてカスタムリソースを作成できます。カスタムリソースが作成されると、Lambda関数が呼び出され、その関数呼び出しを使用してファイルをアップロードできます。
どちらのアプローチでも、S3アップロードの実行に必要なアクセス許可を付与するためにIAMロールを作成する必要があることに注意してください。